GDB, Ghidra, Reverse engineering, Реверс-инжиниринг

Обратная разработка для ленивых: как потрошить бинари с помощью Ghidra и GDB

Реверсинг — штука, которая многих пугает: ассемблер, дизассемблеры, отладчики, кучи непонятных инструкций. Но если подходить с умом и правильно подбирать инструменты, то процесс превращается в увлекательный квест. В этой статье я покажу, как даже ленивый реверсер может вскрывать бинарники и находить интересные фишки, используя всего два топовых инструмента — Ghidra и GDB.

Ghidra: нож хирурга
Ghidra — это не просто дизассемблер, а целый комбайн от NSA (да-да, тех самых). Он берёт бинарь, разбирает его на функции, строит графы, и главное — делает деобфускацию в человекопонятный C-подобный код.

Основные приёмы в Ghidra:
• Открываешь бинарь, запускаешь анализатор.
• В окне Functions видишь список всех функций.
• Переходишь к main или экспортируемым функциям.
• В Decompiler видишь почти чистый “C-шный” код, который можно читать, как книгу.
Фокус в том, что тебе не нужно быть гуру ассемблера. Читаешь результат, находишь сравнения, условия и “шилдовые” проверки вроде:

— и сразу понимаешь, куда копать.
GDB: ломик от реверсера
Если Ghidra показывает картину в целом, то GDB даёт контроль над процессом в реальном времени. Подходит для шаговой отладки, когда нужно понять логику работы или менять поведение на лету.

Базовый сценарий:
1. Ставим брейкпоинт на интересующую функцию:

3. Смотрим регистры и стеки:

4. Подменяем данные на ходу:

  1. Продолжаем выполнение и наблюдаем, как программа “думает”, что ей всё нравится.
    Комбо: 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 позволяет ковыряться в кишках на лету. Вместе они превращают даже лютые бинарники в удобный пазл. И да, если ты ленивый — это хорошо. Реверсинг любит тех, кто ищет простые решения сложных задач.
reverse engineering

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