IDA无头MCP服务器
通过模型上下文协议进行无头IDA Pro二进制分析。Go在Python workers处理IDA操作时协调多会话并发。
建筑
┌─────────────────┐
│ MCP Client │ Claude Desktop, Claude Code, CLI
│ (HTTP/SSE) │
└────────┬────────┘
│ http://localhost:17300/
▼
┌─────────────────┐
│ Go Server │ Session registry, worker manager, watchdog
│ (MCP Tools) │
└────────┬────────┘
│ Connect RPC over Unix socket
▼
┌─────────────────┐
│ Python Worker │ IDA + idalib (one per session)
│ (per session) │
└─────────────────┘主要特点:
- 通过进程隔离实现多会话并发
- 52个用于二元分析的MCP工具
- 自动会话超时(默认4小时,可配置)
- 带可配置限制的分页结果(默认值1000)
- Il2CppDumper Unity游戏的元数据导入
- 不颤动 Flutter/Dart应用程序的元数据导入
先决条件
- IDA Pro 9.0+或IDA Essential 9.2+
- idalib:安装并激活:
./scripts/setup_idalib.sh看 IDA作为图书馆文档.
- 转到1.21+ 使用协议工具:
make install-tools- Python 3.10+ 有依赖关系:
pip3 install -r python/requirements.txt- 可选: Il2CppDumper 用于Unity游戏分析
- 可选: 不颤动 用于Flutter/Dart应用程序分析
# Install unflutter (provides flutter_meta.json for import_flutter)
git clone https://github.com/zboralski/unflutter.git
cd unflutter && make install安装
git clone
cd ida-headless-mcp
make setup这将运行idalib安装程序,安装Python依赖项,并构建服务器。
对于手动设置或故障排除:
./scripts/setup_idalib.sh # Setup idalib (requires IDA Pro/Essential 9.x)
make install-python # Install Python dependencies
make build # Build Go server用法
启动服务器
./bin/ida-mcp-server服务器开始在端口17300上运行(可通过配置 config.json、环境变量,或 --port),暴露两种传输方式:
- 流式HTTP(推荐):
http://localhost:17300/ - SSE兼容性端点:
http://localhost:17300/sse
配置Claude桌面版
编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"ida-headless": {
"url": "http://127.0.0.1:17300/",
"type": "http"
}
}
}编辑后重新启动Claude Desktop。
配置Claude代码
复制 .claude/settings.json 到 ~/.claude/settings.json 授予对所有IDA MCP工具的访问权限。
基本工作流程
1. open_binary(path="/path/to/binary.so")
→ {"session_id": "abc123", "has_decompiler": true}
2. run_auto_analysis(session_id="abc123")
→ {"completed": true}
3. get_entry_point(session_id="abc123")
→ {"address": 4198400}
4. get_decompiled_func(session_id="abc123", address=4198400)
→ {pseudocode...}
5. get_functions(session_id="abc123")
→ {"functions": [...], "count": 1523}
6. close_binary(session_id="abc123")
→ {"success": true}颤振/飞镖导入
1. Run unflutter on the target: unflutter meta libapp.so
2. open_binary(path="libapp.so")
3. import_flutter(session_id="...", meta_json_path="flutter_meta.json")
→ {"functions_created": 9926, "structs_created": 2090,
"signatures_applied": 9926, "comments_set": 34172}
4. run_auto_analysis(session_id="...")这 import_flutter 该工具从unflutter读取结构化JSON元数据。它创建Dart类结构、具有类型化签名的函数定义,并在一次传递中注释THR/PP/string引用注释。
使用 tools/list 通过MCP查看所有可用工具。
配置
命令行标志:
./bin/ida-mcp-server \
--port 17300 \
--max-sessions 10 \
--session-timeout 4h \
--worker python/worker/server.py \
--debug环境变量(被CLI标志覆盖):
IDA_MCP_PORT=17300
IDA_MCP_SESSION_TIMEOUT_MIN=240
IDA_MCP_MAX_SESSIONS=10
IDA_MCP_WORKER=/custom/worker.py
IDA_MCP_DEBUG=1发展
构建
make build # Build Go server
make proto # Regenerate protobuf
make test # Run tests + consistency checks
make restart # Kill, rebuild, restart server
make clean # Clean build artifacts测试
安装测试依赖项:
pip3 install -r requirements-test.txt运行测试:
make test # All tests
pytest tests/ -v # Python tests only
go test ./... # Go tests only交互式测试
使用MCP检查器:
make run # Start server
make inspector # Launch inspector at http://localhost:5173项目结构
ida-headless-mcp/
├── cmd/ida-mcp-server/ # Go MCP server entry point
├── internal/
│ ├── server/ # MCP tool handlers
│ ├── session/ # Session registry
│ └── worker/ # Worker process manager
├── proto/ # Protobuf definitions
├── python/worker/ # Python worker (idalib wrapper)
├── contrib/il2cpp/ # Il2CppDumper helpers (MIT)
└── tests/ # Test suites添加新工具
- 将RPC添加到
proto/ida/worker/v1/ida_service.proto - 重新生成:
make proto - 实施中
python/worker/ida_wrapper.py - 在中添加处理程序
python/worker/connect_server.py - 在中注册MCP工具
internal/server/server.go
会话生命周期
- 客户电话
open_binary(path) - Go在注册表中创建会话(UUID)
- Go生成Python worker子进程
- Worker在以下位置创建Unix套接字
/tmp/ida-worker-{id}.sock - Worker使用idalib打开IDA数据库
- Go通过套接字创建连接RPC客户端
- 后续工具通过Connect向worker调用代理
- 监视器监视空闲时间(默认值:4小时)
- 超时或
close_binary:保存数据库、杀死worker、清理 - 会话元数据保存在
/sessions用于服务器重启后的自动恢复
故障排除
工人无法启动:
python3 -c "import idapro; print('OK')"如果失败,请运行 ./scripts/setup_idalib.sh
套接字超时: 检查Python worker日志。Worker可能在初始化过程中崩溃。
端口已在使用中:
lsof -ti:17300 | xargs kill
# or use a different port
./bin/ida-mcp-server --port 17301未找到会话: 会话可能已超时。使用 list_sessions 以检查活动会话。
许可证
麻省理工学院
相关项目
MCP服务器:
元数据转储程序:
- 性能/Il2CppDumper (使用人
import_il2cpp) - zboralski/unflutter (使用人
import_flutter)
