Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
ghidra-mcp — MCP-сервер, объединяющий обратную разработку Ghidra с инструментами ИИ: 256 инструментов для декомпиляции, эмуляции P-кода, живой отладки, анализа потоков данных, пакетных операций и контроля соблюдения соглашений в безголовом и графическом режимах. | Kitploit
Инструменты/GitHubGitHub/bethington/ghidra-mcp
Статический анализДинамический анализ (песочница)Обратная инженерияСкриптинг и автоматизацияОтладчикиФаззингУтилиты и фреймворкиАнализ Бинарных ФайловОбучение и ОбразованиеОбратная Разработка с Помощью ИИ
GitHubbethington/ghidra-mcp
3.3k979 дней назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

ghidra-mcp

MCP-сервер, объединяющий обратную разработку Ghidra с инструментами ИИ: 256 инструментов для декомпиляции, эмуляции P-кода, живой отладки, анализа потоков данных, пакетных операций и контроля соблюдения соглашений в безголовом и графическом режимах.

Репозиторий

Ghidra MCP Server

Tests Release License GitHub Sponsors

Python Java Ghidra MCP

Stars Last commit Discussions Issues OpenSSF Scorecard

Если этот проект оказался полезным, пожалуйста, поставьте ⭐ звезду репозиторию — это поможет другим его найти!

Если Ghidra MCP экономит ваше время, подумайте о спонсировании проекта. Как разовые, так и регулярные пожертвования помогают финансировать обновления совместимости, промышленное закаливание, документацию и новые инструменты.

Готовый к эксплуатации сервер Model Context Protocol (MCP), который соединяет мощные возможности реверс-инжиниринга Ghidra с современными AI-инструментами и фреймворками автоматизации. 271 MCP-инструмент, проверенные в бою AI-рабочие процессы и самая полная интеграция Ghidra-MCP из доступных — теперь включая эмуляцию P-кода, интеграцию с живым отладчиком и анализ потоков данных на основе графов PCode.

Почему Ghidra MCP?

Большинство реализаций Ghidra MCP дают вам горстку инструментов только для чтения и на этом всё. Этот проект отличается — он создан реверс-инженером, который использует его ежедневно на реальных бинарных файлах, а не как демо.

  • 271 MCP-инструмент — в 3 раза больше, чем у любой конкурирующей реализации. Не только операции чтения — полный доступ на запись для переименования, типизации, комментирования, создания структур, выполнения скриптов, эмуляции P-кода и живой отладки.
  • Проверенные в бою AI-рабочие процессы — Проверенные процессы документирования (V5), отточенные на сотнях функций. Включают пошаговые подсказки, справочник по венгерской нотации, руководства по пакетной обработке и поиск осиротевшего кода.
  • Промышленная надёжность — Атомарные транзакции, пакетные операции (сокращение вызовов API на 93%), настраиваемые тайм-ауты и корректная обработка ошибок. Никаких молчаливых сбоев.
  • Перенос документации между бинарными файлами — Сопоставление функций по SHA-256 хешу автоматически переносит документацию между версиями бинарных файлов. Документируйте один раз, применяйте везде.
  • Полная интеграция с Ghidra Server — Подключение к общим серверам Ghidra, управление репозиториями, контроль версий, рабочие процессы checkout/checkin и совместная работа нескольких пользователей.
  • Головной и графический режимы — Работа с GUI Ghidra или без него. Готовность к Docker для CI/CD конвейеров и автоматического анализа в масштабе.
  • Целенаправленно спроектирован — v5.0 переносит соглашения об именовании, типовую безопасность и стандарты документирования на уровень инструментов. AI-агенты и инженеры-люди выдают согласованные выходные данные без необходимости вставлять руководство по стилю в каждую подсказку.

Принудительное соблюдение соглашений

Вы наверняка сталкивались: через шесть месяцев работы над проектом вы находите ProcessItem, process_items, handleItem и ItemProc в одной кодовой базе — четыре функции, делающие одно и то же, названные четырьмя разными сессиями или инженерами без общего контракта. Исправление занимает больше времени, чем должно, и проблема повторится.

v5.0 переносит соглашения из разряда «вещи, которые нужно помнить» на уровень инструментов, где их действительно можно соблюдать.

