Реверс-инжиниринг звучит как чёрная магия, но по факту это просто чтение чужого кода задом наперёд: у тебя есть скомпилированный файл, а не исходники, и твоя задача — восстановить логику. Ghidra — это твой бесплатный скальпель для этой операции, разработанный АНБ и выложенный в опенсорс в 2019-м. Да-да, спецслужбы отдали пентестерам инструмент за 0 рублей — не спрашивай, просто пользуйся.
Точка входа: установка и первый проект
Прежде чем резать бинарник, нужен рабочий скальпель. Ghidra требует Java 17+ (64-битный JDK, не просто JRE) — без него она даже не запустится, так что не пропускай этот шаг.
|
1 2 3 4 5 6 7 8 9 |
# 1. Ставим JDK (например Temurin) sudo apt install openjdk-17-jdk # 2. Качаем Ghidra с GitHub releases (там просто zip, инсталлятора нет) wget https://github.com/NationalSecurityAgency/ghidra/releases/latest/download/ghidra.zip unzip ghidra.zip -d ~/ghidra # 3. Запуск cd ~/ghidra && ./ghidraRun |
Дальше по классике: File → New Project → выбираешь Non-Shared Project (шаренные проекты нужны только для командной работы через Ghidra Server, тебе пока рано). Дал имя, ткнул Finish — у тебя есть рабочее пространство. Теперь File → Import File, выбираешь свой бинарник — Ghidra сама угадает архитектуру и формат (ELF, PE, Mach-O, хоть ARM, хоть MIPS).
Первая аналитика
Двойной клик по импортированному файлу открывает CodeBrowser — это твой главный рабочий стол. Ghidra спросит: «Хочешь проанализировать файл?» — жми Yes, потом Analyze на дефолтных настройках. Это запускает автоматический разбор: поиск функций, распознавание строк, восстановление таблицы символов. На большом бинарнике можно успеть заварить чай — а то и два.
Первое, что делает любой опытный реверсер (а не только новичок) — смотрит на строки. Это буквально читерский приём: Window → Defined Strings в Ghidra показывает все текстовые константы в бинарнике. Если там мелькает "Access granted", "password" или "flag{" — ты уже на 80% ближе к разгадке, без единой строчки ассемблера. Разработчики обожают оставлять такие подсказки, и это первое, за что цепляется глаз опытного глаза.
Векторы разбора: от main() до логики программы
-
Найди точку входа. В
Symbol Treeслева ищиmainилиentry. Если символы стёрты (strip), ищи вызов__libc_start_main— один из его аргументов и есть адрес настоящегоmain. -
Читай декомпиляцию, а не ассемблер. Двойной клик по функции в дереве символов открывает окно Decompile справа — там Ghidra превращает машинный код обратно в псевдо-C. Это твой главный инструмент, ассемблер смотри только когда декомпилятор тупит на сложных оптимизациях.
-
Переименовывай переменные на лету. Видишь
local_1c,param_1— это мусорные имена. Правый клик → Rename, и через 10 минут вместо абстракции у тебя читаемый код с именами типаinput_buffer,password_check. -
Ищи Cross-References (XRefs). Правый клик на функции или строке →
Show References To— узнаешь, кто и откуда её вызывает. Это как граф связей в OSINT, только внутри бинарника. -
Смотри на условные переходы. В декомпиляции ищи
if (strcmp(...) == 0)или подобные сравнения — обычно именно тут спрятана логика проверки пароля, серийника или флага в CTF-таске.
Команды и лайфхаки для скорости
|
1 2 3 4 5 6 7 8 9 |
# Headless-режим — анализ без GUI, для автоматизации и батч-обработки ./analyzeHeadless /path/to/project ProjectName -import /path/to/binary -postScript MyScript.java # Быстрый поиск строк прямо в терминале (до запуска Ghidra) strings -n 8 ./binary | grep -i "pass\|flag\|key" # file и file-подобные утилиты — узнать архитектуру ДО импорта file ./binary readelf -h ./binary |
Лайфхак: если бинарник обновляется часто (например, игра на Unity с GameAssembly.dll), не жди по 4 часа переанализа каждый раз — сохраняй байтовые паттерны (opcodes) интересующих функций и ищи их по сигнатуре в новой версии, это быстрее полного ре-анализа.
Ghidra vs IDA Pro: что выбрать новичку
| Критерий | Ghidra | IDA Pro |
|---|---|---|
| Цена | Бесплатно, опенсорс (Apache 2.0) | Платно, дорогая подписка за место |
| Декомпилятор | Встроенный, весьма достойный | Hex-Rays, топ индустрии |
| Архитектуры | Широкий охват из коробки | Огромный охват, но многое через платные плагины |
| Дебаггер | Есть, но слабее (через gdb/WinDBG) | Зрелый, мультиплатформенный |
| Скриптинг | Python и Java, headless-режим | IDAPython |
| Коллаборация | Встроенный Ghidra Server | Платные Lumina/Teams |
Для старта Ghidra закрывает 80-85% задач, которые тебе реально понадобятся, и при этом не просит подписку размером с твою аренду квартиры. Переходи на IDA Pro, когда упрёшься в конкретные лимиты — не раньше.
Итог: твой первый трофей
Открыл бинарник, глянул строки, нашёл main, прочитал декомпиляцию, переименовал пару переменных — вот и весь ритуал посвящения в реверс-инжиниринг. Дальше это чистая практика: качай CrackMe-таски (есть специально сделанные для новичков, с пятью нарастающими по сложности челленджами) и просто открывай их один за другим в Ghidra, пока не начнёшь видеть логику программы с первого взгляда, а не через полчаса залипания в псевдо-C.



