ݺߣ

ݺߣShare a Scribd company logo
Бинарный анализ с декомпиляцией и 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.ru
decompilation.info
github.com/smartdec/smartdec

More Related Content

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

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