Skip to main content
Glama

GhidraLens

在你的 AI 客户端中渲染 Ghidra。点击符号即可重命名,点击调用即可跟踪。

MCP Apps Ghidra 11.3+ Local models MIT

The decompiler view

迄今为止,每一个 Ghidra MCP 服务器都只返回文本。模型可以读取文本,但你无法在其中导航。GhidraLens 以交互式视图的形式返回同样的分析结果——它基于 MCP Appsio.modelcontextprotocol/ui)构建,这个扩展让服务器可以把真正的 HTML 送进对话中。

你和模型正在查看同一个实时程序。点击变量进行重命名,模型下一次反编译时就会看到新名称。

这是一张真实的截图:where.exe,由 Ghidra 反编译,每个标识符都带有它来源的地址。


功能一览

视图

功能说明

反编译器

Ghidra 的 C 输出以实时令牌流的形式呈现——每个标识符都带有其地址和类型。点击局部变量可重命名,点击调用可跳转。调用者、被调用者和变量显示在侧边栏中。

函数浏览器

二进制文件中的每个函数,可按地址、名称、大小或调用者数量进行筛选和排序。点击一行即可反编译。

调用图

左侧是调用者,右侧是被调用者,你所询问的函数位于中间。点击任意节点即可重新居中。

函数浏览器

The function browser

调用图

The call graph

总共有十个工具。三个是打开的视图;其余的是查询和写入操作,其中有两个模型永远不会看到——它们的存在只是为了视图中的点击能够触发它们。

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 的自动分析是代价最高的步骤,而且它只发生一次。在一个 64 KB 的 Windows 系统实用程序(198 个函数)上测得:

首次打开(含分析)

25 秒

重新打开同一二进制文件

0.3 秒

反编译一个 2 KB 的函数

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 端比较挑剔,该文件涵盖了所有可能出错的情况。如果 JAVA_HOME 未设置,GhidraLens 会为你找到 JDK,这覆盖了常见的“Java 已安装,但 shell 尚未重启”的情况。

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_graph

模型 + 视图

调用图

find_strings

模型

xrefs_to

模型 + 视图

rename_symbol

模型 + 视图

add_comment

仅视图

save_program

模型

add_comment 是特意对模型隐藏的。可见性正是 MCP Apps 区分“代理可以做这件事”和“点击可以做这件事”的方式;把写入工具从模型的列表中剔除,既能让列表保持简短,也能防止模型自作主张地重命名内容。

重命名和注释一直保存在内存中,直到 save_program 将它们写入 Ghidra 项目——之后它们会像其他任何编辑一样出现在 Ghidra GUI 中。

在没有 Ghidra 的情况下开发视图

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

ui/dev/harness.ts 是一个真正的 MCP Apps 宿主——它在一个 iframe 中针对视图运行 SDK 的 AppBridge,因此 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_stringslist_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

(桥接器运行中)

完整链路,以及每个负载都与视图索引所依赖的结构匹配

前两个是 CI 可以运行的。test_session.py 是在修改 bridge/session.py 之后最重要的那个——它是唯一能证明 Ghidra API 调用正确性的测试,而且在编写当天就捕获了三个真实 bug。

安全

桥接器仅绑定 127.0.0.1,要求每次运行提供 X-GhidraLens-Token 令牌,并拒绝任何带有 OriginReferer 头的请求——因此浏览器中打开的网页无法访问你的反编译器。它没有多用户模式,也不打算对外暴露;--host 只接受回环地址。

分析二进制文件并不会执行它,但 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