Когда AI-ассистент начинает разбираться в ассемблере
Представьте: вы спрашиваете у Claude, что делает конкретная функция в дизассемблированной библиотеке Windows. Он не просто строит предположения - он открывает реальный бинарник в Ghidra, вычисляет нормализованные хеши функций, сравнивает их с базой данных и показывает вам, как этот же код выглядел в предыдущей версии. Это не фантастика. Это Ghidra MCP Server - мост между 110 инструментами самого мощного open-source реверс-инжиниринга и современными LLM.
Что умеет этот монстр из 110 инструментов?
Цифра 110 звучит как маркетинг, но это реальное количество отдельных операций, которые AI-ассистент получает для работы с бинарниками. Все они группируются в логические блоки:
- Анализ и дизассемблирование: Загрузка бинарников, автоматический анализ, определение архитектуры (x86, ARM, MIPS), создание проектов Ghidra
- Нормализованное хеширование функций - вот где начинается магия. Алгоритм игнорирует адреса и константы, вычисляя хеш, который остается одинаковым между разными сборками одной функции
- Кросс-версионный поиск: Найти функцию в версии 1.0.0, затем найти ее же в 2.0.0, даже если код немного изменился
- Работа с символами и именами: Экспорт/импорт символов, переименование функций, добавление комментариев
- Экспорт данных: Выгрузка дизассемблированного кода, CFG (Control Flow Graph), строк, перекрестных ссылок
Самый безумный пример из документации - проверка на Diablo II. Разработчики загрузили бинарник игры 2000 года, проанализировали функции защиты от читов и нашли их эволюцию через патчи. Claude через MCP мог отвечать на вопросы типа "Как работает проверка легитимности игрока в патче 1.10?"
Нормализованный хешинг: почему это работает, когда все остальное ломается
Традиционный поиск функций между версиями ПО - это боль. Адреса меняются, константы разные, компилятор переставляет инструкции. Нормализованный хешинг решает это радикально просто:
# Упрощенная логика нормализации (реальная реализация в Ghidra сложнее)
def normalize_function_instructions(instructions):
normalized = []
for instr in instructions:
# Убираем абсолютные адреса
if instr.is_call_or_jump_to_absolute_address():
normalized.append("CALL/JMP [ADDR]")
# Нормализуем константы
elif instr.has_immediate_constant():
normalized.append(f"{instr.opcode} [CONST]")
else:
normalized.append(str(instr))
return hash("".join(normalized))Результат? Функция `calculate_damage` в сборке от Visual Studio 2019 и та же функция в сборке от Clang получают одинаковый хеш. Даже если они расположены по разным адресам и используют разные регистры.
Важный нюанс на 2026 год: нормализованный хешинг все еще не идеален для сильно обфусцированного кода или когда компилятор радикально меняет логику оптимизаций между версиями. Но для 80% случаев он работает как часы.
Установка: Docker или родная система - выбирайте боль
Документация предлагает два пути, и оба имеют свои шипы.
1Docker-вариант (чище, но медленнее)
Контейнер включает Ghidra 11.3 и все зависимости. Запускается одной командой, но каждый вызов инструмента проходит через слои контейнеризации. Для анализа больших бинарников (сотни мегабайт) это заметно.
docker run -p 8000:8000 \
-v /path/to/binary/files:/data \
ghcr.io/example/ghidra-mcp-server:1.2.02Локальная установка (быстрее, но грязнее)
Требует Java 17+, Python 3.11+ и собственно Ghidra. Настройка MCP-сервера в Claude Desktop выглядит так:
// claude_desktop_config.json
{
"mcpServers": {
"ghidra": {
"command": "python",
"args": [
"/path/to/ghidra_mcp_server/server.py",
"--ghidra-path", "/opt/ghidra_11.3",
"--projects-dir", "/tmp/ghidra_projects"
]
}
}
}Первый запуск всегда заканчивается ошибкой разрешений на директорию проектов. Это не баг - это фича безопасности Ghidra.
Работа в бою: от вопросов к результатам
После настройки вы получаете Claude, который понимает команды типа:
| Ваш запрос Claude | Что происходит на бэкенде |
|---|---|
| "Загрузи файл /data/libcrypto.so и проанализируй его" | Ghidra создает проект, запускает анализ, определяет функции |
| "Найди функцию шифрования AES в этом бинарнике" | Поиск по строкам, сигнатурам, импортам, экспортам |
| "Сравни функцию RSA_verify из этой версии с версией 1.1.1" | Вычисление нормализованных хешей, поиск в базе предыдущих анализов |
| "Покажи граф вызовов для проверки подписи" | Генерация CFG, экспорт в DOT или PNG через Graphviz |
Реальные сценарии использования выглядят так:
- Анализ уязвимостей: "Найди все использования memcpy без проверки границ в этой библиотеке"
- Патч-анализ: "Что изменилось в функции обработки сетевых пакетов между патчами безопасности?"
- Малайка-анализ: "Сравни этот подозрительный драйвер с легитимным от производителя"
- Образовательные цели: "Объясни, как работает антиотладочная техника в этой функции"
Альтернативы? Их почти нет, и вот почему
Попытки подключить IDA Pro к AI существуют, но все они упираются в закрытость API и стоимость. Radare2/r2 имеет некоторые скрипты, но ничего сравнимого по количеству инструментов.
Binary Ninja предлагает Cloud API, но он платный и не дает такого уровня контроля. Ghidra MCP Server остается уникальным сочетанием:
- Полностью открытый исходный код
- Интеграция с ведущими LLM через стандарт MCP
- 110 готовых инструментов из коробки
- Поддержка нормализованного хеширования
- Работа без облака (ваши бинарники никуда не уходят)
Единственный реальный конкурент - написать свой MCP-сервер с нуля. Но зачем, если здесь уже все сделано?
Кому это нужно прямо сейчас?
Не всем. Если вы:
- Реверс-инженер - это ваш новый основной инструмент. Особенно для рутинных задач вроде сравнения версий
- Исследователь безопасности - анализ патчей и поиск 1-day уязвимостей ускоряется в разы
- Разработчик антивирусов/EDR - автоматизация анализа малайки
- Преподаватель информационной безопасности - живая демонстрация работы с бинарниками
Если же вы фронтенд-разработчик, который иногда смотрит на дизассемблированный код - может, подождите. Кривая обучения все еще крутая.
Подводные камни, о которых молчат туториалы
После месяца использования упираешься в несколько неприятных реалий:
Производительность. Анализ бинарника в 500 МБ занимает минуты. Claude ждет ответа от Ghidra, и если у вас медленный диск или мало RAM - это больно.
Контекст LLM ограничен. Даже с оптимизациями контекста вы не можете загрузить в промпт весь дизассемблированный код большой библиотеки.
Ложные срабатывания нормализованного хеширования. Иногда две разные функции получают одинаковый хеш. Особенно в маленьких функциях-обертках.
Что дальше? Прогноз на 2026-2027
Разработчики обещают в ближайших релизах:
- Интеграцию с Syrin Debugger для отладки MCP-серверов
- Поддержку распределенного анализа: несколько Ghidra-серверов для больших бинарников
- Экспорт результатов в форматы для RAG-систем
- Автоматическую генерацию эксплойтов на основе найденных уязвимостей (спорно, но вероятно)
Главный тренд - специализированные MCP-серверы для узких задач. После успеха Ghidra MCP появились аналоги для анализа сетевого трафика, мобильных приложений, даже для реверс-инжиниринга FPGA-битстримов.
Мой совет? Начните с Docker-версии и маленького бинарника. Например, утилиты из Linux coreutils. Спросите Claude: "Какие функции работы со строками есть в /bin/ls?" Когда увидите ответ с реальными адресами и дизассемблированным кодом - вы поймете, что это работает. А потом попробуйте сравнить /bin/ls из Ubuntu 22.04 и 24.04. Вот тогда начнется настоящая магия.
И последнее: не пытайтесь использовать это через веб-интерфейс Claude. Только Claude Desktop. Веб-версия на 04.02.2026 все еще не поддерживает кастомные MCP-серверы. Ждем анонс от Anthropic - обещают к концу квартала.