ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

GhidrAssistMCP数据流分析教程:trace_data_flow五分钟上手

GhidrAssistMCP数据流分析教程:trace_data_flow五分钟上手

【免费下载链接】GhidrAssistMCP

An native MCP server extension for Ghidra

项目地址:https://gitcode.com/gh_mirrors/gh/GhidrAssistMCP
点击查看免费下载

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。

二、前置准备:安装并启动服务 🛠️

开始前请确认你已具备:

  1. Ghidra 11.4 或更高版本(已测试 Ghidra 12.1)
  2. 一个 MCP 客户端(例如 GhidrAssist)
  3. 已安装 GhidrAssistMCP 扩展并启用插件

安装步骤(以二进制发布版为例):

  1. 在 Releases 页面下载最新的.zip扩展包
  2. Ghidra 中执行File → Install Extensions → Add Extension,选择下载的 ZIP
  3. File → Configure → Configure Plugins,搜索 "GhidrAssistMCP" 并勾选启用
  4. 重启 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 会按照模板要求依次分析五个维度:

  1. 数据源(Data Sources):数据来自参数、全局变量、函数返回值还是内存读取
  2. 变换(Transformations):算术运算、类型转换、字符串操作、编码解码
  3. 数据汇点(Data Sinks):数据被写入哪个调用参数、内存位置或全局变量
  4. 污点分析(Taint Analysis):用户可控数据的传播路径与净化点
  5. 数据流图(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

项目地址:https://gitcode.com/gh_mirrors/gh/GhidrAssistMCP
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进