背景
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
原作者写的很清楚了,这里简单补充一下
- 从Github上下载发布的zip包,解压后能得到两个文件:一个py文件、一个新的zip
- 运行 Ghidra
- 菜单选择
File
->Install Extensions
- 点击
+
按钮 - 选择第一步解压出来的zip
- 重启Ghidra
- 确保 菜单中
File
->Configure
->Developer
开启了GhidraMCPPlugin - 可选 : 选择一个文件,进入到分析页面后,可以在菜单更改默认服务端口
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
然后配置好你的模型服务就行了:
我这里用的是公司的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,直接提问即可:
个人认为效果非常不错,极大的降低了逆向分析成本。
如果你还想全自动分析、修补,可以再写一个FridaMCP(或者Github上找一个),用来自动调用frida、frida-gadget之类命令完成hook,或者用radare2命令直接改二进制~