Метод анализа C/C++ программ. Использование LLVM и декомпиляции в таком анализе. Проблемы декомпиляции и возможные способы применения анализа. Примеры.
The method of analysis of C/C++ programms. The usage of LLVM and decompilation in this analysis. Problems of decompilation. Possible ways of usage of analysis. Examples.
1 of 22
Download to read offline
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
Анализ программ: идеи
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. ● Частичная трансляция исходного образа
● Частичный анализ программы
● База сигнатур уязвимых программных компонент
● Интерактивное взаимодействие
Разделяй и властвуй