Для AI-агентов это означает согласованный вывод в каждой сессии, с каждой моделью, при каждом запуске — без вставки руководства по стилю в каждую подсказку. Инструмент знает правила; модели достаточно сделать вызов.

Для команд это устраняет целый класс замечаний на ревью вроде «это не наше соглашение об именовании». Арбитраж соглашений остаётся в инструменте, а не в код-ревью.

Для сольной работы в масштабе analyze_function_completeness выдаёт оценку 0–100%, которая измеряет честно: структурные вычеты (неисправимые артефакты компилятора) прощаются в вашей эффективной оценке, логарифмическое шкалирование не позволяет одной плохой категории похоронить всё остальное, а многоуровневое качество комментариев к плитам означает, что вы точно знаете, чего не хватает и почему.

🌟 Возможности

Базовая интеграция MCP

  • Полная совместимость с MCP — Полная реализация Model Context Protocol
  • 271 MCP-инструмент — Всеобъемлющая поверхность API, охватывающая каждый аспект анализа бинарных файлов
  • Промышленная надёжность — Атомарные транзакции, пакетные операции, настраиваемые тайм-ауты
  • Анализ в реальном времени — Интеграция с движком анализа Ghidra в реальном времени

Примечание о совместимости: Имена инструментов MCP нормализованы для GitHub Copilot CLI и валидации CAPI. Открытые имена инструментов используют только строчные буквы, цифры, символы подчёркивания и дефисы; вложенные HTTP-пути, такие как /debugger/status, рекламируются под именами вида debugger_status_2 при необходимости во избежание коллизий со статическими инструментами-мостами.

Возможности анализа бинарных файлов

  • Анализ функций — Декомпиляция, графы вызовов, перекрёстные ссылки, оценка полноты
  • Анализ потоков данных — Распространение значений на основе графов PCode (вперёд/назад) от любой переменной или регистра
  • Обнаружение структур данных — Создание структур/объединений/перечислений с анализом полей и предложениями по именованию
  • Извлечение строк — Поиск по регулярным выражениям, фильтрация по качеству, обнаружение функций, привязанных к строкам
  • Анализ импорта/экспорта — Таблицы символов, внешние расположения, разрешение импорта по порядковым номерам
  • Инспекция памяти и данных — Чтение сырой памяти, поиск по байтовому шаблону, обнаружение границ массивов
  • Документация между бинарными файлами — Сопоставление функций по хешу и распространение документации между версиями

Динамический анализ (v5.4.0)

  • Эмуляция P-кода — Запуск любой функции изолированно через EmulatorHelper Ghidra; брутфорс разрешения хеша API за миллисекунды
  • Интеграция с живым отладчиком — 17 Java-конечных точек + 22 инструмента-моста на Python через фреймворк TraceRmi Ghidra (dbgeng на Windows PE, gdb/lldb в остальных случаях): присоединение, пошаговое выполнение, точки останова, регистры, чтение памяти, трассировка функций без остановки, статико-динамический перевод адресов с учётом ASLR

AI-управляемые рабочие процессы реверс-инжиниринга

  • Рабочий процесс документирования функций V5 — 7-шаговый процесс для полного документирования функций с венгерской нотацией, аудитом типов и автоматической проверкой качества
  • Пакетное документирование — Параллельная отправка под-агентов для одновременного документирования нескольких функций
  • Обнаружение осиротевшего кода — Автоматический сканер находит необнаруженные функции в пробелах между известным кодом
  • Исследование типов данных — Систематические рабочие процессы для обнаружения структур и анализа полей
  • Сопоставление между версиями — Сопоставление функций по хешу между разными версиями бинарных файлов

Разработка и автоматизация

  • Управление скриптами Ghidra — Создание, запуск, обновление и удаление скриптов Ghidra полностью через MCP
  • Поддержка нескольких программ — Переключение между несколькими открытыми программами и их сравнение
  • Пакетные операции — Массовое переименование, комментирование, типизация и управление метками (на 93% меньше вызовов API)
  • Headless-сервер — Полный анализ без GUI Ghidra — готовность к Docker и CI/CD
  • Проекты и управление версиями — Создание проектов, управление файлами, интеграция с Ghidra Server
  • Управление анализом — Программный просмотр, настройка и запуск анализаторов Ghidra

