Upload
smartdec
View
246
Download
5
Embed Size (px)
Citation preview
Бинарный анализ с декомпиляцией и LLVM
Ленар Сафин, Ярослав Александровк.ф.-м.н. Катерина Трошина, к.ф.-м.н. Александр Чернов
PHDays V, 26 мая 2015
Откуда мы пришли? Кто мы? Куда мы идем?
● Анализ программ
● Декомпиляция
– IA32/AMD64– ARM/AArch64– Custom (VMs, less-known archs...)
● Деобфускация
● Статический анализ
– Поиск по шаблонам– Taint analysis (dflow)
● Расширяемая база знаний
● Python API
Анализ программ: идеи
Анализ программ: архитектура
Анализ программ: архитектура
● Большое количество качественных фронтендов
● Отлично подходит для представления C-family программ
● Реализация часто используемых алгоритмов из коробки + куча сторонних библиотек
– Dominators, loops etc...
– Dataflow
– AA, TBAA● Либеральная лицензия (University of
Illinois/NCSA – MIT/3-BSD based)
LLVM aka Low Level Virtual Machine
Анализ программ: архитектура
● Больше информации об исходной программе
● Программные компоненты без исходного кода
– Библиотеки– Исполняемые файлы
● Legacy компоненты без исходного кода
● Другое
● Потому что мы можем
А зачем декомпиляция?
Анализ программ: архитектура
● Утеряно большое количество информации
– Подпрограммы– Переменные– Классы и типы данных
● ABI больше, чем пальцев на руках
● Файл может быть упакован
Декомпиляция: проблемы
● Полностью автоматический
● Качественный вывод
● Восстановление высокоуровневой семантики программы
– Подпрограммы, CFG
– Переменные и типы данных● Поддержка высокоуровневых конструкций C++
– vftables, RTTI
– EH● Расширяемая база знаний
● Встроенный распаковщик
Декомпиляция: идеи
● Восстановление CFG программы
– Анализ по прологам– Сигнатурный поиск (like FLIRT)– vftables, SEH handlers...
● Анализ потоков данных
Декомпиляция: how it works
● Восстановление переменных
– Временные (стек, регистры)
– Локальные (стек, регистры)
– Глобальные● Восстановление типов данных
– Базовые типы (int, float, ptrs...)
– Структурные типы (массивы, структуры)
Декомпиляция: how it works
● Генерация LLVM
● Упрощение IR
– DCE, memprop● Распознавание встраиваемых функций
● Распознавание регионов CFG (циклы, условия...)
Декомпиляция: how it works
Пример: strbuf
Пример: strbuf
Пример: strbuf
Пример: strbuf
● Поддерживаемые архитектуры
– IA32 (AMD64 in work)● Поддерживаемые образы программ
– PE/COFF
– ELF
– Mach-O● База знаний
– LibC
– Stdlib
– Win32 API
– POSIX API
– Linux API
Introducing posx86
● Статический анализ и интерпретация
● Бинарная и не только трансляция
– Бэкэнды: ARM, MIPS, JavaScript– Платформы: Win, UNIX– Just for fun
● Классическая декомпиляция в псевдокод
● Графическое отображение CFG программы
Возможные применения
● Частичная трансляция исходного образа
● Частичный анализ программы
● База сигнатур уязвимых программных компонент
● Интерактивное взаимодействие
Разделяй и властвуй
Спасибо за внимание!
smartdec.rudecompilation.info
github.com/smartdec/smartdec