Два часа на одну CTF-задачу по реверсу — и ноль результата. Функция
main потерялась среди тысячи символов, декомпилятор выдал стену из undefined8 и DAT_00104020, а ассемблерный листинг выглядел как случайный набор мнемоник. Знакомо? Через полгода практики такая же задача решается за десять минут. И дело не в зубрёжке ассемблера, а в конкретном навыке: открыть бинарник, найти нужную функцию, прочитать псевдокод.Ghidra — фреймворк для реверс-инжиниринга от NSA, open source с 2019 года. Ключевое преимущество перед конкурентами для новичка — бесплатный встроенный декомпилятор. IDA Pro Free его не даёт, а платная версия стоит тысячи долларов. radare2 мощен, но его CLI — отдельная кривая обучения, которая на старте только мешает.
⚙️ Что нужно для старта:
• JDK 21 (без Java Ghidra не запустится — даже не пытайтесь)
• Минимум 4 ГБ RAM, лучше 8 — автоанализ активно ест память
• Любая ОС: Windows, Linux, macOS
• Сеть не нужна — Ghidra работает полностью offline
Установка на Linux укладывается в три команды:
sudo apt install openjdk-21-jdk, распаковать ZIP с GitHub, запустить ./ghidraRun. На Windows — аналогично, только через ghidraRun.bat. Никакого инсталлятора.🎯 Первые шаги в интерфейсе — вот где большинство сдаётся. Десятки панелей, деревьев, кнопок. Но для CTF реально нужны только четыре окна:
• Symbol Tree — здесь ищете функцию
main через ветку Functions• Listing — ассемблерный код с адресами и перекрёстными ссылками
• Decompile — псевдокод на C, ради которого всё и затевалось
• Defined Strings — текстовые строки из бинарника, часто содержат подсказки или сам флаг
Алгоритм работы простой. Создаёте проект (File → New Project → Non-Shared). Импортируете бинарник — Ghidra сама определит формат: ELF, PE, Mach-O. Открываете CodeBrowser, соглашаетесь на автоанализ. За секунды инструмент определяет границы функций, строит ссылки, вытаскивает строки. Дальше — находите
main в Symbol Tree, кликаете, читаете декомпилированный код справа.💡 Главный совет: не пытайтесь понять каждую строку ассемблера. Декомпилятор выдаёт псевдокод с уродливыми именами переменных — это нормально. Переименовывайте их по мере понимания логики (правый клик → Rename Variable). Ищите паттерны: сравнение строк, XOR-шифрование, побайтовые проверки. В большинстве CTF-задач начального уровня флаг либо лежит в строках, либо восстанавливается из простых преобразований.
Полный разбор с примерами и скриншотами — в статье на форуме.
https://hackerlab.pro/blog/ghidra-revers-inzhiniring-razbiraem-pervyy-binarnik-v-ctf-zadache-po-reversu