🚀 Быстрый старт

Предварительные требования

  • Java 21 LTS (рекомендуется OpenJDK)
  • Apache Maven 3.9+
  • Ghidra 12.1.2 (или совместимая версия)
  • Python 3.10+ с uv (рекомендуется) или pip + venv

Пользователи общего сервера 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.

  1. Клонируйте репозиторий: ```bash git clone https://github.com/bethington/ghidra-mcp.git cd ghidra-mcp
    root@kitploit:~
  2. Рекомендуется: сначала выполнить предварительную проверку окружения: ```text python -m tools.setup preflight --ghidra-path "F:\ghidra_12.1.2_PUBLIC"
    root@kitploit:~
  3. Собрать и развернуть в Ghidra: ```text python -m tools.setup ensure-prereqs --ghidra-path "F:\ghidra_12.1.2_PUBLIC" python -m tools.setup build python -m tools.setup deploy --ghidra-path "F:\ghidra_12.1.2_PUBLIC"
    root@kitploit:~

deploy сохраняет/закрывает уже запущенный соответствующий экземпляр Ghidra при необходимости, устанавливает расширение, запускает Ghidra, ожидает проверки здоровья MCP и выполняет smoke-тесты схем.

  1. Опциональный строгий/ручной режим (продвинутый): ```text

    Skip automatic prerequisite setup

    python -m tools.setup build python -m tools.setup deploy --ghidra-path "F:\ghidra_12.1.2_PUBLIC"
    root@kitploit:~
  2. Показать справку по команде: ```text python -m tools.setup --help
    root@kitploit:~
  3. Опциональный режим только сборки (продвинутый/устранение неполадок): ```text python -m tools.setup build
    root@kitploit:~

Поддерживаемый путь сборки: python -m tools.setup build использует Maven под капотом и является каноническим рабочим процессом, используемым задачами и документацией репозитория. ```bash

Manual Maven build (requires Ghidra deps already installed in local .m2)

mvn clean package assembly:single -DskipTests

root@kitploit:~
## О проекте - *   ```bash
# Secondary/manual Gradle build path only (not used by tools.setup or VS Code tasks)
GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension

Установка (Linux — Ubuntu/Debian)

  1. Клонируйте репозиторий: ```bash git clone https://github.com/bethington/ghidra-mcp.git cd ghidra-mcp
    root@kitploit:~
  2. Установите системные предварительные требования (если еще не установлены): ```bash sudo apt update && sudo apt install -y openjdk-21-jdk maven python3 python3-pip python3-venv curl jq unzip
    root@kitploit:~

Замечание для Debian/Kali/Ubuntu 23.04+ (PEP 668): в этих дистрибутивах системный Python помечен как внешне управляемый, поэтому простая pip install завершается ошибкой error: externally-managed-environment. Не обходите это с помощью --break-system-packages — это может повредить инструменты, управляемые apt. Вместо этого используйте uv (рекомендуется — он автоматически создает и управляет локальным для проекта .venv, и именно его используют команды этого репозитория):

root@kitploit:~
curl -LsSf https://astral.sh/uv/install.sh | sh
uv run bridge-mcp-ghidra    # resolves deps into .venv and starts the bridge

или классическое виртуальное окружение:

root@kitploit:~
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
bridge-mcp-ghidra
  1. Запустите предварительную проверку среды: ```bash python -m tools.setup preflight --ghidra-path ~/ghidra_12.1.2_PUBLIC
    root@kitploit:~
  2. Собрать и развернуть в Ghidra (одна команда): ```bash python -m tools.setup ensure-prereqs --ghidra-path ~/ghidra_12.1.2_PUBLIC python -m tools.setup build python -m tools.setup deploy --ghidra-path ~/ghidra_12.1.2_PUBLIC
    root@kitploit:~

Это выполнит:

  • Установит зависимости Ghidra JAR в ваш локальный репозиторий ~/.m2/repository
  • Соберёт GhidraMCP-<version>.zip с помощью Maven
  • Извлечёт расширение в ~/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/
  • Обновит preferences с помощью LastExtensionImportDirectory
  • Установит зависимости Python
  1. Опционально: настройка только зависимостей Maven: ```bash python -m tools.setup install-ghidra-deps --ghidra-path ~/ghidra_12.1.2_PUBLIC
    root@kitploit:~
  2. Показать справку по команде: ```bash python -m tools.setup --help
    root@kitploit:~

