
MCP-сервер, объединяющий обратную разработку Ghidra с инструментами ИИ: 256 инструментов для декомпиляции, эмуляции P-кода, живой отладки, анализа потоков данных, пакетных операций и контроля соблюдения соглашений в безголовом и графическом режимах.
Если этот проект оказался полезным, пожалуйста, поставьте ⭐ звезду репозиторию — это поможет другим его найти!
Если Ghidra MCP экономит ваше время, подумайте о спонсировании проекта. Как разовые, так и регулярные пожертвования помогают финансировать обновления совместимости, промышленное закаливание, документацию и новые инструменты.
Готовый к эксплуатации сервер Model Context Protocol (MCP), который соединяет мощные возможности реверс-инжиниринга Ghidra с современными AI-инструментами и фреймворками автоматизации. 271 MCP-инструмент, проверенные в бою AI-рабочие процессы и самая полная интеграция Ghidra-MCP из доступных — теперь включая эмуляцию P-кода, интеграцию с живым отладчиком и анализ потоков данных на основе графов PCode.
Большинство реализаций Ghidra MCP дают вам горстку инструментов только для чтения и на этом всё. Этот проект отличается — он создан реверс-инженером, который использует его ежедневно на реальных бинарных файлах, а не как демо.
Вы наверняка сталкивались: через шесть месяцев работы над проектом вы находите ProcessItem, process_items, handleItem и ItemProc в одной кодовой базе — четыре функции, делающие одно и то же, названные четырьмя разными сессиями или инженерами без общего контракта. Исправление занимает больше времени, чем должно, и проблема повторится.
v5.0 переносит соглашения из разряда «вещи, которые нужно помнить» на уровень инструментов, где их действительно можно соблюдать.
Для AI-агентов это означает согласованный вывод в каждой сессии, с каждой моделью, при каждом запуске — без вставки руководства по стилю в каждую подсказку. Инструмент знает правила; модели достаточно сделать вызов.
Для команд это устраняет целый класс замечаний на ревью вроде «это не наше соглашение об именовании». Арбитраж соглашений остаётся в инструменте, а не в код-ревью.
Для сольной работы в масштабе analyze_function_completeness выдаёт оценку 0–100%, которая измеряет честно: структурные вычеты (неисправимые артефакты компилятора) прощаются в вашей эффективной оценке, логарифмическое шкалирование не позволяет одной плохой категории похоронить всё остальное, а многоуровневое качество комментариев к плитам означает, что вы точно знаете, чего не хватает и почему.
Примечание о совместимости: Имена инструментов MCP нормализованы для GitHub Copilot CLI и валидации CAPI. Открытые имена инструментов используют только строчные буквы, цифры, символы подчёркивания и дефисы; вложенные HTTP-пути, такие как
/debugger/status, рекламируются под именами видаdebugger_status_2при необходимости во избежание коллизий со статическими инструментами-мостами.
EmulatorHelper Ghidra; брутфорс разрешения хеша API за миллисекундыПользователи общего сервера Ghidra: клиенты Ghidra 12.1.2 требуют сервер Ghidra версии 12.1, 12.0.5 или более новой совместимой версии. Обновите сервер перед использованием этого плагина с клиента 12.1.
Ghidra 12.1.2 поставляется с Jython в качестве опционального расширения. Java-скрипты работают по умолчанию, но скрипты
.pyвghidra_scripts/требуют установки расширения Jython через File > Install Extensions и перезапуска Ghidra.
Рекомендуется для всех платформ: используйте
python -m tools.setupнапрямую.
ensure-prereqsустанавливает требования для выполнения Python, а также JAR-файлы Ghidra, необходимые в локальном репозитории Maven.deployкопирует результаты сборки, устанавливает расширение пользовательского профиля и патчит конфигурацию пользователя Ghidra.
deploy сохраняет/закрывает уже запущенный соответствующий экземпляр Ghidra при необходимости, устанавливает расширение, запускает Ghidra, ожидает проверки здоровья MCP и выполняет smoke-тесты схем.
Поддерживаемый путь сборки: python -m tools.setup build использует Maven под капотом и является каноническим рабочим процессом, используемым задачами и документацией репозитория. ```bash
mvn clean package assembly:single -DskipTests
## О проекте - * ```bash
# Secondary/manual Gradle build path only (not used by tools.setup or VS Code tasks)
GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension
Замечание для Debian/Kali/Ubuntu 23.04+ (PEP 668): в этих дистрибутивах системный Python помечен как внешне управляемый, поэтому простая
pip installзавершается ошибкойerror: externally-managed-environment. Не обходите это с помощью--break-system-packages— это может повредить инструменты, управляемые apt. Вместо этого используйте uv (рекомендуется — он автоматически создает и управляет локальным для проекта.venv, и именно его используют команды этого репозитория):curl -LsSf https://astral.sh/uv/install.sh | sh uv run bridge-mcp-ghidra # resolves deps into .venv and starts the bridgeили классическое виртуальное окружение:
python3 -m venv .venv && source .venv/bin/activate pip install -e . bridge-mcp-ghidra
Это выполнит:
~/.m2/repositoryGhidraMCP-<version>.zip с помощью Maven~/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/preferences с помощью LastExtensionImportDirectoryПути в Linux: Расширение устанавливается в
$HOME/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/GhidraMCP/. Файлы конфигурации Ghidra находятся в$HOME/.config/ghidra/ghidra_<version>_PUBLIC/.
Расширение установлено в ~/Library/ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/.
Примечание:
--ghidra-versionобязателен при использовании пути Homebrew, так как путь не содержит строки версии.
В главном окне проекта: Tools > GhidraMCP > Start MCP Server
~/.cursor/mcp.json): ```json
{
"mcpServers": {
"ghidra": {
"command": "uv",
"args": ["run", "--directory", "/path/to/ghidra-mcp", "bridge-mcp-ghidra"]
}
}
}
@Pandoriaantje поддерживает пакеты AUR сообщества:
ghidra-mcp-git — отслеживает ветку mainghidra-mcp — отслеживает тегированные релизыУстановите с помощью вашего AUR-помощника, например:```bash yay -S ghidra-mcp # or ghidra-mcp-git
### Базовое использование
#### Вариант 1: Stdio Transport (рекомендуется для AI инструментов)```bash
uv run bridge-mcp-ghidra # or: python -m bridge_mcp_ghidra
Чтобы добавить мост к Autohand Code из клонированного репозитория:```bash autohand mcp add ghidra uv run --directory /path/to/ghidra-mcp bridge-mcp-ghidra
Добавьте `--scope project` перед `ghidra`, чтобы сохранить сервер в конфигурации `.autohand` текущего проекта вместо вашей пользовательской конфигурации.
#### Вариант 2: Потоковый HTTP-транспорт (Рекомендуется для веб/HTTP-клиентов)```bash
uv run bridge-mcp-ghidra --transport streamable-http --mcp-host 127.0.0.1 --mcp-port 8081
Конфигурация клиента MCP для HTTP-транспорта (добавьте в конфигурационный файл MCP вашего клиента):```json { "mcpServers": { "ghidra-mcp-http": { "url": "http://127.0.0.1:8081/mcp" } } }
Клиенты на основе браузера (например, [MCP Inspector](https://github.com/modelcontextprotocol/inspector))
работают прямо из коробки: HTTP-транспорты отвечают на предварительные запросы CORS (`OPTIONS`) и предоставляют
скриптам заголовки `mcp-session-id` / `mcp-protocol-version`. Разрешенные источники отражают
политику Host-header — локальный интерфейс на любом порту всегда разрешен, плюс хост привязки и любые
хосты, указанные в `GHIDRA_MCP_ALLOWED_HOSTS`.
#### Вариант 3: SSE-транспорт (Устарел — используйте streamable-http вместо)```bash
uv run bridge-mcp-ghidra --transport sse --mcp-host 127.0.0.1 --mcp-port 8081
Установите GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1, чтобы мост отклонял любой вызов в контексте программы, в котором отсутствует селектор программы, возвращая понятную ошибку вместо того, чтобы позволить вызову использовать общую «текущую программу» сервера (ту, которую switch_program и активная вкладка GUI перемещают).```bash
export GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1
uv run bridge-mcp-ghidra
Без этого вызов, в котором отсутствует `program=`, выполняется для текущей программы, что нормально для рабочего процесса с одной программой, но становится опасным, когда открыто несколько программ: вызов может прочитать или отредактировать неверный бинарный файл без сообщения об ошибке. Опасность возрастает, когда несколько клиентов используют один сервер, поскольку каждый из них перемещает глобальную переменную текущей программы из-под других.
При включённом строгом режиме каждый вызов в рамках программы должен указывать свою цель. Это касается всех селекторов, выбирающих открытую программу: простого `program=`, а также `source_program`/`target_program` или `program_a`/`program_b` для кросс-программных инструментов (объявленных обязательными, но сервер всё ещё использует текущую программу, если один из атрибутов пуст). Забытый селектор проявляется как громкая ошибка при первом же некорректном вызове, а не как тихая запись в неверный бинарник. Инструменты без селектора программы (`open_program` и `close_program` принимают `path`/`name`) не затрагиваются. Отключён по умолчанию: если переменная не задана, мост отправляет вызовы без изменений.
#### Снижение накладных расходов на контекст инструментов
Мост предоставляет обширный каталог. Чтобы уменьшить объём инструментов для модели, запускайте с `--lazy` (при подключении загружает только `listing,function,program`) и позвольте модели **открывать** остальные по требованию вместо регистрации всего списка:
- `search_tools("rename function")` — поиск по ключевым словам во **всём** каталоге, включая инструменты, группа которых не загружена. Каждый результат указывает, доступен ли инструмент сейчас, а если нет — точный вызов `load_tool_group(...)`, чтобы его активировать.
- `list_tool_groups()` — список всех категорий и их состояние загрузки.
- `load_tool_group("datatype")` / `unload_tool_group("datatype")` — загрузить или выгрузить категорию во время выполнения.
- `check_tools("rename_or_label,batch_set_comments")` — подтвердить, что конкретные инструменты доступны прямо сейчас.
`search_tools` работает как в жадном, так и в `--lazy` режимах, поэтому агенты, которые обрабатывают `tools/list_changed`, получают полное обнаружение без затрат на предварительный контекст.
#### Опционально: Запуск автономного сервера отладчика```bash
uv sync --group debugger
uv run python -m debugger
Сервер отладчика по умолчанию прослушивает http://127.0.0.1:8099/ и требуется для инструментов прокси debugger_*, предоставляемых мостом MCP.
Флаги сервера отладчика:
Установите GHIDRA_DEBUGGER_URL в файле .env, если вы изменили порт или хост по умолчанию, чтобы мост мог его найти.
http://127.0.0.1:8089/curl http://127.0.0.1:8089/check_connection
curl http://127.0.0.1:8089/get_version
## Поддержка проекта
Если Ghidra MCP экономит ваше время на разработку или реверс-инжиниринг, рассмотрите возможность [спонсирования проекта](https://github.com/sponsors/bethington).
- Разовое спонсорство помогает финансировать исправления, обновления совместимости и релизные работы.
- Регулярное спонсорство поддерживает сопровождение, документацию и повышение надёжности в продакшне.
- Корпоративная поддержка помогает расставить приоритеты долгосрочной надёжности для моста, headless-сервера, интеграции с отладчиком и инструментов рабочего процесса.
## 🔒 Безопасность
GhidraMCP спроектирован для **разработки только на localhost**. Конфигурация по умолчанию — HTTP-сервер, привязанный к `127.0.0.1`, без аутентификации — безопасна на доверенной однопользовательской рабочей станции и соответствует поведению до версии 5.4.1.
**Если вы открываете доступ к серверу за пределами loopback, сначала настройте эти три переменные окружения.** Сервер откажется запускаться на не-loopback привязке без токена.
| Переменная окружения | Эффект |
|---|---|
| `GHIDRA_MCP_AUTH_TOKEN` | При установке каждый HTTP-запрос должен содержать `Authorization: Bearer <token>`. Сравнение с защитой от временных атак. `/mcp/health`, `/health`, `/check_connection` исключены. |
| `GHIDRA_MCP_ALLOW_SCRIPTS` | Установите в `1`, `true` или `yes`, чтобы включить `/run_script_inline` и `/run_ghidra_script`. **По умолчанию выключен, начиная с v5.4.1** — эти конечные точки выполняют произвольный Java-код в процессе Ghidra. В headless-режиме это также запускает инициализацию OSGi `BundleHost` при старте сервера (фреймворк Felix, ~сотни миллисекунд); отключайте, если выполнение скриптов не требуется. |
| `GHIDRA_MCP_FILE_ROOT` | При установке в путь к директории конечные точки, работающие с файловой системой (`/load_program`, `/import_file`, `/open_project`, `/delete_file` и т.д.), канонизируют входные данные и требуют их нахождение в этой корневой директории. Предотвращает path-traversal. |
Принудительное соблюдение качества имён отделено от безопасности. По умолчанию
`rename_function_by_address` и глобальные конечные точки записи отклоняют имена, не проходящие
встроенные проверки качества, а запись полей структур применяет встроенное соглашение о префиксах полей.
Отключить встроенный уровень соглашений можно через **Edit > Tool
Options > GhidraMCP HTTP Server > Strict Naming Enforcement**. Тот же флажок в Tool Options управляет
`rename_data`, `rename_global_variable`,
`set_global`, проверкой префикса/типа `apply_data_type` и автоматическими исправлениями венгерской нотации полей структур в `create_struct`, `add_struct_field` и
`modify_struct_field`. Настройка считывается при запуске или перезапуске MCP-сервера.
Предупреждения о соглашениях для функций/глобальных переменных всё равно возвращаются, даже если принуждение отключено.
### Пример: предоставление доступа в частную локальную сеть с аутентификацией```bash
export GHIDRA_MCP_AUTH_TOKEN=$(openssl rand -hex 32)
export GHIDRA_MCP_ALLOW_SCRIPTS=1 # only if your workflow needs it
export GHIDRA_MCP_FILE_ROOT=/srv/ghidra/inputs
java -jar GhidraMCPHeadless.jar --bind 0.0.0.0 --port 8089
При подключении к общему серверу Ghidra GhidraMCP может автоматически подавлять диалог ввода пароля. Учетные данные разрешаются в следующем порядке (первое непустое значение выигрывает):
Примечание о совместимости: клиенты Ghidra 12.1.2 требуют сервер Ghidra 12.1.2, 12.0.5 или более новый совместимый сервер. Старые общие серверы не являются безопасными целями для обновления клиента до версии 12.1.
GHIDRA_SERVER_PASSWORD переменная окружения (или файл .env в каталоге установки Ghidra или ~)~/.ghidra-cred — файл пароля в одну строку в вашем домашнем каталоге<ghidra-install-dir>/.ghidra-credИмя пользователя разрешается аналогично: переменная окружения GHIDRA_SERVER_USER → системное свойство user.name.
Если пароль не найден, Ghidra показывает обычный запрос графического интерфейса. Установите их в .env (см. .env.template для полного блока), чтобы включить автоматическую аутентификацию.
/run_script_inline или /run_ghidra_script, экспортируйте GHIDRA_MCP_ALLOW_SCRIPTS=1. Это намеренное изменение, нарушающее обратную совместимость; предыдущее значение по умолчанию было небезопасным.Причина: Плагин не включен или установлен неправильно.
Решение:
Причина: Сервер не запущен или неправильный порт.
Решение:
pip install завершается с error: externally-managed-environmentПричина: PEP 668. Дистрибутивы семейства Debian (Debian 12+, Kali, Ubuntu 23.04+) помечают системный Python как внешне управляемый, поэтому глобальный pip install блокируется для защиты пакетов, управляемых apt.
Решение: Используйте виртуальное окружение — никогда не используйте --break-system-packages. Рекомендуемый путь — uv, который автоматически управляет локальным .venv проекта:```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
cd ghidra-mcp
uv run bridge-mcp-ghidra
Или классический venv:```bash
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
bridge-mcp-ghidra
python -m debugger завершается с ошибкой ModuleNotFoundError для pybag или comtypesПричина: Автономный сервер отладчика использует необязательные Windows-only зависимости Python, которые не устанавливаются по умолчанию.
Решение:```text uv sync --group debugger uv run python -m debugger
Если у вас есть как глобальный Python, так и venv проекта, убедитесь, что вы устанавливаете и запускаете из одного и того же интерпретатора.
### 500 Внутренние ошибки сервера
**Причина:** Исключение на стороне сервера, часто из-за отсутствия данных программы.
**Решение:**
1. Убедитесь, что в CodeBrowser загружен бинарный файл
2. Сначала запустите автоматический анализ: **Анализ > Автоанализ**
3. Проверьте консоль Ghidra (**Окно > Консоль**) на наличие исключений Java
4. Некоторые операции требуют полностью проанализированных бинарных файлов
### 404 Ошибки «Не найдено»
**Причина:** Конечная точка не существует или неверный URL.
**Решение:**
1. Проверьте, что конечная точка существует: `curl http://127.0.0.1:8089/get_version`
2. Проверьте на опечатки в имени конечной точки
3. Убедитесь, что вы используете правильный HTTP-метод (GET vs POST)
### Скрипты Python Ghidra завершаются ошибкой «No script provider found»
**Причина:** В Ghidra 12.1.2 поддержка Jython больше не включена по умолчанию. Скрипты `.py` требуют встроенного расширения Jython; скрипты Python 3 должны использовать PyGhidra вместо Ghidra Script Manager.
**Решение:**
1. В интерфейсе Ghidra откройте **Файл > Установить расширения**.
2. Отметьте **Jython**, перезапустите Ghidra, затем обновите Script Manager.
3. Для новой автоматизации предпочтительнее использовать скрипты Java Ghidra или PyGhidra.
### Расширение не отображается в Install Extensions
**Причина:** JAR-файл находится в неправильном месте.
**Решение:**
1. Расположение ручной установки: `~/.ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/lib/GhidraMCP.jar`
2. Или используйте: **Файл > Install Extensions > Добавить** и выберите ZIP-файл
3. Убедитесь, что JAR/ZIP собран для вашей версии Ghidra
### Сборка завершается ошибкой «Ghidra dependencies not found»
**Причина:** JAR-файлы Ghidra не установлены в локальном репозитории Maven.
**Решение:**```text
# Windows (recommended)
python -m tools.setup install-ghidra-deps --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
271 инструмент MCP, поддерживаемый HTTP-эндпоинтами, сгруппированными по категориям каталога. Сгенерировано из tests/endpoints.json с помощью python -m tools.gen_readme_api_reference --write; живая схема по адресу /mcp/schema является авторитетной во время выполнения. Примеры использования: docs/prompts/TOOL_USAGE_GUIDE.md.
analysis_status - Получить статус автоматического анализа для открытых программclose_program - Закрыть открытую программу по пути проекта или имениcreate_property_map - Создать пользовательскую карту свойств для хранения типизированных значений по адресуdelete_property_map - Удалить пользовательскую карту свойств и все хранящиеся в ней значенияexit_ghidra - Сохранить и выйти из Ghidraget_address_spaces - Перечислить все физические и наложенные адресные пространства в программе (наложения включают флаг is_overlay и имя overlayed_space)get_current_program_info - Получить информацию о текущей программеget_language_metadata - Вывести описание языка программы: адресные пространства, регистры, символы по умолчанию, порядок байтов, размер указателя (issue #192)get_program_options - Прочитать все параметры в группе параметров программы с типами, текущими значениями, значениями по умолчанию и описаниямиget_property - Прочитать значение, сохранённое по адресу в карте свойствcreate_folder - Создать папку в проектеdelete_file - Удалить файл из проектаdelete_project - Удалить проект Ghidralist_projects - Перечислить доступные проекты Ghidramove_file - Переместить файл в другую папку проектаmove_folder - Переместить папку в другое местоproject_info - Получить подробную информацию о проекте, включая запущенные инструменты и открытые программыДоступно на автономном головном сервере (GhidraMCPHeadlessServer).
archive_project - Архивировать текущий открытый проект в родной файл .gar Ghidracheckin_program - Зарегистрировать открытую программу обратно на общем сервере Ghidra как новую версиюclose_project - Закрыть текущий открытый проектcreate_project - Создать новый проект Ghidraexport_program - Экспортировать открытую или хранящуюся в проекте программу в Zip-файл Ghidra (.gzf)get_project_info - Получить информацию о текущем открытом проектеimport_program - Импортировать Zip-файл Ghidra (.gzf) в текущий открытый проект как новый DomainFile в target_folder (по умолчанию '/')load_program - Загрузить бинарный файл на головной сервер для анализаload_program_from_project - Загрузить программу из проекта Ghidra (головной сервер)open_project - Открыть существующий проект Ghidra (.gpr файл или директорию)restore_project - Восстановить архив .gar Ghidra в новый проект на диске по пути list_bookmarks - Перечислить закладкиlist_calling_conventions - Перечислить доступные соглашения о вызовахlist_classes - Перечислить имена пространств имён/классовlist_data_items - Перечислить определённые данныеlist_data_items_by_xrefs - Перечислить данные, отсортированные по количеству перекрёстных ссылокlist_exports - Перечислить экспортированные символыlist_external_locations - Перечислить внешние местоположенияlist_functions - Перечислить функции с адресамиlist_functions_enhanced - Перечислить функции с метаданнымиlist_globals - Перечислить глобальные переменныеlist_imports - Перечислить импортированные символыlist_methods - Перечислить все имена функций с пагинациейget_current_address - Получить адрес курсора (только GUI)get_current_function - Получить функцию по курсору (только GUI)get_current_selection - Получить выделенные диапазоны адресов в списке CodeBrowser (только GUI)get_entry_points - Получить точки входа программыget_enum_values - Получить значения перечисленияget_external_location - Получить подробности внешнего местоположенияget_full_call_graph - Получить полный граф вызововget_function_by_address - Получить функцию по адресуget_function_call_graph - Получить граф вызововget_function_callees - Получить вызываемые функцииget_function_callers - Получить вызывающие функцииget_function_count - Вернуть количество функций в загруженной программеfind_similar_functions - Найти похожие функцииsearch_byte_patterns - Искать байтовые паттерныsearch_data_types - Искать типы данныхsearch_functions - Искать функции по имениsearch_functions_enhanced - Расширенный поиск функцийsearch_strings - Искать определённые строки по шаблону regex/подстрокеdecompile_function - Декомпилировать функциюdisassemble_bytes - Дизассемблировать диапазон байтовdisassemble_function - Дизассемблировать функциюforce_decompile - Принудительная свежая декомпиляцияadd_function_tag - Присоединить один или несколько тегов к функцииbatch_add_function_tags - Присоединить теги к нескольким функциям в одной транзакцииbatch_remove_function_tags - Открепить теги от нескольких функций в одной транзакцииclear_flow_and_repair - Запустить действие GUI Ghidra «Clear Flow and Repair» на диапазоне-начале: очищает поток команд, достижимый из начальной точки, затем восстанавливает тела функций и повторно дизассемблирует сохранённый поток (ClearFlowAndRepairCmd с clear_data=false, clear_labels=false, repair=true)create_function_tag - Создать общепрограммное определение тега функции с необязательным комментариемdelete_function_tag - Удалить общепрограммное определение тега функцииget_function_tags - Перечислить все теги, назначенные конкретной функцииlist_class_members - Перечислить функции-члены класса C++list_function_tags - Перечислить все общепрограммные определения тегов функций с количеством их использованийremove_function_tag - Открепить один или несколько тегов от функцииadd_memory_reference - Создать пользовательскую перекрёстную ссылку между двумя адресами памяти, которую автоанализатор не может вывести (таблицы указателей, заполняемые во время выполнения, vtable, указатели на функции с поздним связыванием, пропущенные таблицы переходов/переключателей)get_bulk_xrefs - Получить перекрёстные ссылки для нескольких адресовget_function_xrefs - Получить перекрёстные ссылки функцииget_xrefs_from - Получить ссылки от адресаget_xrefs_to - Получить ссылки на адресremove_reference - Удалить перекрёстные ссылки памяти от одного адреса к другому — обратная операция для add_memory_referenceadd_struct_field - Добавить поле структурыanalyze_global_completeness - Оценить полноту документации глобальной переменной по шкале 0–100 с учётом бюджета — аналог analyze_function_completeness для данныхapply_data_type - Применить тип данныхaudit_global - Аудит состояния документирования глобальной переменнойaudit_globals_in_function - Аудит каждой глобальной переменной, на которую есть ссылки из функции, за один вызовbatch_set_variable_types - Установить несколько типов переменныхclone_data_type - Клонировать тип данныхcreate_array_type - Создать тип массиваcreate_data_type_category - Создать категорию типов данныхcreate_enum - Создать перечислениеcreate_function_signature - Создать тип сигнатуры функцииbatch_create_labels - Создать несколько метокbatch_delete_labels - Удалить несколько метокbatch_rename_function_components - Пакетное переименование компонентов функцииcreate_label - Создать меткуdelete_label - Удалить метку по адресуrename_data - Переименовать символ данныхrename_external_location - Переименовать внешнее местоположениеrename_function - Переименовать функцию по имениrename_function_by_address - Переименовать функцию по адресуrename_global_variable - Переименовать глобальную переменнуюrename_label - Переименовать меткуrename_or_label - Переименовать или создать меткуbatch_set_comments - Установить несколько комментариевclear_function_comments - Очистить все комментарии функцииdelete_bookmark - Удалить закладкуget_comment - Получить комментарии списка (plate/pre/eol/post/repeatable) по ЛЮБОМУ адресу, включая адреса данных (в отличие от get_plate_comment, который требует функцию)get_plate_comment - Получить комментарий-табличкуset_bookmark - Установить закладкуset_comment - Установить комментарий списка заданного типа (plate/pre/eol/post/repeatable) по ЛЮБОМУ адресу, включая адреса данныхset_decompiler_comment - Установить PRE_COMMENTset_disassembly_comment - Установить EOL_COMMENTset_plate_comment - Установить комментарий-табличкуanalyze_api_call_chains - Анализировать цепочки вызовов APIanalyze_call_graph - Анализировать паттерны графа вызовов функцийanalyze_control_flow - Анализировать поток управленияanalyze_data_region - Анализировать область данныхanalyze_dataflow - Проследить распространение значений через функцию (PCode граф, прямой/обратный)analyze_for_documentation - Композитный анализ RE-документации (декомпиляция + классификация + переменные + полнота)analyze_function_complete - Комплексный одноразовый анализ функцииanalyze_function_completeness - Анализировать полноту документацииanalyze_struct_field_usage - Анализировать использование полей структурыapply_data_classification - Применить классификацию данныхbatch_analyze_completeness - Пакетный анализ полноты для нескольких функцийarchive_ingest_function - Внести документацию одной функции в кросс-версионный архив (re_kb.functions на bsim Postgres)archive_ingest_program - Пакетное внесение всех функций программы в кросс-версионный архив документацииbatch_string_anchor_report - Отчёт о строках исходного файла и их функциях FUN_*bulk_fuzzy_match - Пакетное нечёткое сопоставление функций между бинарными файламиfind_similar_functions_fuzzy - Нечёткое сопоставление функций между бинарными файламиmerge_program_documentation - Пакетное слияние: скопировать всю RE-документацию (имена функций, сигнатуры, комментарии-таблички, комментарии к инструкциям EOL/PRE/POST, нестандартные метки и глобальные символы) из одной программы в другую по совпадающим адресамapply_function_documentation - Применить документацию функцииcheck_connection - Конечная точка проверки связиcompare_programs_documentation - Сравнить документацию между программамиconvert_number - Преобразовать число между системами счисленияdiff_functions - Сравнить две функцииfind_undocumented_by_string - Найти недокументированные функции, ссылающиеся на строкуget_bulk_function_hashes - Получить массовые хеши функцийget_function_documentation - Экспортировать документацию функцииget_function_hash - Получить хеш функцииget_function_signature - Получить сигнатуру функцииget_metadata - Получить метаданные программыget_version - Получить версию плагинаemulate_function - Эмулировать одну функцию с контролируемыми входами регистров/памятиemulate_hash_batch - Подбор хешей API методом перебораrun_ghidra_script - Запустить скрипт с захватом выводаrun_script_inline - Запустить встроенный код скриптаserver_admin_set_permissions - Установить права пользователя на репозиторийserver_admin_terminate_all_checkouts - Завершить все извлечения в папке рекурсивноserver_admin_terminate_checkout - Завершить все извлечения одного файлаserver_admin_users - Перечислить всех пользователей на сервереserver_authenticate - Зарегистрировать учётные данные сервера для программной аутентификацииserver_checkouts - Перечислить все извлечённые файлы в папке, включая серверные извлеченияserver_connect - Подключиться к серверу Ghidraserver_disconnect - Отключиться от сервера Ghidraserver_repositories - Перечислить репозитории на подключённом сервереserver_repository_create - Создать новый репозиторий на сервереserver_repository_file - Получить информацию о файле из репозитория сервераНа хостах Windows, где активен прокси-отладчик WinDbg моста (GHIDRA_DEBUGGER_URL), конфликтующие имена получают суффикс _2 (напр., debugger_status_2).
debugger_dynamic_to_static - Преобразовать динамический адрес времени выполнения из текущего трейса обратно в статический адрес программы Ghidradebugger_interrupt - Прервать (войти в) выполняемую цельdebugger_launch - Запустить исполняемый файл через загрузчик отладчика Trace RMI Ghidradebugger_launch_offers - Перечислить доступные опции запуска/подключения отладчика для текущей программыdebugger_list_breakpoints - Перечислить все точки останова в текущем трейсеdebugger_modules - Перечислить модули (DLL/EXE), загруженные в отлаживаемом процессеdebugger_read_memory - Прочитать память из отлаживаемого процессаdebugger_registers - Прочитать регистры ЦП из текущего снимка трейса отладкиdebugger_remove_breakpoint - Удалить точку останова по адресуdebugger_resume - Возобновить выполнение отлаживаемого процессаdebugger_set_breakpoint - Установить программную точку останова по адресу в трейсеprompt_policy - Временно включить, отключить или запросить обработку подсказок автоматизации с ограничениямиdebugger_*, когда GHIDRA_DEBUGGER_URL указывает на автономный сервер отладчика.check_tools - Отчёт о том, какие инструменты в данный момент зарегистрированы и могут быть вызваныconnect_instance - Подключить мост к определённому экземпляру Ghidraimport_file - Импортировать бинарный файл с диска в текущий проект и открыть егоlist_instances - Обнаружить запущенные экземпляры Ghidra MCP (UDS + сканирование TCP-портов)list_tool_groups - Список групп инструментов и их состояние загрузкиload_tool_group - Зарегистрировать динамические инструменты группы инструментов в MCP-клиентеsearch_tools - Поиск по всему каталогу инструментов по ключевому словуunload_tool_group - Отменить регистрацию динамических инструментов группы инструментовСм. CHANGELOG.md для истории версий.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ AI/Automation │◄──►│ MCP Bridge │◄──►│ Ghidra Plugin │ │ Tools │ │ (bridge_mcp_ │ │ (GhidraMCP.jar) │ │ (Claude, etc.) │ │ ghidra/) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ MCP Protocol HTTP REST Ghidra API (stdio/streamable-http) (localhost:8089) (Program, Listing)
### Компоненты
- **python/bridge_mcp_ghidra/** — Пакет сервера MCP на Python (поставляется как колесо `ghidra-mcp-bridge`; консольный скрипт `bridge-mcp-ghidra`), который переводит протокол MCP в HTTP-вызовы (225 записей каталога)
- **GhidraMCP.jar** — Плагин Ghidra, предоставляющий возможности анализа через HTTP (175 конечных точек GUI)
- **GhidraMCPHeadlessServer** — Автономный сервер без графического интерфейса — 183 конечные точки, GUI не требуется
- **ghidra_scripts/** — Коллекция скриптов автоматизации для типовых задач
## 🔧 Разработка
### Сборка из исходного кода```bash
# Recommended: direct Python-first workflow
python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup build
python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
# Version bump (updates all maintained version references atomically)
python -m tools.setup bump-version --new X.Y.Z
The authoritative build system today is Maven. tools.setup, the VS Code tasks, and the documented deploy flow all build through pom.xml and write artifacts to target/. build.gradle remains in the repo as a manual fallback for direct Ghidra/Gradle users, but it is not the primary path.
Общие флаги, принимаемые большинством команд:
Уровни тестов развёртывания являются опциональными, потому что эталонные тесты могут импортировать/сбрасывать Benchmark.dll и BenchmarkDebug.exe в активном проекте Ghidra. Используйте --test release перед выпуском релизов или установите GHIDRA_MCP_DEPLOY_TESTS=release в локальном .env, если хотите, чтобы каждый развёртывание на вашей машине запускало эталонную регрессию в реальном времени. Смотрите Testing and Release Regression.```text
python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC" python -m tools.setup build python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup preflight --strict --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup bump-version --new X.Y.Z --tag
python -m tools.setup run-tests
python -m tools.setup --help
### Структура проекта```
ghidra-mcp/
├── pyproject.toml # uv project (ghidra-mcp-bridge wheel + dependency groups)
├── python/bridge_mcp_ghidra/ # MCP server package (Python, 225 catalog entries)
├── src/main/java/ # Ghidra plugin + headless server (Java)
│ └── com/xebyte/
│ ├── GhidraMCPPlugin.java # GUI plugin (196 endpoints)
│ ├── headless/ # Headless server (183 endpoints)
│ └── core/ # Shared service layer (12 services)
├── debugger/ # Optional standalone debugger server (port 8099)
├── ghidra_scripts/ # Automation scripts for batch workflows
├── tests/ # Python unit tests + endpoint catalog
│ ├── unit/ # Catalog consistency, schema, tool function tests
│ └── endpoints.json # Endpoint specification (225 entries)
├── docs/ # Documentation
│ ├── prompts/ # AI workflow prompts (V5 documentation workflows)
│ ├── releases/ # Version release notes
│ └── project-management/ # Contributor planning docs (Gradle migration, etc.)
├── tools/setup/ # Build and deployment CLI (python -m tools.setup)
├── fun-doc/ # Internal RE curation tool — not part of the MCP plugin
│ # Priority-queue worker, LLM scoring, web dashboard.
│ # See fun-doc/README.md for details.
└── .github/workflows/ # CI/CD pipelines
JAR-файлы Ghidra должны быть установлены в ваш локальный репозиторий Maven (~/.m2/repository) перед компиляцией.
Это разовая настройка на каждую машину, и она повторяется при изменении версии Ghidra.
-Deploy теперь устанавливает их автоматически по умолчанию.
Инструмент обеспечивает согласованность версий между:
pom.xml (ghidra.version)--ghidra-path (например, ghidra_12.1.2_PUBLIC)Если они не совпадают, развертывание завершается с ошибкой с четким сообщением.
Если вы видите ошибку несоответствия версий, приведите оба значения в соответствие:
pom.xml → ghidra.version--ghidra-path (ghidra_X.Y.Z_PUBLIC)Затем выполните повторно:```text python -m tools.setup preflight --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
▁(▁CVE-2023-4911▁)▁|▁Linux,▁CTF,▁Pentesting,▁Security,▁Binary▁Exploitation,▁Privesc,▁Privilege▁Escalation,▁Looney▁Tunables,▁Glibc,▁C▁Utilities,▁CTF▁Utilities
**Подвержен ли я CVE-2023-4911? Узнайте, скачав скрипт, собрав и запустив его**```text
# Windows
python -m tools.setup install-ghidra-deps --ghidra-path "C:\path\to\ghidra_12.1.2_PUBLIC"
Необходимые библиотеки (14 JAR, ~37 МБ):
Примечание: Библиотеки НЕ включены в репозиторий (см.
.gitignore). Вы должны установить их из вашей установки Ghidra перед сборкой.
Точка входа автоматизации:
python -m tools.setupявляется поддерживаемым интерфейсом настройки/сборки/развёртывания/управления версиями- используйте
ensure-prereqs,build,deploy,preflight,clean-allиbump-versionнапрямую- эти команды в настоящее время используют Maven в качестве канонического бэкенда сборки Java
GhidraMCP включает режим headless-сервера для автоматизированного анализа без графического интерфейса Ghidra.
docker-compose up -d ghidra-mcp
curl http://localhost:8089/check_connection
### Безголовый API рабочий процесс```bash
# 1. Load a binary
curl -X POST -d "file=/data/program.exe" http://localhost:8089/load_program
# 2. Run auto-analysis (identifies functions, strings, data types)
curl -X POST http://localhost:8089/run_analysis
# 3. List discovered functions
curl "http://localhost:8089/list_functions?limit=20"
# 4. Decompile a function
curl "http://localhost:8089/decompile_function?address=0x401000"
# 5. Get metadata
curl http://localhost:8089/get_metadata
Переменные окружения для Docker:
GHIDRA_MCP_PORT - Порт сервера (по умолчанию: 8089)GHIDRA_MCP_BIND_ADDRESS - Адрес привязки (по умолчанию: 0.0.0.0 в Docker)JAVA_OPTS - Параметры JVM (по умолчанию: -Xmx4g -XX:+UseG1GC)См. CONTRIBUTING.md для подробных руководств по участию.
git checkout -b feature/amazing-feature)mvn clean package assembly:single -DskipTests или GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)Этот проект лицензирован под Apache License 2.0 — подробнее см. в файле LICENSE.
См. CHANGELOG.md для истории версий и примечаний к выпускам.
Этот проект изначально был ответвлением от LaurieWired/GhidraMCP в августе 2025 года и с тех пор был существенно переписан и расширен. Мы признаем оригинальную работу LaurieWired в качестве отправной точки. См. NOTICE для указания авторства лицензии.
Этот проект получил преимущества от работы преданных участников:
@heeen — Значительный вклад, включая:
save_program, exit_ghidra, delete_function, create_memory_block, run_script_inline (#11)@huehuehuehueing — Значительный вклад, включая:
Поддержка префиксов адресных пространств — добавлен синтаксис <space>:<hex> (например, mem:1000, code:ff00) для разбора адресов на всей поверхности эндпоинтов, открывая доступ к много-пространственным целям, таким как встроенное ПО (#84, закрывает #65)
Необязательный параметр program + исправления схемы обязательных параметров — параметр program стал необязательным на каждом эндпоинте с разумным fallback на currentProgram, и исправлены несколько ошибок схемы обязательных/необязательных параметров, унаследованных каталогом (#92)
Инициировал #44 (инструменты для типов данных / перечислений) — проблема, которая мотивировала создание уровня принудительного применения перечислений и структур в v5.0
Команда Ghidra — За невероятную платформу обратной разработки
Model Context Protocol — За стандартизированную платформу интеграции AI
Участники — За тестирование, отзывы и улучшения
Готов к развертыванию в производственной среде с надёжностью корпоративного уровня и всесторонними возможностями анализа бинарных файлов.
| Уровень | Поведение | Пример |
|---|
| Авто-исправление | Применяется молча | Поле count типа uint32 → автоматически получает префикс dwCount при сохранении |
| Предупреждение | Изменение проходит, возвращается предупреждение | processData → «имя должно быть в PascalCase с глаголом: ProcessData» |
| Отклонение | Изменение блокируется с объяснением | Изменение undefined → undefined → «отклонено бездействие, тип не изменился» |
| Флаг | По умолчанию | Описание |
|---|
--transport | stdio | stdio (инструменты ИИ), streamable-http (веб-клиенты), sse (устаревший) |
--mcp-host | 127.0.0.1 | Хост привязки для HTTP-транспортов |
--mcp-port | — | Порт для HTTP-транспортов |
--lazy | выкл. | Загружать только группы инструментов по умолчанию при подключении. Более быстрый запуск, но клиенты MCP, не поддерживающие tools/list_changed, увидят неполный список инструментов. Не рекомендуется для Claude Code. |
--no-lazy | (по умолч.) | Загружать все группы инструментов сразу при подключении. Требуется для большинства ИИ-клиентов. |
--default-groups | listing,function,program | Группы, разделённые запятыми, загружаемые при подключении, если установлен --lazy. |
| Флаг | По умолчанию | Описание |
|---|
--port | 8099 | Порт HTTP-сервера |
--host | 127.0.0.1 | Адрес привязки (0.0.0.0 для доступа по локальной сети) |
--exports-dir | — | Путь к каталогу dll_exports/ для разрешения порядковых номеров в имена |
--log-level | INFO | DEBUG, INFO, WARNING или ERROR |
import_file - Импортировать бинарный файл с диска в текущий проект Ghidra и открыть егоlist_open_programs - Перечислить открытые программыlist_option_groups - Перечислить группы параметров программы (напр.list_project_files - Перечислить файлы проектаlist_properties - Перечислить записи (адрес, значение), хранящиеся в карте свойств, с пагинациейlist_property_maps - Перечислить пользовательские карты свойств — типизированные хранилища ключ→значение по адресуopen_program - Открыть программу из проектаreanalyze - Запустить полный автоматический анализ программыremove_program_option - Удалить параметр из группы параметров программыremove_property - Удалить значение, сохранённое по одному адресу в карте свойствsave_all_programs - Сохранить все открытые программыsave_program - Сохранить текущую программуset_image_base - Установить базовый адрес программы (перебазирует все адреса)set_program_option - Установить типизированный параметр программыset_property - Установить значение по адресу в карте свойствswitch_program - Переключить текущую программуparent_dir/project_nameserver_status - Проверить статус подключения головного сервераlist_namespaces - Перечислить все пространства имёнlist_scripts - Перечислить доступные скрипты Ghidralist_segments - Перечислить сегменты памятиlist_strings - Перечислить определённые строкиget_function_jump_targets - Получить цели переходовget_function_labels - Получить метки в функцииget_function_variables - Перечислить все переменные в функцииget_struct_layout - Получить структуру макетаget_valid_data_types - Получить допустимые имена типов данныхsearch_functions_by_tag - Перечислить все функции, к которым присоединён указанный тегset_decompiler_variable_type - Установить тип переменной или параметра декомпилятора (высокого уровня) по имениset_function_no_return - Установить атрибут невозвратаset_function_tag_comment - Обновить комментарий/описание существующего общепрограммного тега функцииset_function_this_type - Установить тип указателя 'this' для декомпилятора/базы данных (ECX на x86 для __thiscall/__fastcall)set_variables - Атомарно установить типы и имена для нескольких переменныхcreate_pointer_type - Создать тип указателяcreate_struct - Создать структуруcreate_typedef - Создать typedefcreate_union - Создать объединениеdelete_data_type - Удалить тип данныхembed_struct_field - Заменить поле структуры встроенным типом структуры по значению (напр.get_data_type_size - Получить размер типа данных в байтахget_type_size - Получить размер типа данных и информациюimport_data_types - Импортировать типы данных из GDTlist_data_type_categories - Перечислить категории типов данныхlist_data_types - Перечислить типы данныхmodify_struct_field - Изменить поле структурыmodify_struct_field_type - Установить тип поля структуры по имени или смещению (offset:N)move_data_type_to_category - Переместить тип данных в категориюrecreate_struct - Заменить структуру за один шаг: опционально удалить существующий тип с тем же именем, затем создать с полями в JSON (такой же формат, как в create_struct)remove_struct_field - Удалить поле структурыresize_struct - Увеличить или уменьшить существующую структуру по общему размеру в байтахresolve_duplicate_type - Найти дублирующиеся типы данных по простому имени; удалить неиспользуемые заглушки размера 1 от /Demangler, если существует более крупный канонический типset_function_prototype - Установить прототип функции (тип возврата, типы параметров, соглашение о вызовах)set_global - Атомарно применить имя + тип + комментарий-табличку + длину массива к глобальной переменнойset_local_variable_type - Установить тип переменнойset_parameter_type - Установить тип параметраset_variable_storage - Установить хранение переменнойvalidate_data_type - Проверить синтаксис типа данныхvalidate_data_type_exists - Проверить, существует ли тип данныхvalidate_function_prototype - Проверить прототип функцииrename_variable - Переименовать переменную в функцииrename_variables - Пакетное переименование переменныхbatch_apply_documentation - Применить всю документацию к функции за один вызовbatch_decompile - Декомпилировать несколько функций одновременноcan_rename_at_address - Проверить, можно ли переименовать адресclear_instruction_flow_override - Очистить переопределение потокаconfigure_analyzer - Настроить плагин анализаcreate_function - Создать функцию по адресуcreate_memory_block - Создать блок памятиdelete_function - Удалить функцию по адресуdetect_array_bounds - Определить границы массиваdetect_crypto_constants - Определить криптоконстантыdetect_malware_behaviors - Определить поведение вредоносного ПОextract_iocs_with_context - Извлечь IOC с контекстомfind_anti_analysis_techniques - Найти техники антианализаfind_code_gaps - Найти промежутки неопределённых байтов между функциями в исполняемой памятиfind_dead_code - Найти мёртвый кодfind_next_undefined_function - Найти следующую неопределённую функциюget_assembly_context - Получить контекст ассемблераget_field_access_context - Получить контекст доступа к полюget_function_pcode - Вывести сырой P-код для функции (issue #192)inspect_memory_content - Проверить байты памятиlist_analyzers - Перечислить доступные плагины анализаread_memory - Прочитать сырую памятьrun_analysis - Запустить автоматический анализ текущей программыsearch_instructions - Искать инструкции по мнемонике и/или подстроке операндаsuggest_field_names - Предложить имена полейhealth - Конечная точка проверки связи для головного сервераmcp_health - Состояние HTTP-сервера: статистика пула, время работы, память, количество активных запросовmcp_schema - Машиночитаемая схема API с метаданными конечных точекtool_goto_address - Перейти к определённому адресу в списке CodeBrowser и декомпилятореtool_launch_codebrowser - Открыть файл в CodeBrowser, при необходимости запустив новыйtool_running_tools - Перечислить все окна запущенных инструментов Ghidraserver_repository_files - Перечислить файлы в папке репозитория сервераserver_version_control_add - Добавить файл в систему контроля версийserver_version_control_checkin - Зарегистрировать файл под контролем версийserver_version_control_checkout - Извлечь файл под контролем версийserver_version_control_undo_checkout - Отменить извлечение файлаserver_version_history - Получить историю версий файлаdebugger_stack_trace - Получить обратную трассировку стека для текущего потокаdebugger_static_to_dynamic - Преобразовать статический адрес программы Ghidra в динамический адрес времени выполнения в текущем трейсеdebugger_status - Получить состояние отладчика: активный трейс, поток, состояние выполнения, количество модулейdebugger_step_into - Шагнуть внутрь следующей инструкции (следует за вызовами)debugger_step_out - Шагнуть из текущей функции (выполнить до возврата)debugger_step_over - Шагнуть через следующую инструкцию (не следует за вызовами)debugger_traces - Перечислить все открытые трейсы отладки| Command | Что делает |
|---|
ensure-prereqs | Устанавливает Python-зависимости и JAR-файлы Ghidra Maven за один раз. Начните отсюда на новой машине. |
preflight | Проверяет Python, инструмент сборки, путь к Ghidra и доступность JAR без внесения изменений. Добавьте --strict для дополнительной проверки сетевой доступности. |
build | Собирает JAR плагина и ZIP расширения через Maven (или Gradle, когда TOOLS_SETUP_BACKEND=gradle). |
deploy | Копирует собранное расширение в профиль Ghidra и патчит FrontEndTool.xml для автоматической активации. |
start-ghidra | Запускает настроенную установку Ghidra. |
clean | Удаляет результаты сборки Maven/Gradle (target/, build/). |
clean-all | Удаляет результаты сборки и локальные кэшированные артефакты (JAR-файлы Ghidra в .m2 и т.д.). |
install-ghidra-deps | Устанавливает только JAR-файлы Ghidra в ~/.m2. Полезно, когда среда сборки изменяется. |
install-python-deps | Устанавливает группы Python-зависимостей через uv sync. |
run-tests | Запускает набор Java-тестов в офлайн-режиме (без работающей Ghidra). |
verify-version | Проверяет, что строки версий согласованы в pom.xml, CHANGELOG.md и README.md. |
bump-version --new X.Y.Z | Атомарно обновляет все ссылки на версию. Передайте --tag, чтобы создать git-тег. |
| Флаг | Описание |
|---|
--ghidra-path PATH | Каталог установки Ghidra. По умолчанию используется GHIDRA_PATH из .env. |
--dry-run | Печатает действия без их выполнения. |
--force | Переустанавливает JAR-файлы Ghidra, даже если они уже присутствуют (install-ghidra-deps, ensure-prereqs). |
--with-debugger | Принудительно устанавливает Python-требования отладчика (только Windows). |
--use-debugger-toggle | Читает INSTALL_DEBUGGER_DEPS из .env, чтобы решить, устанавливать ли зависимости отладчика. |
--test TIER | (только для deploy) Включает живые регрессионные тесты развёртывания, такие как release или debugger-live. |
--strict | (только для preflight) Также проверяет сетевую доступность Maven Central и PyPI. |
| Библиотека | Исходный путь | Назначение |
|---|
| Base.jar | Features/Base/lib/ | Основная функциональность Ghidra |
| Decompiler.jar | Features/Decompiler/lib/ | Декомпилятор |
| PDB.jar | Features/PDB/lib/ | Поддержка символов Microsoft PDB |
| FunctionID.jar | Features/FunctionID/lib/ | Идентификация функций |
| SoftwareModeling.jar | Framework/SoftwareModeling/lib/ | API модели программы |
| Project.jar | Framework/Project/lib/ | Управление проектами |
| Docking.jar | Framework/Docking/lib/ | Фреймворк стыковки UI |
| Generic.jar | Framework/Generic/lib/ | Универсальные утилиты |
| Utility.jar | Framework/Utility/lib/ | Основные утилиты |
| Gui.jar | Framework/Gui/lib/ | Компоненты GUI |
| FileSystem.jar | Framework/FileSystem/lib/ | Поддержка файловой системы |
| Graph.jar | Framework/Graph/lib/ | Анализ графов/графа вызовов |
| DB.jar | Framework/DB/lib/ | Операции с базой данных |
| Emulation.jar | Framework/Emulation/lib/ | Эмуляция P-code |
| Эндпоинт | Метод | Описание |
|---|
/load_program | POST | Загрузить бинарный файл для анализа |
/run_analysis | POST | Запустить автоматический анализ Ghidra |
/list_functions | GET | Вывести все обнаруженные функции |
/list_exports | GET | Вывести экспортированные символы |
/list_imports | GET | Вывести импортированные символы |
/decompile_function | GET | Декомпилировать функцию в код C |
/create_function | POST | Создать функцию по адресу |
/get_metadata | GET | Получить метаданные программы |
/create_project | POST | Создать проект Ghidra |
/list_analyzers | GET | Вывести доступные анализаторы |
/server/status | GET | Проверить соединение с Ghidra Server |
| Метрика | Значение |
|---|
| Версия | 5.17.0 |
| Инструменты MCP | 249 полностью реализовано |
| Эндпоинты GUI | 196 (GhidraMCPPlugin) |
| Headless-эндпоинты | 195 (GhidraMCPHeadlessServer) |
| Компиляция | ✅ 100% успешно |
| Эффективность пакетной обработки | Снижение количества вызовов API на 93% |
| AI-процессы | 7 проверенных рабочих процессов документирования |
| Скрипты Ghidra | Включены скрипты автоматизации |
| Документация | Всеобъемлющая с AI-подсказками |