Skip to main content
Glama

GhidraLens

Ghidra, отображаемый внутри вашего AI-клиента. Щёлкните по символу, чтобы переименовать его. Щёлкните по вызову, чтобы перейти по нему.

MCP Apps Ghidra 11.3+ Local models MIT

Вид декомпилятора

Все Ghidra MCP-серверы до сих пор возвращают текст. Модель может его прочитать; вы не можете по нему перемещаться. GhidraLens возвращает тот же анализ в виде интерактивного представления — построенного на MCP Apps (io.modelcontextprotocol/ui), расширении, которое позволяет серверу отправлять настоящий HTML в разговор.

Вы и модель смотрите на одну и ту же работающую программу. Переименуйте переменную, щёлкнув по ней, и при следующей декомпиляции модель увидит новое имя.

Это настоящий скриншот: where.exe, декомпилированный Ghidra; каждый идентификатор несёт адрес, из которого он пришёл.


Что вы получаете

Представление

Что оно делает

Декомпилятор

C-вывод Ghidra в виде живого потока токенов — кажый идентфкатор несут своё адрес и своё тип. Щёлкните по локальной переменной, чтобы переименовать её, щёлкните по вызову, чтобы перейти по нему. Вызывающие и выззываемые фукции, а так же переменные — на боковой панели.

Браузер функций

Каждая функция в бинарном файле, фильтруемая и сортируемая по адресу, имени, размеру или количеству вызывающих. Щёлкните по строке, чтобы декомпилировать её.

Граф вызовов

Вызывающие слева, вызываемые справа, функция, о которой вы спрашивали, в центре. Щёлкните по любому узлу, чтобы сделать его центром.

Браузер функций

Браузер функций

Граф вызовов

Граф вызовов

Всего десять инструментов. Три открывают представления; остальные — это чтение и запись, включая два, которые модель никогда не видит, — они существуют только для того, чтобы щелчок в представлении мог их вызвать.

Related MCP server: GhidraMCP

Как это устроено

  MCP client  ──stdio──▶  server/  ──HTTP──▶  bridge/  ──JPype──▶  Ghidra (JVM)
  (Claude,                 TypeScript         PyGhidra            program stays
   Cursor, …)              MCP server         session             resident
       ▲
       │  ui:// HTML in a sandboxed iframe
       └──  ui/  three self-contained views

Мост намеренно является отдельным долгоживущим процессом. Автоанализ Ghidra — самый затратный шаг, и он выполняется один раз. Замеры на системной утилите Windows размером 64 КБ (198 функций):

Первое открытие с анализом

25 с

Повторное открытие того же бинарного файла

0.3 с

Декомпиляция одной функции размером 2 КБ

0.4 с

Граф вызовов на 87 узлов

< 0.1 с

Перезапустите MCP-сервер или клиент — и проанализированная программа всё ещё будет на месте.

Установка

Предварительные требования: Ghidra 11.3+, JDK 21+, Python 3.9–3.13 (не 3.14 — для JPype ещё нет wheel-сборки), Node 20+. См. bridge/setup.py.md — Python-часть капризна, и в этом файле разобраны все способы, которыми она может сломаться. GhidraLens сам найдёт JDK, если JAVA_HOME не задан; это покрывает обычный случай «Java установлена, но оболочка не перезапускалась».

git clone https://github.com/hellosverre/ghidralens
cd ghidralens
npm install
npm run build

Затем запустите мост для бинарного файла, который хотите изучить:

python bridge/serve.py --binary /path/to/target.exe

Он выведет токен. Вставьте его и путь к собранному серверу в конфигурацию вашего MCP-клиента:

{
  "mcpServers": {
    "ghidralens": {
      "command": "node",
      "args": ["/absolute/path/to/ghidralens/server/dist/index.js"],
      "env": {
        "GHIDRALENS_BRIDGE_URL": "http://127.0.0.1:8799",
        "GHIDRALENS_TOKEN": "paste-the-printed-token-here"
      }
    }
  }
}

Затем попросите клиента: «декомпилируй функцию, которая обрабатывает проверку лицензии».

Инструменты

Инструмент

Виден

Рендерит

open_binary

модель

program_info

модель

decompile

модель + представление

Декомпилятор

list_functions

модель + представление

Браузер фукций

call_grah

модель + представление

Граф вызовов

find_stings

модель

xrefs_to

модель + представление

rename_symbol

