Дизассемблеры: 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.
  • Разбор кода неоднозначен — иногда инструмент ошибается на данных.
Проверьте себя
1. Чем Ghidra удобна для новичка?
AОна единственная умеет дизассемблировать
BОна бесплатна и имеет встроенный декомпилятор в псевдо-C
CОна работает только онлайн
DОна не требует знания ассемблера вообще
2. Что делает команда objdump -d program?
AЗапускает программу
BДизассемблирует секции с кодом
CУдаляет отладочные символы
DПоказывает строки