背景

ChatGPT出来之后,就一直用AI帮我分析汇编代码,从逆向工具里复制过去,让AI帮我转换成通俗易懂的伪代码,确实方便了很多。

前两天分析一个C2后门的时候犯懒了,不想自己复制粘贴了,想让AI像Agent一样自己操作,于是搜了一下Ghidra相关的MCP库,发现还真有:

https://github.com/LaurieWired/GhidraMCP

体验了一下确实很好用,同时因为Ghidra是跨平台的,所以这个方案大家应该都能用,就简单写个文章宣传下。

提前准备

  • Ghidra
  • GhidraMCP
  • OpenAPI/Dify
  • Python>=3.10
  • Cherry Studio (或者类似支持MCP服务调用的软件)

使用方法

1. 配置Ghidra

原作者写的很清楚了,这里简单补充一下

  1. 从Github上下载发布的zip包,解压后能得到两个文件:一个py文件、一个新的zip
  2. 运行 Ghidra
  3. 菜单选择 File -> Install Extensions
  4. 点击 + 按钮
  5. 选择第一步解压出来的zip
  6. 重启Ghidra
  7. 确保 菜单中 File -> Configure -> Developer 开启了GhidraMCPPlugin
  8. 可选 : 选择一个文件,进入到分析页面后,可以在菜单更改默认服务端口 Edit -> Tool Options -> GhidraMCP HTTP Server

2. 运行MCP代理服务

做完上面操作之后,你的Ghidra应该已经启动了MCP服务,但如果需要让其他工具如Cheery Studio能正常调用,还需要运行一下转换层,也就是刚才第一步解压出来的py文件

这个py文件需要安装一个叫做 mcp[cli] 的库,该库需要python >= 3.10才能装,而博主是Mac电脑,内置的Python版本是3.9,升级或卸载会影响系统正常功能,在系统里新装一个高版本Python又不优雅,所以推荐大家直接用uv这个包管理工具:https://docs.astral.sh/uv/

然后使用uv run直接运行bridge_mcp_ghidra.py即可。

3. 配置LLM客户端

打开Cherry Studio(确保是新版),在设置中按照下图配置MCP Server

image.png

然后配置好你的模型服务就行了:

image.png

我这里用的是公司的Dify平台,由于Cherry Studio不支持直接调用Dify API,所以我写了个转换层,主要功能:

  • 完整支持 OpenAI API 格式转换为 Dify API
  • 支持流式输出(Streaming)
  • 智能动态延迟控制,提供流畅的输出体验
  • 支持多种会话记忆模式,包括零宽字符模式和history_message模式
  • 支持 OpenAI Function Call 和 MCP Server 功能
  • 支持多个模型配置
  • 支持Dify Agent应用,处理高级工具调用(如生成图片等)
  • 兼容标准的 OpenAI API 客户端
  • 自动获取 Dify 应用信息

开源发布在Github上了,大家按需自取:https://github.com/lzskyline/OpenDify

4. 开始使用

首先你要在Ghidra里正常打开一个要分析的文件,然后GhidraMCP Server才会真正的启动(如果你希望自动化完成这个步骤,可以去研究一下Ghidra的API,自己写一个MCP Server。Ghidra真的很open)

然后在Cherry Studio聊天页选中刚才添加的MCP Server,直接提问即可:

image.png

image.png

个人认为效果非常不错,极大的降低了逆向分析成本。

如果你还想全自动分析、修补,可以再写一个FridaMCP(或者Github上找一个),用来自动调用frida、frida-gadget之类命令完成hook,或者用radare2命令直接改二进制~

image.png

如果觉得我的文章对你有用,请随意赞赏