nightwing-us/mcpyida
GitHub: nightwing-us/mcpyida
MCPyIDA 是一个 MCP 服务器,将 IDA Pro 的逆向分析能力暴露给 LLM 客户端,使大语言模型能够直接驱动二进制反编译、交叉引用、类型恢复和二进制修补等逆向工程操作。
Stars: 4 | Forks: 0
# MCPyIDA
一个将 [IDA Pro](https://hex-rays.com/ida-pro/) 的逆向工程能力提供给 LLM 客户端的 MCP (Model Context Protocol) 服务器。
MCPyIDA 通过 MCP 暴露二进制分析能力:反编译、反汇编、符号查找、交叉引用、类型检查、结构体恢复、二进制修补以及可脚本化分析。
## 前置条件
- **IDA Pro** 9.x 或更高版本,附带 idalib(已使用 IDA Pro 9.2+ 测试;
[下载](https://hex-rays.com/ida-pro/))
- **Python** 3.10–3.12
## 安装说明
### 1. 创建虚拟环境(推荐)
```
python3 -m venv idavenv
source idavenv/bin/activate
```
### 2. 安装 MCPyIDA
```
pip install mcpyida
```
### 3. 将 MCPyIDA 注册为 IDA 插件
```
mcpyida_install
```
### 4. 配置 IDA 以使用你的虚拟环境
将 IDA 的 IDAPython 指向同一个虚拟环境。具体步骤取决于你的 IDA Pro 版本和操作系统;有关配置 IDAPython 的 Python 解释器的详细信息,请参阅 [IDA Pro 文档](https://hex-rays.com/products/ida/support/idadoc/)。
## 快速开始
### GUI 模式(交互式运行 IDA Pro)
1. 启动 IDA Pro 并打开一个二进制文件。
2. 转到 **Edit → Plugins → MCPyIDA**(或插件添加的 MCP 菜单)。
3. 启动 MCP 服务器。
4. 服务器 URL 将显示在输出窗口中,例如:
`http://127.0.0.1:6050/sse/`
### Headless 模式
在没有 IDA GUI 的情况下启动 MCP 服务器(需要 idalib):
```
export IDADIR=/path/to/idapro
mcpyida-headless --binary /path/to/firmware.elf
```
服务器会向 stdout 打印一个 JSON 就绪信号:
```
{"status": "ready", "host": "127.0.0.1", "port": 6050, "binary": "/path/to/firmware.elf"}
```
### 连接 MCP 客户端
将任何兼容 MCP 的客户端(Claude Desktop、VS Code MCP 扩展等)指向正在运行的服务器:
```
{
"mcpServers": {
"ida": {
"type": "streamable-http",
"url": "http://127.0.0.1:6050/mcp"
}
}
}
```
## 暴露的功能
MCPyIDA 暴露了按类别组织的工具:
- **列表与上下文:** 列出入口、检查二进制元数据、解析函数
- **分析:** 反编译、反汇编、交叉引用、控制流图
- **类型:** 类型枚举和详细检查
- **修改:** 重命名符号、更新变量、设置注释、修补指令
- **脚本:** 带有回传至客户端的 RPC 回调的 Python 代码执行
- **搜索:** 二进制模式和指令序列匹配
## 故障排除
**运行 `mcpyida_install` 后 IDA 未加载插件**
确保你的 IDAPython 解释器指向安装了 `mcpyida` 的虚拟环境。`mcpyida_install` 命令会将插件加载器复制到 IDA 的插件目录中;加载器本身必须在运行时能够 `import mcpyida`。
**`mcpyida-headless` 因 idalib 错误立即退出**
将 `IDADIR` 设置为 IDA Pro 安装目录的根目录(即包含 `idalib.so` / `idalib.dll` 的目录)。检查路径是否正确,以及你的 IDA Pro 许可证是否有效且可访问。
**端口 6050 已被占用**
向 `mcpyida-headless` 传递 `--port `,或者在 GUI 模式下运行时在插件的设置面板中配置端口。
**MCP 客户端报告连接被拒绝**
确认服务器已成功启动(查找 JSON 就绪信号或检查 IDA 的输出窗口)。默认传输协议为 `http://127.0.0.1:6050/mcp` 上的 `streamable-http`;仅支持 SSE 的旧客户端可以连接到 `http://127.0.0.1:6050/sse/`。
## 开发说明
### 设置
```
git clone https://github.com/nightwing-us/mcpyida.git
cd mcpyida
pip install -e ".[dev]"
```
### 测试
单元测试(无需 IDA Pro):
```
pytest tests/unit/ -v --tb=short
```
集成和 e2e 测试需要 IDA Pro / idalib,并且将在具有可用 IDA Pro 许可证的 CI 环境中运行。
### 类型检查
```
mypy
```
### Linting
```
ruff check src tests
ruff format src tests
```
## 相关项目
MCPyIDA 和 MCPyGhidra 作为姐妹项目并行维护,旨在实现功能对等 —— MCPyIDA 针对 IDA Pro,而 MCPyGhidra 针对 Ghidra。
- [MCPyGhidra](https://github.com/nightwing-us/mcpyghidra) — 针对 Ghidra 的同等 MCP 服务器(免费、开源的逆向工程工具)
- [pyghidra-decaf](https://github.com/nightwing-us/pyghidra-decaf) — 原生 Python 的 Ghidra 插件开发框架(MCPyGhidra 的底层基础)
## 许可证
Apache-2.0 — 详情请参阅 [LICENSE](LICENSE)。
版权所有 © 2026 Nightwing Group, LLC。
标签:Amass, DLL 劫持, Findomain, IDA Pro, MCP, 二进制分析, 云安全运维, 云资产清单, 大语言模型, 安全规则引擎, 插件, 逆向工具, 逆向工程