Отладчики: x64dbg и gdb

Инструменты динамического анализа — наблюдаем за программой в движении.

Отладчик (debugger) — программа, которая позволяет выполнять другую программу пошагово, останавливать её и читать память и регистры.

Зачем нужен отладчик в реверсе

Статика показывает код, но не реальные значения. Отладчик позволяет остановить программу в нужном месте и посмотреть: что в регистрах, что в памяти, по какой ветке пошло выполнение. Это незаменимо, когда логика зависит от данных.

x64dbg (Windows, бесплатный)

Открытый отладчик для Windows с удобным графическим интерфейсом. Показывает дизассемблер, регистры, стек, память в одном окне. Популярен для разбора учебных crackme под Windows и анализа PE.

gdb (Linux)

Стандартный отладчик Linux, командная строка. Несколько базовых команд:

gdb ./program          # запустить отладчик
break main             # точка останова на функции main
run                    # запустить программу
info registers         # показать регистры
stepi                  # выполнить одну инструкцию
continue               # продолжить до следующей точки

Удобнее с расширениями вроде pwndbg или GEF — они красиво показывают регистры и стек.

Ключевые приёмы

  • Точка останова (breakpoint) — пометка «остановись здесь». Ставится на интересную функцию или адрес.
  • Шаг (step) — выполнить одну инструкцию и снова остановиться.
  • Чтение регистров и памяти — увидеть реальные значения.

Как работает под капотом: программные точки останова

Чаще всего отладчик ставит breakpoint, временно заменяя байт инструкции на специальную команду прерывания (в x86 — int3, байт 0xCC). Когда выполнение доходит до неё, процессор передаёт управление отладчику, тот восстанавливает оригинальный байт и даёт вам осмотреться. Есть и аппаратные точки останова — их поддерживает сам процессор.

Частые ошибки

  • Запускать малварь в отладчике на рабочей машине — только в изоляции.
  • Забывать, что адреса в памяти могут отличаться от адресов в файле (из-за загрузки и ASLR).

Итог

  • Отладчик выполняет программу пошагово и показывает регистры, стек, память.
  • x64dbg — для Windows, gdb — для Linux.
  • Точки останова часто реализованы заменой байта на int3 (0xCC).
Проверьте себя
1. Что делает точка останова (breakpoint)?
AУдаляет инструкцию навсегда
BОстанавливает выполнение программы в заданном месте для осмотра
CУскоряет программу
DШифрует код
2. Какой байт x86 обычно используется для программной точки останова?
A0x90 (nop)
B0xCC (int3)
C0xFF
D0x00