技术架构概览
1 | ┌─────────────────┐ stdio/MCP ┌──────────────────┐ HTTP/JSON-RPC ┌─────────────────┐ |
一、涉及的核心技术
1. MCP(Model Context Protocol)
MCP 是 Anthropic 提出的开放协议,用于让 AI 模型安全地调用外部工具。
核心概念:
- Host:AI 客户端(Claude Code)
- Server:提供工具能力的服务(ida-pro-mcp)
- Transport:通信方式,分两种:
stdio:通过标准输入/输出管道通信,Claude Code 启动 server.py 作为子进程HTTP/SSE:通过网络通信
握手流程(stdio 模式):
1 | Claude Code server.py |
为什么 60 秒超时: Claude Code 发送 initialize 后若 60 秒内没收到响应,即报 startup() initialize handshake timed out。最常见原因是 server.py 启动时 IDA Pro 未运行,导致进程异常或阻塞。
2. IDA Pro MCP 插件架构
ida-pro-mcp 分为两层:
层一:IDA 内部插件(ida_mcp.py)
运行在 IDA Pro 进程内部,使用 IDA SDK:
- 启动一个 HTTP 服务器,监听
localhost:13337 - 接收 JSON-RPC 请求,调用 IDA API(反编译、读取汇编、重命名等)
- 向
~/.idapro/mcp/instances/instance_13337.json写入实例注册文件
注册文件示例:
1 | { |
层二:MCP 代理(server.py)
独立 Python 进程,Claude Code 通过 stdio 与它通信:
- 启动时读取
~/.idapro/mcp/instances/自动发现 IDA 实例 - 将 Claude 的工具调用转换为 HTTP 请求转发给 IDA 插件
- 使用自研的
zeromcp库实现轻量级 MCP 协议(无需官方 SDK 依赖)
请求代理流程:
1 | Claude Code ──[stdio JSON-RPC]──► server.py ──[HTTP POST :13337]──► IDA 插件 ──[IDA SDK]──► 反编译结果 |
二、环境准备
系统要求
- macOS / Windows / Linux
- IDA Pro(支持 Python 插件)
- Python 3.10+(独立于 IDA 自带的 Python)
- VSCode + Claude Code 插件
安装 ida-pro-mcp
1 | pip install ida-pro-mcp |
三、IDA Pro 插件安装
将插件复制到 IDA 插件目录:
1 | # macOS |
安装成功后,IDA Pro 菜单会出现:Edit → Plugins → MCP
四、配置 Claude Code
方式一:命令行添加
1 | claude mcp add ida-pro-mcp \ |
方式二:直接编辑 ~/.claude.json
1 | { |
注意:
command填写完整的 Python 解释器路径,不要用python3,避免路径解析问题。
五、启动顺序(关键)
必须按以下顺序操作,否则会出现 60 秒握手超时:
1 | 1. 打开 IDA Pro |
验证插件是否启动:
IDA 插件启动后会在 ~/.idapro/mcp/instances/ 目录写入 JSON 文件,Claude Code 的 server.py 读取这个文件来发现 IDA 实例。
六、验证连接
在 Claude Code 中直接询问:
1 | 检查 MCP 服务器健康状态 |
Claude 会调用 server_health 工具,返回类似:
1 | { |
七、可用工具一览
连接成功后,Claude 可以调用以下 IDA 功能:
| 分类 | 工具 | 功能 |
|---|---|---|
| 反编译 | decompile |
将函数反编译为 C 伪代码 |
| 汇编 | disasm |
获取汇编指令 |
| 分析 | analyze_function |
分析函数结构 |
| 重命名 | rename |
重命名函数/变量 |
| 注释 | set_comments |
添加注释 |
| 交叉引用 | xrefs_to |
查找引用关系 |
| 数据流 | trace_data_flow |
追踪数据流向 |
| 类型 | set_type / declare_type |
设置/声明类型 |
| 搜索 | find / find_bytes |
搜索字符串/字节 |
| 导入表 | imports |
列出导入函数 |
八、常见问题
Q: 出现 startup() initialize handshake timed out after 60000ms
原因:Claude Code 启动时 IDA Pro 未运行,server.py 无法完成 MCP 握手。
解决:先打开 IDA Pro 并启动 MCP 插件,再重启 VSCode/Claude Code。
Q: server.py 找到多个 IDA 实例
现象:同时打开了多个 IDA Pro 窗口。
处理:server.py 自动选择第一个发现的实例,可通过 select_instance 工具切换。
Q: HexRays 反编译器不可用
原因:IDA Free 版不包含 Hex-Rays 反编译器,或 license 未授权。
现象:hexrays_ready: false,decompile 工具报错。
九、实际使用示例
1 | 用户:分析 sub_401000 函数,告诉我它的功能 |
总结
整个技术栈的核心思路是协议分层解耦:
- MCP 协议解耦了 AI 模型与工具实现,Claude 不需要知道 IDA 的任何细节
- stdio transport 让 server.py 作为无状态代理,简单可靠
- 实例注册文件解耦了 IDA 插件与 MCP 代理的生命周期,两者独立启动
- HTTP JSON-RPC 让 IDA 插件以标准方式暴露能力,与 MCP 层松耦合