модель + представление

add_comment

только представление

save_program

модель

add_comment намеренно скрыт от модели. Видимость — это способ, которым MCP Apps отделяет «агент может это сделать» от «щёлчок может это сделать»; отсутствие инструментов записи в списке модели делает его коротким и не позволяет модели переименовывать вещи по собственной инициативе.

Переименования и коментарии живут в памяти, пока save_program не запишет их в проект Ghidra — после чего они появятся в графическом интерефейсе Ghidra, как и любые другие правки.

Разработка представлений без Ghidra

npm run dev:ui
# open http://localhost:5173/dev/harness.html

ui/dev/harness.ts — это настоящий хост MCP Apps: он запускает AppBridge из SDK для представления в iframe, так что рукопожатие ui/initialize, начальное ui/notifications/tool-result и каждый tools/call, вызываемый щелчком, проходят по настоящему postMessage JSON-RPC. Справа находятся трассировка сообщений и переключатель темы хоста, потому что представления должны хорошо выглядеть в обеих темах.

Два источника данных, переключаемых на панели инструментов:

  • fixtures — Ghidra не нужен, ничего устанавливать не требуется

  • live bridge — проксирует к запущенному мосту, что позволяет разрабатывать на реальной проанализированной программе

Прежде чем доверять чему-либо, используйте live. Fixtures аккуратны; реальный вывод — это функция на 400 строк с 56 локальными переменными и графом вызовов из 87 узлов, и именно здесь вёрстка действительно ломается.

Запуск на локальной модели

Реверс-инжиниринг — это как раз та работа, которую люди предпочли бы не отправлять размещённой модели, поэтому agent/ollama-agent.mjs — это небольшой MCP-хост, который вместо этого ставит GhidraLens за Ollama. Никаких API-ключей, ничего не покидает машину.

OLLAMA_MODEL=qwen3:14b node agent/ollama-agent.mjs "what does this binary do?"

Он учитывает _meta.ui.visibility, поэтому инструменты, доступные только приложению, остются скрытыми от модели — то же разделение, которое обеспечивает графический клиент. Модели ~9B достаточно, чтобы сориентироваться с помощью find_strings и list_functions; 14B заметно лучше читает декомпилярованный C.

Тесты

Набор

Нужен Ghidra

Покрывает

node server/smoke.mjs

нет

MCP-интерфейс: инструменты, ресурсы ui://, видимость инструментов, корректный отказ без моста

python bridge/test_serve.py

нет

Аутентификация мосста, отклонение CSRF, маршрутизация, проверка входных данных

python bridge/test_session.py

да

Каждый вызов Ghidra: анализ, кэширование, токены декомпилятора, импорт, переименования, запись

node server/live.mjs

да (мост запущен)

Вся цепочка и то, что кажый payload по форме соответствует ожиданиям представлений

Первые два — это то, что может запускать CI. test_session.py важен после изменений в bridge/session.py — это единственное, что доказывет корректность вызовов Ghidra API, и он поймал три реальных бага в день своего написания.

Безопасность

Мост привязыветься только к 127.0.0.1, требует в X-GhdirLens-Token токен, пересоздаваемый при кажом запуске, и отклоняет любой запрос с заголовком Origin или Referer — поэтому страница, открытая в вашем браузере, не сможет полуить доступ к вашем декомпилятору. У него нет многопользовательской модели, и он не преднозначен для публичного доступа; --host отказывет всему, кроме loopback.

Анализ бинарного файла не выпоняет его, но Ghidra с удоольствием откроет вредоносное ПО. Используйте ту же изоляцию, что и для любой другой работы по реверс-инжинирингу.

Лицензия

MIT.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
2Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to autonomously reverse engineer binaries using Ghidra's capabilities including decompilation, function analysis, automatic renaming, and BSim integration for function similarity matching.
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Bridges Ghidra's reverse engineering capabilities with AI tools through 179 specialized tools for automated binary analysis and documentation. It supports full read/write access for function decompilation, renaming, and cross-binary documentation transfer in both GUI and headless modes.
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Renders interactive Chart.js charts and dashboards inline in AI conversations.

  • Live browser debugging for AI assistants — DOM, console, network via MCP.

  • AI Agent with Architectural Memory. Impact analysis (free), tests and code from the graph (pro).

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hellosverre/ghidralens'

If you have feedback or need assistance with the MCP directory API, please join our Discord server