【免费下载链接】GhidrAssistMCP
An native MCP server extension for Ghidra
GhidrAssistMCP 是一款 Ghidra 的原生 MCP(Model Context Protocol)服务端扩展,它让 AI 助手能够直接调用 Ghidra 的反向工程能力,内置 49 个分析工具与 7 个预设分析提示词。本文将带你用五分钟上手trace_data_flow数据流分析提示词,自动追踪变量在函数中的来源、变换与去向,让 AI 帮你完成以往需要逐行手工分析的工作。
一、GhidrAssistMCP 是什么?
简单来说,GhidrAssistMCP 在 Ghidra 内部启动了一个标准 MCP Server,AI 客户端通过 HTTP 连接进来后,就可以像"操作 Ghidra"一样执行各种动作:
- 49 个内置工具:反编译、函数检索、交叉引用、结构体管理、批量重命名等
- 7 个 MCP Prompts:
trace_data_flow、identify_vulnerability、reverse_engineer_struct等常见逆向任务模板 - 双 HTTP 传输:同时支持 SSE 与 Streamable HTTP,兼容主流 MCP 客户端
- 多程序 / 多窗口支持:单服务器共享所有 CodeBrowser 窗口,自动感知当前聚焦的二进制
官方文档目录位于 src/main/help/help/topics/ghidramcp/help.html,完整工具清单可参考 README.md。
二、前置准备:安装并启动服务 🛠️
开始前请确认你已具备:
- Ghidra 11.4 或更高版本(已测试 Ghidra 12.1)
- 一个 MCP 客户端(例如 GhidrAssist)
- 已安装 GhidrAssistMCP 扩展并启用插件
安装步骤(以二进制发布版为例):
- 在 Releases 页面下载最新的
.zip扩展包 - Ghidra 中执行File → Install Extensions → Add Extension,选择下载的 ZIP
- File → Configure → Configure Plugins,搜索 "GhidrAssistMCP" 并勾选启用
- 重启 Ghidra
如果想从源码构建,克隆仓库后使用 Gradle Wrapper 即可:
git clone https://gitcode.com/gh_mirrors/gh/GhidrAssistMCP cd GhidrAssistMCP export GHIDRA_INSTALL_DIR=/path/to/ghidra_12.1_PUBLIC ./gradlew installExtension三、第一步:打开控制台并启动 MCP Server
在 Ghidra 菜单栏选择Window → GhidrAssistMCP打开控制面板:
- Host:默认
localhost - Port:默认
8080 - 勾选Enable MCP Server并保存
如上图所示,Configuration 选项卡中可以查看所有 MCP 工具的名称与说明,并逐个启用/禁用,配置会跨会话持久保存。
四、第二步:MCP 客户端连接服务
服务启动后,MCP 客户端可连接到以下端点:
SSE: http://localhost:8080/sse SSE messages: http://localhost:8080/message Streamable HTTP: http://localhost:8080/mcp如果你的客户端连接不上,可以用curl http://localhost:8080/sse快速验证服务是否在监听。
五、第三步:调用 trace_data_flow 提示词
trace_data_flow是一个MCP Prompt(而不是工具),它的实现在 TraceDataFlowPrompt.java,由 McpPromptRegistry.java 统一注册管理。它接受两个参数:
| 参数 | 必填 | 说明 |
|---|---|---|
function_name | ✅ | 要追踪的函数名称或地址(如main或0x00401000) |
variable | ❌ | 指定要重点追踪的变量或参数名 |
客户端调用方式如下(prompts/get请求):
{ "method": "prompts/get", "params": { "name": "trace_data_flow", "arguments": { "function_name": "main", "variable": "buf" } } }调用成功后,AI 客户端会收到一份自动生成的数据流分析上下文,其中包含:
- 目标函数的名称、地址与函数签名
- 输入参数列表(作为潜在数据源)
- 完整的反编译 C 代码(30 秒超时内的自动反编译结果)
- 被调用函数列表(作为潜在数据汇点)
接着 AI 会按照模板要求依次分析五个维度:
- 数据源(Data Sources):数据来自参数、全局变量、函数返回值还是内存读取
- 变换(Transformations):算术运算、类型转换、字符串操作、编码解码
- 数据汇点(Data Sinks):数据被写入哪个调用参数、内存位置或全局变量
- 污点分析(Taint Analysis):用户可控数据的传播路径与净化点
- 数据流图(Data Flow Graph):以变量/内存位置为节点、数据依赖为边的流图
如果你指定了variable,提示词还会附加一段针对该变量的专项追踪指令:定义位置、参与的操作、使用位置与最终去向。
六、第四步:在 Log 面板核对执行过程 🔍
执行过程中,切换到控制面板的Log选项卡,可以实时看到每次请求(REQ)与响应(RES)、位置变更、重命名结果等日志:
数据流分析过程中,如果 AI 客户端调用了get_code、xrefs等工具,这里都会同步记录,方便你核对它到底"看"了哪些函数。
七、实战技巧与常见问题 💡
- 函数名或地址都可以:
function_name同时支持名称精确匹配和十六进制地址两种写法 - 配合工具链使用:先用
get_functions或search_functions_by_name定位可疑函数,再交给trace_data_flow深挖 - 耗时操作走异步:反编译、结构分析等长耗时操作会转为异步任务,可用
get_task_status查询进度、list_tasks查看全部任务、cancel_task取消卡住的任务 - 多程序场景:同时打开多个二进制时,可用
list_binaries列出全部程序,并在调用中通过program_name指定目标 - 服务起不来:检查 8080 端口是否被占用、扩展插件是否已启用
- 无响应:确认 Log 面板中能看到
REQ/RES记录,并核对客户端连接的端点是否正确
八、相关源码导航
想深入理解数据流分析的实现,可以按以下路径阅读:
- 提示词实现:src/main/java/ghidrassistmcp/prompts/TraceDataFlowPrompt.java
- 提示词注册表:src/main/java/ghidrassistmcp/prompts/McpPromptRegistry.java
- 全部 7 个预设提示词:src/main/java/ghidrassistmcp/prompts/
- 异步任务管理:src/main/java/ghidrassistmcp/tasks/
- 无头模式启动脚本:ghidra_scripts/GAMCPStartServerScript.java
总结
GhidrAssistMCP 把 Ghidra 的强大逆向能力通过 MCP 协议开放给了 AI 助手,而trace_data_flow正是其中上手最快的数据流分析入口:启动服务、连接客户端、调用提示词,三步就能让 AI 帮你梳理出一条完整的"数据从哪来、怎么变、到哪去"的脉络。掌握它之后,建议继续尝试identify_vulnerability与reverse_engineer_struct,把 AI 逆向分析的威力发挥得更充分。
【免费下载链接】GhidrAssistMCP
An native MCP server extension for Ghidra
相关推荐
Cherry Markdown快速开始:五分钟上手教程
Cherry Markdown快速开始:五分钟上手教程 还在为寻找一款功能强大、易于使用的Markdown编辑器而烦恼吗?Cherry Markdown作为腾讯
前端富文本UI组件3分钟快速上手videocr:Python视频字幕提取终极指南
3分钟快速上手videocr:Python视频字幕提取终极指南 你是否曾经面对一段包含硬编码字幕的视频,却无法复制其中的文字内容?无论是想为外语视频制作双语字幕
图像处理视频处理重构移动平台Windows生态:Winlator如何突破Android上的x86应用运行壁垒
重构移动平台Windows生态:Winlator如何突破Android上的x86应用运行壁垒 你是否想过在Android设备上无缝运行经典的Windows应用程
虚拟化移动开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考