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

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

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