Отладчики: 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).