Авторские курсы Михаила Тарасова

Реверс-инжиниринг для новичков: Ghidra и первый разбор бинарника

Реверс-инжиниринг для новичков: Ghidra и первый разбор бинарника

Реверс-инжиниринг звучит как чёрная магия, но по факту это просто чтение чужого кода задом наперёд: у тебя есть скомпилированный файл, а не исходники, и твоя задача — восстановить логику. Ghidra — это твой бесплатный скальпель для этой операции, разработанный АНБ и выложенный в опенсорс в 2019-м. Да-да, спецслужбы отдали пентестерам инструмент за 0 рублей — не спрашивай, просто пользуйся.

Точка входа: установка и первый проект

Прежде чем резать бинарник, нужен рабочий скальпель. Ghidra требует Java 17+ (64-битный JDK, не просто JRE) — без него она даже не запустится, так что не пропускай этот шаг.

Дальше по классике: 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-таске.

Команды и лайфхаки для скорости

Лайфхак: если бинарник обновляется часто (например, игра на 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.

Мои курсы