Как подружить ИИ и реверс-инжиниринг с помощью Ghidra MCP
Представь ситуацию: ты сидишь над огромным бинарником в Ghidra уже третий час. Перед глазами бесконечные FUN_00401234, undefined4 и кучи невнятных переменных. Ты примерно понимаешь, что делает функция, но процесс переименования, типизации и документирования превращается в рутину, которая съедает всё время. Знакомо?
В последнее время все только и говорят про AI-агентов. Но если просто скормить декомпилированный код в ChatGPT, он часто ошибается в контексте или галлюцинирует, потому что не видит всей картины: перекрестных ссылок, структур данных и смежных функций. Проект ghidra-mcp решает эту проблему, создавая прямой мост между «мозгами» Ghidra и современными языковыми моделями через протокол MCP (Model Context Protocol).
Что это за зверь
Если вкратце, это сервер, который позволяет Claude, Cursor или любому другому инструменту с поддержкой MCP буквально «видеть» ваш проект в Ghidra и управлять им. Это не просто скрипт для отправки кода в чат. Это полноценный инструмент управления, у которого в арсенале 245 функций — от простого чтения памяти до эмуляции P-кода и управления живым отладчиком.
Автор проекта, bethington, явно делает это для ежедневной работы, а не ради красивого демо. Это чувствуется в деталях: вместо того чтобы просто дать ИИ доступ «на чтение», здесь реализован полный цикл записи. Агент может сам переименовывать функции, создавать структуры, вешать комментарии и даже запускать скрипты Ghidra.
Пять вещей, которые меня зацепили
Контроль за именованием
Все мы грешим тем, что в пылу реверса называем переменные как попало. В команде это превращается в ад. В ghidra-mcp встроили слой Convention Enforcement. Если ИИ попытается назвать поле структуры count, сервер может автоматически исправить это на dwCount (по венгерской нотации) или вовсе отклонить операцию, если она нарушает заданный стиль. Это избавляет от глупых споров на ревью и поддерживает чистоту в базе проекта.
Эмуляция и динамика
Обычно MCP-серверы для реверса ограничиваются статикой. Здесь же добавили эмуляцию P-кода. Можно попросить агента: «Проверь, какие значения возвращает эта функция при разных входных данных», и он прогонит её через EmulatorHelper. Есть и интеграция с живым отладчиком через TraceRmi (gdb, lldb или dbgeng на Windows). Это позволяет ИИ анализировать состояние регистров и памяти прямо во время выполнения.
Перенос знаний между бинарниками
Это киллер-фича для тех, кто анализирует обновления софта или малвари. Проект умеет считать SHA-256 хеши функций на основе их опкодов. Если ты один раз задокументировал функцию в одной версии файла, сервер поможет найти её в новой версии и автоматически перенесёт все комментарии и типы.
Полноценный Headless-режим
Инструмент умеет работать без графического интерфейса Ghidra. Это открывает путь к автоматизации: можно закинуть бинарник в Docker-контейнер, натравить на него скрипты анализа и получить на выходе готовую документацию, даже не открывая CodeBrowser.
Оценка полноты анализа
В проекте есть метрика analyze_function_completeness. Она оценивает работу (твою или ИИ) по шкале от 0 до 100%. Алгоритм учитывает наличие комментариев, правильность типов и структурные выводы. Это помогает быстро понять, какие участки кода остались «белыми пятнами».
Как это устроено внутри
Архитектура проекта состоит из трех уровней:
- Ghidra Plugin (Java): Сердце системы, которое живет внутри Ghidra и имеет прямой доступ к её API. Оно выставляет наружу HTTP-эндпоинты.
- MCP Bridge (Python): Прослойка, которая переводит запросы из формата MCP в HTTP-вызовы к плагину.
- AI Client: Твой любимый редактор или чат-бот (например, Claude Desktop или Cursor), который общается с бриджем.
Такое разделение позволяет использовать Python для быстрой разработки логики агентов, сохраняя при этом производительность Java-ядра Ghidra.
Практический кейс: документируем функцию за 30 секунд
В репозитории лежат готовые промпты (Workflow V5), которые превращают реверс в диалог. Типичный сценарий выглядит так:
- Ты даешь агенту адрес функции.
- Агент запрашивает декомпиляцию и список перекрестных ссылок.
- Сервер возвращает данные, агент анализирует логику и понимает, что перед ним, скажем, алгоритм расшифровки конфига.
- Агент сам создает структуру для конфига, называет поля и расставляет комментарии у каждого шага.
- Ты просто смотришь, как в окне Ghidra магическим образом появляется осмысленный код.
Кстати, для пакетной обработки есть Batch-режим. Можно скормить агенту сразу десяток функций, и он будет разгребать их параллельно, используя суб-агентов.
Стоит ли пробовать
Если ты открываешь Ghidra раз в год, чтобы посмотреть «Hello World», то, наверное, нет — настройка потребует времени (нужна Java 21, Maven и немного возни с путями). Но если реверс — это твоя работа или серьезное хобби, ghidra-mcp может реально изменить то, как ты тратишь время.
Проект выглядит очень живым: 2.2k звезд, активные дискуссии и контрибьюторы. Из минусов — документация в некоторых местах полагается на то, что ты уже опытный пользователь Ghidra. Но учитывая, что инструмент автоматизирует самую скучную часть работы, на это можно закрыть глаза.
Загляни в их репозиторий, там отличный README с подробными инструкциями по установке под Windows, Linux и macOS. Для старта лучше всего использовать связку с Claude Desktop или Cursor — это самый быстрый способ увидеть магию в действии.
