ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

GhidraMCP 原理与使用部署:把 MCP 接入逆向分析工作流

GhidraMCP 原理与使用部署:把 MCP 接入逆向分析工作流 1. GhidraMCP 到底解决了逆向分析里的哪个痛点GhidraMCP 是一个把 Ghidra 逆向能力通过 Model Context ProtocolMCP暴露给 AI 客户端的桥接方案。简单说它让你能在 Cursor、Claude Desktop、Cline 这类支持 MCP 的工具里用自然语言直接调用 Ghidra 的反编译、函数列表、符号重命名等能力不用再在 Ghidra 界面和编辑器之间来回切。适合谁做二进制安全分析、漏洞挖掘、SO 逆向的工程师尤其是已经在用 AI 辅助写代码、希望把逆向环节也接进同一套对话工作流的人。它的核心价值在于“协议转换”Ghidra 本身是个 Java 桌面工具AI 客户端不认识它MCP 是一套标准化的工具调用协议AI 客户端认识。GhidraMCP 就在中间架了一座桥——Ghidra 端跑一个 Java 插件开 HTTP 服务Python 端跑一个 MCP Server 把 MCP 工具调用翻译成 HTTP 请求转发给插件。整条链路是MCP 客户端 →stdio 或 SSE→ Python 桥接 →HTTP→ Ghidra 插件 → Ghidra API → 当前打开的程序。我试过在分析一个 strip 过的 arm64 SO 时用它在对话里直接问“列出所有函数”“反编译这个地址的函数”比手动在 Ghidra 里点来点去快很多。但要注意GhidraMCP 本身不做任何逆向逻辑它只是转发真正的分析还是 Ghidra 在做AI 只是帮你调用和解读结果。理解这一点后面部署和排障会顺很多。这一节先把原理和场景讲清楚下一节说前置准备和 TaoToken 在其中的位置。2. 部署前的前置准备与 TaoToken 接入位置在动手装 GhidraMCP 之前有几样东西要先备齐。第一是 Ghidra 本体本文以 12.0.4 为例路径可以自定装好能正常打开项目并分析即可。第二是 Python 3.10 以上桥接脚本依赖mcp和requests两个库。第三如果你要还原 SO 的导出符号系统里得有nm一般来自 binutils用来从 SO 里解析地址和符号名。这里要讲清楚 TaoToken 在整条链路里的位置。GhidraMCP 的桥接层是纯本地的它不依赖任何外部模型服务真正需要模型能力的是 MCP 客户端那一侧——也就是 Cursor、Claude Desktop、Cline 这些工具在调用工具、理解反编译结果、生成分析结论时背后要有一个模型 API。TaoToken 提供的就是这个模型 API 接入点兼容主流协议你可以把它配置到客户端里让 AI 在调用 GhidraMCP 工具时有稳定的模型后端。具体来说TaoToken 的 API 地址是https://taotoken.net/api官网是https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。你需要先在控制台创建一个 API Key然后在客户端的模型配置里填入 Base URL 和 Key。对于 Claude Code 这类工具配置方式略有不同后面会给出可复制的片段。有一点要提醒GhidraMCP 的 Python 桥接和 Ghidra 插件之间走的是本机 HTTP默认http://127.0.0.1:8080/这部分不经过任何外部服务纯本地。TaoToken 只负责模型侧两者职责分开排障时也容易定位是哪一段出了问题。前置条件清单Ghidra 已安装并能分析目标程序Python 3.10 且能pip install mcp requestsnm可用可选TaoToken API Key 已创建用于客户端模型接入。准备好这些就可以进入配置环节。3. 可复制的安装命令与 MCP 配置片段这一节给出能直接复制粘贴的命令和配置。先装 Ghidra 插件从 GhidraMCP 的 Releases 页面下载对应版本的 zip比如GhidraMCP-1-4.zip然后在 Ghidra 里走File → Install Extensions点选中该 zip重启 Ghidra。重启后到File → Configure → Developer里勾选启用GhidraMCPPlugin。端口默认 8080想改的话在Edit → Tool Options → GhidraMCP HTTP Server里调。接着部署 Python 桥接。把发布包里的bridge_mcp_ghidra.py放到某个目录比如Extensions/GhidraMCP-release-1-4/然后装依赖cd /path/to/GhidraMCP-release-1-4 pip install -r requirements.txt # 或者直接 pip install mcp requests本地先测一下桥接能不能连上 Ghidrapython3 bridge_mcp_ghidra.py --ghidra-server http://127.0.0.1:8080/没有报错就说明参数对了。注意作为 MCP 被客户端启动时它不会常驻前台这是正常的。然后是客户端配置。以 Cursor 为例全局配置编辑~/.cursor/mcp.json项目级配置放在项目根目录的.cursor/mcp.json。内容如下{ mcpServers: { ghidra: { command: python3, args: [ /绝对路径/bridge_mcp_ghidra.py, --ghidra-server, http://127.0.0.1:8080/ ] } } }这里command是本机 Python 解释器args是桥接脚本路径加--ghidra-server和 Ghidra HTTP 地址。如果 Ghidra 改了端口这里必须一致。保存后重启 Cursor就能在 MCP 面板里看到ghidra的工具了。如果你用的是 Cline 这类需要 SSE 传输的客户端桥接要这样启动python3 bridge_mcp_ghidra.py --transport sse --mcp-host 127.0.0.1 --mcp-port 8081 --ghidra-server http://127.0.0.1:8080/客户端连接http://127.0.0.1:8081/sse即可。模型侧接入 TaoToken以 Claude Code 的settings.json为例配置片段如下Base URL、Key、Model ID 三件套要写全{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的_TaoToken_API_Key, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }如果你用的是 Cline 的 MCP 配置同样要把 Base URL 指向https://taotoken.net/apiKey 填 TaoToken 控制台创建的 KeyModel ID 按你选的模型填。这三件套缺一不可尤其是 Model ID填错会直接报模型不存在。配置完成后Ghidra 端、桥接端、客户端、模型端四段就都齐了。下一节做一次端到端验证。4. 端到端验证从 HTTP 探活到 MCP 调用成功配置完别急着上复杂任务先做一次最小验证确认四段链路都通。第一步确认 Ghidra 端 HTTP 服务活着。打开任意项目并完成分析插件启用后用 curl 探一下curl http://127.0.0.1:8080/segments?offset0limit1返回 200 和一段 JSON说明 Ghidra 插件正常。如果连接被拒多半是插件没启用或没打开项目。第二步验证桥接能转发。直接跑桥接脚本看它能不能拿到 Ghidra 的数据python3 bridge_mcp_ghidra.py --ghidra-server http://127.0.0.1:8080/无报错即可。这一步不常驻只是确认参数和连通性。第三步在 Cursor 里验证 MCP 工具可见。重启 Cursor 后打开 MCP 面板应该能看到ghidra这个 server 和它暴露的工具列表比如list_methods、decompile_function、rename_function_by_address、list_segments等。如果看不到检查mcp.json路径和command/args是否正确然后重启。第四步做一次真实调用。在对话里让 AI 调用list_methods列出当前程序的函数或者指定一个地址调用decompile_function。能返回函数列表或反编译伪代码就说明端到端打通了。这一步同时也在验证模型侧——如果模型 API 没配好工具调用会失败或超时这时回头检查 TaoToken 的 Base URL、Key、Model ID 三件套。一个实测细节在还原 SO 导出符号时脚本会先通过GET /segments取首段起始地址作为基址再和nm -D得到的偏移相加得到 Ghidra 内的真实地址然后调rename_function_by_address写回。arm64-v8a 的 SO 基址常见是0x100000但不同程序不一样所以脚本自动读基址比手填靠谱。验证时可以先跑一个小 SO确认符号能正确写回界面。如果这一步成功了你就可以进入实际分析工作流打开目标 SO自动分析跑符号还原脚本然后在对话里反编译关键函数、做漏洞分析。下一节说常见报错怎么排。5. 常见报错排查401、local proxy failed、reading choices、OAuth部署和使用过程中报错基本集中在四类逐个说。第一类401 Unauthorized。这几乎都是模型侧 Key 的问题。检查 TaoToken 的 API Key 是否填对、是否过期、是否有多余空格。如果你用的是 Claude Code确认ANTHROPIC_API_KEY和ANTHROPIC_BASE_URL都指向 TaoTokenBase URL 是https://taotoken.net/api不要多加路径。401 也可能出现在 Ghidra 插件侧但插件默认不带鉴权所以优先查模型 Key。第二类local proxy failed或连接被拒。这通常是桥接和 Ghidra 之间的 HTTP 不通。先确认 Ghidra 插件已启用、项目已打开并分析、端口一致。用curl http://127.0.0.1:8080/segments?offset0limit1探活返回 200 说明 Ghidra 端没问题那问题就在桥接参数或客户端配置。检查mcp.json里的--ghidra-server地址和端口是否和插件一致。第三类reading choices或返回格式解析失败。这类报错多出现在模型返回内容不符合预期时比如模型 API 返回了非标准结构或者 Model ID 填错导致返回了错误信息被当成正常响应解析。检查 Model ID 是否是 TaoToken 支持的模型Base URL 是否完整。如果用的是 Cline 的 MCP确认 SSE 地址和端口对得上。第四类OAuth相关报错。部分客户端在接入远程模型服务时会走 OAuth 流程如果配置里混用了 OAuth 和 API Key 两种方式会冲突。用 TaoToken 的 API Key 方式时确保没有同时启用 OAuth 登录清掉冲突的配置项再重启客户端。还有一个高频现象函数名还原后 Ghidra 界面没变化。这基本是基址错了符号写到了错误地址。用脚本自动读基址或显式传--base 0x100000这类正确值。另外strip 过的 SO 只有.dynsym有符号能还原的导出符号数量有限比如约 110 个其余仍是FUN_xxx这是预期行为不是 bug需要 FLIRT 或带符号 SO 进一步处理。排障时按“Ghidra 端 → 桥接 → 客户端 → 模型端”的顺序逐段验证比一上来就改配置高效得多。模型侧的问题优先看 API Keys 和接入文档工具调用的问题看客户端 MCP 配置。6. 把 GhidraMCP 接进日常逆向工作流的建议跑通之后怎么把它用顺我的经验是分两条线一条是符号还原一条是漏洞分析。符号还原这条线先让 AI 检索代码日志、打印相关输出再结合它对函数能力的理解来还原结果会比直接让它猜准确得多。具体操作是在对话里先让它调list_methods和list_segments摸清程序结构再针对关键地址调decompile_function拿到伪代码后让它推断函数用途并建议命名最后用rename_function_by_address写回。整个过程 AI 自己处理你只需要在 Ghidra 里确认结果。漏洞分析这条线两边Cursor 和 Claude各自生成过一份报告结果大差不差。差异在于执行方式Cursor 以 VS 插件形式调用全自己处理还原和反编译一气呵成Claude 以 token api 形式调用时有时会先生成一个调用 API 的 Python 脚本再去执行还原效果反而不好。这可能和客户端后台配置的 prompt 有关。所以如果你追求还原效果优先用能直接调 MCP 工具的客户端形态。长期做编码和 Agent 类任务的话可以考虑用 Coding Plan 把模型调用额度固定下来避免频繁换 Key。需要验证模型能力时用模型对话页面快速试接入和排障阶段API Keys 页面和接入文档是最常翻的两个地方。最后给一个实用技巧Ghidra 里的插件配置也就是安装扩展、启用插件、设端口那几步必须你手动做一次其余桥接和客户端配置都可以让 AI 帮你生成和检查。把这一步做完后面就是对话里的事了。
返回列表