Пути в Linux: Расширение устанавливается в $HOME/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/GhidraMCP/. Файлы конфигурации Ghidra находятся в $HOME/.config/ghidra/ghidra_<version>_PUBLIC/.

Установка (macOS — Homebrew)

  1. Установите зависимости: ```bash brew install openjdk@21 maven python ghidra
    root@kitploit:~
  2. Клонируйте репозиторий: ```bash git clone https://github.com/bethington/ghidra-mcp.git cd ghidra-mcp
    root@kitploit:~
  3. Установите JAR-файлы Ghidra в локальный Maven: ```bash python -m tools.setup install-ghidra-deps
    --ghidra-path /opt/homebrew/opt/ghidra/libexec
    root@kitploit:~
  4. Сборка и развертывание: ```bash python -m tools.setup ensure-prereqs
    --ghidra-path /opt/homebrew/opt/ghidra/libexec python -m tools.setup build python -m tools.setup deploy
    --ghidra-path /opt/homebrew/opt/ghidra/libexec
    root@kitploit:~

Расширение установлено в ~/Library/ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/.

Примечание: --ghidra-version обязателен при использовании пути Homebrew, так как путь не содержит строки версии.

  1. Запустите Ghidra и включите плагин: ```bash /opt/homebrew/opt/ghidra/libexec/ghidraRun
    root@kitploit:~

В главном окне проекта: Tools > GhidraMCP > Start MCP Server

  1. Настройте Cursor/Claude MCP (~/.cursor/mcp.json): ```json { "mcpServers": { "ghidra": { "command": "uv", "args": ["run", "--directory", "/path/to/ghidra-mcp", "bridge-mcp-ghidra"] } } }
    root@kitploit:~

Установка (Arch Linux — AUR)

@Pandoriaantje поддерживает пакеты AUR сообщества:

  • ghidra-mcp-git — отслеживает ветку main
  • ghidra-mcp — отслеживает тегированные релизы

Установите с помощью вашего AUR-помощника, например:```bash yay -S ghidra-mcp # or ghidra-mcp-git

root@kitploit:~
### Базовое использование

#### Вариант 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

root@kitploit:~
Добавьте `--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" } } }

