22
Бинарный анализ с декомпиляцией и LLVM Ленар Сафин, Ярослав Александров к.ф.-м.н. Катерина Трошина, к.ф.-м.н. Александр Чернов PHDays V, 26 мая 2015

Бинарный анализ с декомпиляцией и LLVM

Embed Size (px)

Citation preview

Page 1: Бинарный анализ с декомпиляцией и LLVM

Бинарный анализ с декомпиляцией и LLVM

Ленар Сафин, Ярослав Александровк.ф.-м.н. Катерина Трошина, к.ф.-м.н. Александр Чернов

PHDays V, 26 мая 2015

Page 2: Бинарный анализ с декомпиляцией и LLVM

Откуда мы пришли? Кто мы? Куда мы идем?

● Анализ программ

● Декомпиляция

– IA32/AMD64– ARM/AArch64– Custom (VMs, less-known archs...)

● Деобфускация

Page 3: Бинарный анализ с декомпиляцией и LLVM

● Статический анализ

– Поиск по шаблонам– Taint analysis (dflow)

● Расширяемая база знаний

● Python API

Анализ программ: идеи

Page 4: Бинарный анализ с декомпиляцией и LLVM

Анализ программ: архитектура

Page 5: Бинарный анализ с декомпиляцией и LLVM

Анализ программ: архитектура

Page 6: Бинарный анализ с декомпиляцией и LLVM

● Большое количество качественных фронтендов

● Отлично подходит для представления C-family программ

● Реализация часто используемых алгоритмов из коробки + куча сторонних библиотек

– Dominators, loops etc...

– Dataflow

– AA, TBAA● Либеральная лицензия (University of

Illinois/NCSA – MIT/3-BSD based)

LLVM aka Low Level Virtual Machine

Page 7: Бинарный анализ с декомпиляцией и LLVM

Анализ программ: архитектура

Page 8: Бинарный анализ с декомпиляцией и LLVM

● Больше информации об исходной программе

● Программные компоненты без исходного кода

– Библиотеки– Исполняемые файлы

● Legacy компоненты без исходного кода

● Другое

● Потому что мы можем

А зачем декомпиляция?

Page 9: Бинарный анализ с декомпиляцией и LLVM

Анализ программ: архитектура

Page 10: Бинарный анализ с декомпиляцией и LLVM

● Утеряно большое количество информации

– Подпрограммы– Переменные– Классы и типы данных

● ABI больше, чем пальцев на руках

● Файл может быть упакован

Декомпиляция: проблемы

Page 11: Бинарный анализ с декомпиляцией и LLVM

● Полностью автоматический

● Качественный вывод

● Восстановление высокоуровневой семантики программы

– Подпрограммы, CFG

– Переменные и типы данных● Поддержка высокоуровневых конструкций C++

– vftables, RTTI

– EH● Расширяемая база знаний

● Встроенный распаковщик

Декомпиляция: идеи

Page 12: Бинарный анализ с декомпиляцией и LLVM

● Восстановление CFG программы

– Анализ по прологам– Сигнатурный поиск (like FLIRT)– vftables, SEH handlers...

● Анализ потоков данных

Декомпиляция: how it works

Page 13: Бинарный анализ с декомпиляцией и LLVM

● Восстановление переменных

– Временные (стек, регистры)

– Локальные (стек, регистры)

– Глобальные● Восстановление типов данных

– Базовые типы (int, float, ptrs...)

– Структурные типы (массивы, структуры)

Декомпиляция: how it works

Page 14: Бинарный анализ с декомпиляцией и LLVM

● Генерация LLVM

● Упрощение IR

– DCE, memprop● Распознавание встраиваемых функций

● Распознавание регионов CFG (циклы, условия...)

Декомпиляция: how it works

Page 15: Бинарный анализ с декомпиляцией и LLVM

Пример: strbuf

Page 16: Бинарный анализ с декомпиляцией и LLVM

Пример: strbuf

Page 17: Бинарный анализ с декомпиляцией и LLVM

Пример: strbuf

Page 18: Бинарный анализ с декомпиляцией и LLVM

Пример: strbuf

Page 19: Бинарный анализ с декомпиляцией и LLVM

● Поддерживаемые архитектуры

– IA32 (AMD64 in work)● Поддерживаемые образы программ

– PE/COFF

– ELF

– Mach-O● База знаний

– LibC

– Stdlib

– Win32 API

– POSIX API

– Linux API

Introducing posx86

Page 20: Бинарный анализ с декомпиляцией и LLVM

● Статический анализ и интерпретация

● Бинарная и не только трансляция

– Бэкэнды: ARM, MIPS, JavaScript– Платформы: Win, UNIX– Just for fun

● Классическая декомпиляция в псевдокод

● Графическое отображение CFG программы

Возможные применения

Page 21: Бинарный анализ с декомпиляцией и LLVM

● Частичная трансляция исходного образа

● Частичный анализ программы

● База сигнатур уязвимых программных компонент

● Интерактивное взаимодействие

Разделяй и властвуй

Page 22: Бинарный анализ с декомпиляцией и LLVM

Спасибо за внимание!

smartdec.rudecompilation.info

github.com/smartdec/smartdec