Дизассемблеры: Ghidra, IDA Free, objdump
Главные инструменты статического анализа и с чего начать.
Дизассемблер — программа, которая переводит машинный код обратно в читаемый ассемблер.
Зачем нужен дизассемблер
Открыть бинарь в текстовом редакторе бесполезно — там байты. Дизассемблер разбирает эти байты в инструкции, находит функции, строит граф вызовов и переходов. Это основной инструмент реверсера. Делаем акцент на бесплатных инструментах.
Ghidra (бесплатна, открытый код)
Разработана АНБ США и выложена в открытый доступ. Мощный дизассемблер со встроенным декомпилятором — он показывает не только ассемблер, но и псевдо-C, что сильно облегчает чтение. Поддерживает множество архитектур. Отличный выбор для старта: бесплатна и функциональна.
IDA Free (бесплатная версия)
IDA — легендарный коммерческий дизассемблер; есть бесплатная версия IDA Free с ограничениями. Очень удобная навигация, граф потока управления, переименование. Платная версия — индустриальный стандарт, но для обучения хватает Free или Ghidra.
objdump (командная строка)
Часть пакета GNU binutils, есть в любом Linux. Быстро показать дизассемблер прямо в терминале:
objdump -d program # дизассемблировать секции с кодом
objdump -M intel -d prog # в синтаксисе Intel (привычнее)
objdump -h program # показать список секций
objdump не интерактивен, но идеален для быстрого взгляда и автоматизации.
Как работает под капотом: проблема разбора
Дизассемблирование не всегда однозначно: данные и код могут перемешиваться, инструкции переменной длины (в x86) усложняют разбор. Есть два подхода — линейный (подряд) и рекурсивный (по графу переходов). Ghidra и IDA используют умный рекурсивный, objdump — простой линейный, поэтому иногда ошибается на данных.
Что выбрать новичку
- Для изучения — Ghidra: бесплатна, есть декомпилятор.
- Для быстрого взгляда в Linux — objdump.
- IDA Free — если хочется попробовать индустриальный интерфейс.
Частые ошибки
- Доверять декомпилятору на 100% — он восстанавливает приблизительно, всегда сверяйтесь с ассемблером.
- Забывать переключить objdump в синтаксис Intel, если привыкли к нему (по умолчанию AT&T).
Итог
- Дизассемблер переводит байты в ассемблер; Ghidra и IDA ещё и декомпилируют в псевдо-C.
- Бесплатный набор для старта: Ghidra + objdump.
- Разбор кода неоднозначен — иногда инструмент ошибается на данных.