root@kitploit:~
Клиенты на основе браузера (например, [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

root@kitploit:~
Без этого вызов, в котором отсутствует `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, если вы изменили порт или хост по умолчанию, чтобы мост мог его найти.

В Ghidra

  1. Запустите Ghidra и откройте окно CodeBrowser
  2. В CodeBrowser включите плагин через File > Configure > Configure All Plugins > GhidraMCP
  3. Опционально: настройте пользовательский порт через CodeBrowser > Edit > Tool Options > GhidraMCP HTTP Server
  4. Запустите сервер через Tools > GhidraMCP > Start MCP Server
  5. Сервер по умолчанию работает на http://127.0.0.1:8089/

Проверьте, что всё работает```bash

Quick health check

curl http://127.0.0.1:8089/check_connection

Expected: "Connected: GhidraMCP plugin running with program ''"

Get version info

curl http://127.0.0.1:8089/get_version

root@kitploit:~
## Поддержка проекта

Если 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

При подключении к общему серверу Ghidra GhidraMCP может автоматически подавлять диалог ввода пароля. Учетные данные разрешаются в следующем порядке (первое непустое значение выигрывает):

Примечание о совместимости: клиенты Ghidra 12.1.2 требуют сервер Ghidra 12.1.2, 12.0.5 или более новый совместимый сервер. Старые общие серверы не являются безопасными целями для обновления клиента до версии 12.1.

  1. GHIDRA_SERVER_PASSWORD переменная окружения (или файл .env в каталоге установки Ghidra или ~)
  2. ~/.ghidra-cred — файл пароля в одну строку в вашем домашнем каталоге
  3. <ghidra-install-dir>/.ghidra-cred

Имя пользователя разрешается аналогично: переменная окружения GHIDRA_SERVER_USER → системное свойство user.name.

Если пароль не найден, Ghidra показывает обычный запрос графического интерфейса. Установите их в .env (см. .env.template для полного блока), чтобы включить автоматическую аутентификацию.

Миграция с версии 5.4.0 на 5.4.1

  • Конечные точки скриптов теперь по умолчанию отключены. Если вы полагались на /run_script_inline или /run_ghidra_script, экспортируйте GHIDRA_MCP_ALLOW_SCRIPTS=1. Это намеренное изменение, нарушающее обратную совместимость; предыдущее значение по умолчанию было небезопасным.
  • Развертывания только на локальном хосте не требуют изменений. Аутентификация, запрет привязки и проверки корневых путей — все опционально.

❓ Устранение неполадок

Меню "GhidraMCP" не отображается в Tools

Причина: Плагин не включен или установлен неправильно.

Решение:

  1. Убедитесь, что расширение установлено: File > Install Extensions — GhidraMCP должен быть в списке
  2. Включите плагин: File > Configure > Configure All Plugins > GhidraMCP (отметьте галочку)
  3. Перезапустите Ghidra после установки/включения

Сервер не отвечает / Соединение отклонено

Причина: Сервер не запущен или неправильный порт.

Решение:

  1. Убедитесь, что вы запустили сервер: Tools > GhidraMCP > Start MCP Server
  2. Проверьте настроенный порт: Edit > Tool Options > GhidraMCP HTTP Server
  3. Проверьте, используется ли порт: ```bash

    Linux/macOS

    lsof -i :8089

    Windows

    netstat -ano | findstr :8089
    root@kitploit:~
  4. Ищите ошибки в консоли Ghidra: Window > Console

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

root@kitploit:~
Или классический 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

root@kitploit:~
Если у вас есть как глобальный 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"

📊 Производительность в эксплуатации

  • MCP Tools: 271 инструментов полностью реализовано
  • Скорость: Субсекундный отклик для большинства операций
  • Эффективность: Снижение количества вызовов API на 93% с помощью пакетных операций
  • Надёжность: Атомарные транзакции с семантикой "всё или ничего"
  • AI Workflows: Проверенные подсказки для документирования, улучшенные на сотнях реальных функций
  • Развёртывание: Автоматизированный скрипт развёртывания с учётом версий

🛠️ Справочник API

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 - Сохранить и выйти из Ghidra
  • get_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 - Удалить проект Ghidra
  • list_projects - Перечислить доступные проекты Ghidra
  • move_file - Переместить файл в другую папку проекта
  • move_folder - Переместить папку в другое место
  • project_info - Получить подробную информацию о проекте, включая запущенные инструменты и открытые программы

Головной сервер: жизненный цикл проекта и программы

Доступно на автономном головном сервере (GhidraMCPHeadlessServer).

  • archive_project - Архивировать текущий открытый проект в родной файл .gar Ghidra
  • checkin_program - Зарегистрировать открытую программу обратно на общем сервере Ghidra как новую версию
  • close_project - Закрыть текущий открытый проект
  • create_project - Создать новый проект Ghidra
  • export_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_reference

Типы данных и структуры

  • add_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_COMMENT
  • set_disassembly_comment - Установить EOL_COMMENT
  • set_plate_comment - Установить комментарий-табличку

Анализ

  • analyze_api_call_chains - Анализировать цепочки вызовов API
  • analyze_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 - Запустить встроенный код скрипта

Сервер Ghidra и управление версиями

  • server_admin_set_permissions - Установить права пользователя на репозиторий
  • server_admin_terminate_all_checkouts - Завершить все извлечения в папке рекурсивно
  • server_admin_terminate_checkout - Завершить все извлечения одного файла
  • server_admin_users - Перечислить всех пользователей на сервере
  • server_authenticate - Зарегистрировать учётные данные сервера для программной аутентификации
  • server_checkouts - Перечислить все извлечённые файлы в папке, включая серверные извлечения
  • server_connect - Подключиться к серверу Ghidra
  • server_disconnect - Отключиться от сервера Ghidra
  • server_repositories - Перечислить репозитории на подключённом сервере
  • server_repository_create - Создать новый репозиторий на сервере
  • server_repository_file - Получить информацию о файле из репозитория сервера

Отладчик (Ghidra TraceRmi — только GUI)

На хостах Windows, где активен прокси-отладчик WinDbg моста (GHIDRA_DEBUGGER_URL), конфликтующие имена получают суффикс _2 (напр., debugger_status_2).

  • debugger_dynamic_to_static - Преобразовать динамический адрес времени выполнения из текущего трейса обратно в статический адрес программы Ghidra
  • debugger_interrupt - Прервать (войти в) выполняемую цель
  • debugger_launch - Запустить исполняемый файл через загрузчик отладчика Trace RMI Ghidra
  • debugger_launch_offers - Перечислить доступные опции запуска/подключения отладчика для текущей программы
  • debugger_list_breakpoints - Перечислить все точки останова в текущем трейсе
  • debugger_modules - Перечислить модули (DLL/EXE), загруженные в отлаживаемом процессе
  • debugger_read_memory - Прочитать память из отлаживаемого процесса
  • debugger_registers - Прочитать регистры ЦП из текущего снимка трейса отладки
  • debugger_remove_breakpoint - Удалить точку останова по адресу
  • debugger_resume - Возобновить выполнение отлаживаемого процесса
  • debugger_set_breakpoint - Установить программную точку останова по адресу в трейсе

Система

  • prompt_policy - Временно включить, отключить или запросить обработку подсказок автоматизации с ограничениями

Bridge Static ToolsОпределено в самом Python-мосте (обнаружение экземпляров, управление группами инструментов); всегда доступно даже до подключения к Ghidra. Мост также проксирует 22 инструмента WinDbg вида debugger_*, когда GHIDRA_DEBUGGER_URL указывает на автономный сервер отладчика.

  • check_tools - Отчёт о том, какие инструменты в данный момент зарегистрированы и могут быть вызваны
  • connect_instance - Подключить мост к определённому экземпляру Ghidra
  • import_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)

root@kitploit:~
### Компоненты

- **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.

Command Reference

Общие флаги, принимаемые большинством команд:

Уровни тестов развёртывания являются опциональными, потому что эталонные тесты могут импортировать/сбрасывать Benchmark.dll и BenchmarkDebug.exe в активном проекте Ghidra. Используйте --test release перед выпуском релизов или установите GHIDRA_MCP_DEPLOY_TESTS=release в локальном .env, если хотите, чтобы каждый развёртывание на вашей машине запускало эталонную регрессию в реальном времени. Смотрите Testing and Release Regression.```text

Standard first-time setup and deploy

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"

Preflight check before deploying

python -m tools.setup preflight --strict --ghidra-path "C:\ghidra_12.1.2_PUBLIC"

Version bump and tag

python -m tools.setup bump-version --new X.Y.Z --tag

Run offline Java tests

python -m tools.setup run-tests

Show full help

python -m tools.setup --help

root@kitploit:~
### Структура проекта```
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)

Если они не совпадают, развертывание завершается с ошибкой с четким сообщением.

Устранение неполадок: несоответствие версий

Если вы видите ошибку несоответствия версий, приведите оба значения в соответствие:

  1. pom.xml → ghidra.version
  2. сегмент версии --ghidra-path (ghidra_X.Y.Z_PUBLIC)

Затем выполните повторно:```text python -m tools.setup preflight --ghidra-path "C:\ghidra_12.1.2_PUBLIC"

root@kitploit:~
▁(▁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

Возможности разработки

  • Автоматизированное развёртывание: Скрипт развёртывания с учётом версий
  • Пакетные операции: Сокращает количество вызовов API на 93%
  • Атомарные транзакции: Семантика «всё или ничего»
  • Комплексное логирование: Возможности отладки и трассировки

📚 Документация

Основная документация

  • Documentation Index — Полная навигация по документации
  • Project Structure — Руководство по организации проекта
  • Testing and Release Regression — Локальные тесты, CI, регрессионное тестирование на живой Ghidra и шлюзы релиза
  • Naming Conventions — Стандарты именования кода
  • Hungarian Notation — Руководство по именованию переменных

Промпты рабочих процессов ИИ

  • Function Documentation V5 — Основной рабочий процесс: 7-шаговый процесс с венгерской нотацией, аудитом типов и оценкой верификации
  • Batch Documentation V5 — Параллельная диспетчеризация подагентов для обработки нескольких функций
  • Orphaned Code Discovery — Автоматический сканер для необнаруженных функций
  • Data Type Investigation — Систематическое обнаружение структур
  • Cross-Version Matching — Сопоставление функций на основе хэшей
  • Quick Start Prompt — Упрощённый рабочий процесс для начинающих
  • All Prompts — Полный индекс промптов

История релизов

  • Complete Changelog — Полный журнал изменений
  • Release Notes — Подробная документация релизов

🐳 Headless-сервер (Docker)

GhidraMCP включает режим headless-сервера для автоматизированного анализа без графического интерфейса Ghidra.

Быстрый старт с Docker```bash

Build and run

docker-compose up -d ghidra-mcp

Test connection

curl http://localhost:8089/check_connection

Connection OK - GhidraMCP Headless Server v5.17.0

root@kitploit:~
### Безголовый 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

Ключевые Headless-эндпоинты

Конфигурация

Переменные окружения для Docker:

  • GHIDRA_MCP_PORT - Порт сервера (по умолчанию: 8089)
  • GHIDRA_MCP_BIND_ADDRESS - Адрес привязки (по умолчанию: 0.0.0.0 в Docker)
  • JAVA_OPTS - Параметры JVM (по умолчанию: -Xmx4g -XX:+UseG1GC)

🤝 Участие в разработке

См. CONTRIBUTING.md для подробных руководств по участию.

Быстрый старт

  1. Сделайте форк репозитория
  2. Создайте ветку функции (git checkout -b feature/amazing-feature)
  3. Соберите и протестируйте изменения (mvn clean package assembly:single -DskipTests или GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension)
  4. Обновите документацию по необходимости
  5. Зафиксируйте изменения (git commit -m 'Add amazing feature')
  6. Отправьте в ветку (git push origin feature/amazing-feature)
  7. Откройте Pull Request

📄 Лицензия

Этот проект лицензирован под Apache License 2.0 — подробнее см. в файле LICENSE.

🏆 Статус производственной готовности

См. CHANGELOG.md для истории версий и примечаний к выпускам.

🙏 Благодарности

Этот проект изначально был ответвлением от LaurieWired/GhidraMCP в августе 2025 года и с тех пор был существенно переписан и расширен. Мы признаем оригинальную работу LaurieWired в качестве отправной точки. См. NOTICE для указания авторства лицензии.

👥 Участники

Этот проект получил преимущества от работы преданных участников:

Основные участники

@heeen — Значительный вклад, включая:

  • Нечёткое сопоставление функций и структурированное сравнение для кросс-бинарного анализа (#13)
  • Улучшения выполнения скриптов и исправления ошибок (#12)
  • Новые эндпоинты API: save_program, exit_ghidra, delete_function, create_memory_block, run_script_inline (#11)
  • Архитектурное видение: дизайн на основе аннотаций, транспорт UDS, предложения по оптимизации Python-моста

@huehuehuehueing — Значительный вклад, включая:

  • Поддержка префиксов адресных пространств — добавлен синтаксис <space>:<hex> (например, mem:1000, code:ff00) для разбора адресов на всей поверхности эндпоинтов, открывая доступ к много-пространственным целям, таким как встроенное ПО (#84, закрывает #65)

  • Необязательный параметр program + исправления схемы обязательных параметров — параметр program стал необязательным на каждом эндпоинте с разумным fallback на currentProgram, и исправлены несколько ошибок схемы обязательных/необязательных параметров, унаследованных каталогом (#92)

  • Инициировал #44 (инструменты для типов данных / перечислений) — проблема, которая мотивировала создание уровня принудительного применения перечислений и структур в v5.0

  • Команда Ghidra — За невероятную платформу обратной разработки

  • Model Context Protocol — За стандартизированную платформу интеграции AI

  • Участники — За тестирование, отзывы и улучшения


🔗 Связанные проекты

  • re-universe — платформа Ghidra BSim PostgreSQL для крупномасштабного анализа схожести бинарных файлов. Отлично сочетается с GhidraMCP для AI-управляемых рабочих процессов обратной разработки.
  • cheat-engine-server-python — MCP-сервер для динамического анализа памяти и отладки.

Готов к развертыванию в производственной среде с надёжностью корпоративного уровня и всесторонними возможностями анализа бинарных файлов.

Скачать инструмент
УровеньПоведениеПример
Авто-исправлениеПрименяется молчаПоле count типа uint32 → автоматически получает префикс dwCount при сохранении
ПредупреждениеИзменение проходит, возвращается предупреждениеprocessData → «имя должно быть в PascalCase с глаголом: ProcessData»
ОтклонениеИзменение блокируется с объяснениемИзменение undefined → undefined → «отклонено бездействие, тип не изменился»
ФлагПо умолчаниюОписание
--transportstdiostdio (инструменты ИИ), streamable-http (веб-клиенты), sse (устаревший)
--mcp-host127.0.0.1Хост привязки для HTTP-транспортов
--mcp-port—Порт для HTTP-транспортов
--lazyвыкл.Загружать только группы инструментов по умолчанию при подключении. Более быстрый запуск, но клиенты MCP, не поддерживающие tools/list_changed, увидят неполный список инструментов. Не рекомендуется для Claude Code.
--no-lazy(по умолч.)Загружать все группы инструментов сразу при подключении. Требуется для большинства ИИ-клиентов.
--default-groupslisting,function,programГруппы, разделённые запятыми, загружаемые при подключении, если установлен --lazy.
ФлагПо умолчаниюОписание
--port8099Порт HTTP-сервера
--host127.0.0.1Адрес привязки (0.0.0.0 для доступа по локальной сети)
--exports-dir—Путь к каталогу dll_exports/ для разрешения порядковых номеров в имена
--log-levelINFODEBUG, 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_name
  • server_status - Проверить статус подключения головного сервера
  • list_namespaces - Перечислить все пространства имён
  • list_scripts - Перечислить доступные скрипты Ghidra
  • list_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 - Создать typedef
  • create_union - Создать объединение
  • delete_data_type - Удалить тип данных
  • embed_struct_field - Заменить поле структуры встроенным типом структуры по значению (напр.
  • get_data_type_size - Получить размер типа данных в байтах
  • get_type_size - Получить размер типа данных и информацию
  • import_data_types - Импортировать типы данных из GDT
  • list_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 - Перечислить все окна запущенных инструментов Ghidra
  • server_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.jarFeatures/Base/lib/Основная функциональность Ghidra
    Decompiler.jarFeatures/Decompiler/lib/Декомпилятор
    PDB.jarFeatures/PDB/lib/Поддержка символов Microsoft PDB
    FunctionID.jarFeatures/FunctionID/lib/Идентификация функций
    SoftwareModeling.jarFramework/SoftwareModeling/lib/API модели программы
    Project.jarFramework/Project/lib/Управление проектами
    Docking.jarFramework/Docking/lib/Фреймворк стыковки UI
    Generic.jarFramework/Generic/lib/Универсальные утилиты
    Utility.jarFramework/Utility/lib/Основные утилиты
    Gui.jarFramework/Gui/lib/Компоненты GUI
    FileSystem.jarFramework/FileSystem/lib/Поддержка файловой системы
    Graph.jarFramework/Graph/lib/Анализ графов/графа вызовов
    DB.jarFramework/DB/lib/Операции с базой данных
    Emulation.jarFramework/Emulation/lib/Эмуляция P-code
    ЭндпоинтМетодОписание
    /load_programPOSTЗагрузить бинарный файл для анализа
    /run_analysisPOSTЗапустить автоматический анализ Ghidra
    /list_functionsGETВывести все обнаруженные функции
    /list_exportsGETВывести экспортированные символы
    /list_importsGETВывести импортированные символы
    /decompile_functionGETДекомпилировать функцию в код C
    /create_functionPOSTСоздать функцию по адресу
    /get_metadataGETПолучить метаданные программы
    /create_projectPOSTСоздать проект Ghidra
    /list_analyzersGETВывести доступные анализаторы
    /server/statusGETПроверить соединение с Ghidra Server
    МетрикаЗначение
    Версия5.17.0
    Инструменты MCP249 полностью реализовано
    Эндпоинты GUI196 (GhidraMCPPlugin)
    Headless-эндпоинты195 (GhidraMCPHeadlessServer)
    Компиляция✅ 100% успешно
    Эффективность пакетной обработкиСнижение количества вызовов API на 93%
    AI-процессы7 проверенных рабочих процессов документирования
    Скрипты GhidraВключены скрипты автоматизации
    ДокументацияВсеобъемлющая с AI-подсказками