Обратная разработка для ленивых: как потрошить бинари с помощью Ghidra и GDB
Реверсинг — штука, которая многих пугает: ассемблер, дизассемблеры, отладчики, кучи непонятных инструкций. Но если подходить с умом и правильно подбирать инструменты, то процесс превращается в увлекательный квест. В этой статье я покажу, как даже ленивый реверсер может вскрывать бинарники и находить интересные фишки, используя всего два топовых инструмента — Ghidra и GDB.
Ghidra: нож хирурга
Ghidra — это не просто дизассемблер, а целый комбайн от NSA (да-да, тех самых). Он берёт бинарь, разбирает его на функции, строит графы, и главное — делает деобфускацию в человекопонятный C-подобный код.
Основные приёмы в Ghidra:
• Открываешь бинарь, запускаешь анализатор.
• В окне Functions видишь список всех функций.
• Переходишь к main
или экспортируемым функциям.
• В Decompiler видишь почти чистый “C-шный” код, который можно читать, как книгу.
Фокус в том, что тебе не нужно быть гуру ассемблера. Читаешь результат, находишь сравнения, условия и “шилдовые” проверки вроде:
1 2 3 |
if (strcmp(input, "supersecret") == 0) { printf("Access granted!"); } |
— и сразу понимаешь, куда копать.
GDB: ломик от реверсера
Если Ghidra показывает картину в целом, то GDB даёт контроль над процессом в реальном времени. Подходит для шаговой отладки, когда нужно понять логику работы или менять поведение на лету.
Базовый сценарий:
1. Ставим брейкпоинт на интересующую функцию:
1 |
(gdb) break main |
1 |
(gdb) run |
3. Смотрим регистры и стеки:
1 2 |
(gdb) info registers (gdb) x/20x $esp |
4. Подменяем данные на ходу:
1 |
(gdb) set $eax=1337 |
- Продолжаем выполнение и наблюдаем, как программа “думает”, что ей всё нравится.
Комбо: Ghidra + GDB
Секрет в том, что использовать их вместе проще всего:
• В Ghidra смотришь, куда стоит прыгнуть (например, условная проверка).
• В GDB подменяешь значения так, чтобы программа поверила, будто условие прошло.
Пример: бинарь проверяет пароль. В Ghidra находишь функциюcheck_password
, видишь условиеif (hash != expected)
. Вместо того чтобы вычислять хэш, в GDB после вызова функции сразу подменяешь регистр с результатом, чтобы условие выполнилось. Программа распахнётся, будто пароль подошёл.
Лайфхаки для ленивых
• Используй pwntools или gef (надстройки над GDB) — они делают интерфейс красивым, команды удобными.
• В Ghidra жмиY
, чтобы менять типы переменных и приводить код к нормальному виду.
• Экспортируй функции в C-файл и внутрь IDE — код читается в разы легче.
• Для одновременной работы можно использовать Ghidra + gdbserver + Ghidra Debugger — подключение Ghidra напрямую к исполняемому процессу.
Вывод
На самом деле реверсинг — это не магия. Это комбинация инструментов: Ghidra показывает картину сверху, GDB позволяет ковыряться в кишках на лету. Вместе они превращают даже лютые бинарники в удобный пазл. И да, если ты ленивый — это хорошо. Реверсинг любит тех, кто ищет простые решения сложных задач.

На этом все. Всем хорошего дня!