ida多mcp
多实例IDA Pro MCP服务器,用于通过单个MCP端点同时对多个二进制文件进行逆向工程。通过idalib支持GUI实例和无头分析(仅限IDA Pro)。
为什么选择ida multi-mcp?
通过单个MCP连接并行分析多个二进制文件——dropper、payload、C2。每个IDA Pro实例在启动时自动注册;LLM客户端在不接触其配置的情况下看到每个实例。
快速开始
只需让你的AI代理安装它。 复制粘贴这些提示之一——它为您处理Python版本匹配、IDA插件放置和MCP客户端注册。
克劳德码/安培码:
按照以下说明安装和配置ida multi-mcp:https://raw.githubusercontent.com/MeroZemory/ida-multi-mcp/main/docs/installation.md
光标:
@Web获取https://raw.githubusercontent.com/MeroZemory/ida-multi-mcp/main/docs/installation.md并按照安装步骤进行操作。
安装后,在IDA Pro中打开二进制文件(实例自动注册),并询问您的LLM:
*“分解 main 在malware.exe(k7m2)中,并将其与dropper.dll(px3a)中的入口点进行比较”*更喜欢手动安装吗?看 手动安装 在......下面
运作原理
MCP Client (Claude, Cursor, etc.)
│ stdio (MCP Protocol)
▼
┌──────────────────────────────────────┐
│ ida-multi-mcp Server (Router) │
│ - Dynamic tool discovery │
│ - instance_id routing │
│ - Management + idalib lifecycle │
└───┬──────┬──────┬──────┬─────────────┘
│ │ │ │ HTTP JSON-RPC
▼ ▼ ▼ ▼
IDA #1 IDA #2 IDA #3 idalib #1
(GUI) (GUI) (GUI) (headless)特性
- 零配置实例发现 --每个IDA Pro实例在启动时自动注册
- 无头分析(IDA Pro) --通过以下方式打开没有GUI的二进制文件
idalib_open--每个会话都作为一个独立的子进程运行 - 港口无碰撞 --使用操作系统自动分配的端口(端口0)
- 动态工具发现 --所有80多种IDA工具均可自动使用
- 一球二分诊 —
survey_binary在一次调用中返回元数据、段、顶部字符串/函数、导入和调用图 - 交叉二元分析 --通过以下方式定位特定实例
instance_id参数 - 智能实例跟踪 --4个字符的ID(k7m2、px3a等),具有自动二进制变化检测功能
- IDA 8.3–9.3兼容 --内置版本兼容性垫片(
compat.py) - 基于文件的注册表 --跟踪所有活动实例(GUI和无头)
- 优雅的回退 --处理二进制更改、过时实例和崩溃
需求
- Python 3.11或更高版本
- IDA Pro 8.3+(推荐9.0)
手动安装
已在中使用了AI代理提示 快速开始?你可以跳过这一节。
选择您的平台:
macOS — requires matching IDA's Python version
重要提示: IDA Pro通常使用与系统默认版本不同的Python版本(例如,IDA使用Python 3.11,而macOS附带3.14)。您必须安装以下软件包 两者 您的终端Python和IDA的Python。
步骤1:检查IDA的Python版本
打开IDA Pro,然后在IDA控制台中运行:
Python> import sys; print(sys.version)注意版本(例如。, 3.11).
步骤2:安装
# 1. Install CLI tool via pipx (for terminal commands)
pipx install git+https://github.com/MeroZemory/ida-multi-mcp.git
# 2. Install package for IDA's Python (replace 3.11 with your IDA's version)
python3.11 -m pip install --user git+https://github.com/MeroZemory/ida-multi-mcp.git
# 3. Install IDA plugin + configure MCP clients
ida-multi-mcp --install
# 4. Configure Claude Code manually (recommended over --install for Claude Code)
claude mcp add ida-multi-mcp -s user -- ida-multi-mcp注:ida-multi-mcp --install使用注册MCP服务器python3 -m ida_multi_mcp,这可能表明macOS上的Python版本错误。对于Claude Code,请使用claude mcp add如上所示,以确保它直接使用pipx管理的CLI。
Windows
# 0. (Recommended) Clean previous install to avoid stale scripts/config
ida-multi-mcp --uninstall
python -m pip uninstall -y ida-multi-mcp
# 1. Install ida-multi-mcp
python -m pip install git+https://github.com/MeroZemory/ida-multi-mcp.git
# 2. Install IDA plugin + configure all MCP clients
ida-multi-mcp --install如果IDA使用的Python版本与默认版本不同,请使用py -3.12(替换为IDA的版本)而不是python. 如果您手动编辑%USERPROFILE%\\.codex\\config.toml,对Windows路径使用文字TOML引用(例如。,[projects.'\\?\\C:\\path\\to\\repo'],command = 'C:\\...\\python.exe').
Linux
# 1. Install ida-multi-mcp
pip install --user git+https://github.com/MeroZemory/ida-multi-mcp.git
# 2. Install IDA plugin + configure MCP clients
ida-multi-mcp --installAI代理参考
AI代理应该遵循的规范安装指南是 docs/installation.md。它涵盖了平台特定的包安装、IDA Python版本匹配、通过插件设置 ida-multi-mcp --install,以及验证。
支持的MCP客户端
适用于任何兼容MCP的客户端。 ida-multi-mcp --install 自动配置所有检测到的客户端(Claude Code、Claude Desktop、Cursor、Windsurf、VS Code、Zed等20+)。
Full tested client list (19)
| 客户端 | 类型 |
|---|---|
| 克劳德代码 | CLI |
| 克劳德桌面 | 桌面 |
| 光标 | IDE |
| VS代码(副本) | IDE |
| 风帆 | IDE |
| Zed | IDE |
| 增强代码 | IDE |
| 临床 | 扩展 |
| 基洛代码 | 扩展名 |
| 基罗 | IDE |
| LM工作室 | 桌面 |
| Opencode | 命令行界面 |
| Qodo Gen | 扩展 |
| Roo代码 | 扩展名 |
| 带来 | IDE |
| 翘曲 | 终端 |
| Amazon Q开发者命令行界面 | 命令行界面 |
| Copilot命令行界面 | 命令行界面 |
| Gemini命令行界面 | 命令行界面 |
手动MCP客户端配置
对于未自动检测到的客户端或查看原始配置JSON:
ida-multi-mcp --config卸载
macOS
# 1. Remove IDA plugin + MCP client configurations
ida-multi-mcp --uninstall
# 2. Remove packages
pipx uninstall ida-multi-mcp
python3.11 -m pip uninstall -y ida-multi-mcp # replace 3.11 with IDA's versionWindows
# 1. Remove IDA plugin + MCP client configurations
ida-multi-mcp --uninstall
# (optional) If IDA is installed in a custom location
ida-multi-mcp --uninstall --ida-dir "C:\Program Files\IDA Pro 9.0"
# 2. Remove the Python package
python -m pip uninstall -y ida-multi-mcp卸载后,完全重新启动IDA Pro和MCP客户端,以便拾取删除的配置。
用法
打开多个二进制文件(GUI模式)
- 打开IDA Pro并加载您的第一个二进制文件(例如。,
malware.exe)
- 插件自动加载(Plugin_FIX标志) - 实例自动注册为4节ID(例如。, k7m2)
- 用第二个二进制文件打开另一个IDA Pro实例(例如。,
dropper.dll)
- 另一个实例自动注册(例如。, px3a)
- 对更多二进制文件重复此操作
无头分析(仅限IDA Pro)
需要IDA Pro许可证。 IDA主页/免费不包括 idalib.没有GUI的开放二进制文件——每个会话都作为一个独立的子进程运行:
> Use idalib_open to analyze /path/to/malware.exe headlesslyLLM电话 idalib_open(input_path="/path/to/malware.exe"),它生成一个无头idalib进程,等待自动分析,并返回一个 instance_id从那时起,所有80多个IDA工具的工作方式都与GUI实例完全相同。
使用以下命令指定自定义Python idapro 已安装,请使用以下命令启动服务器:
ida-multi-mcp --idalib-python /path/to/python3.11查看已注册实例
ida-multi-mcp --list输出:
Registered IDA instances (3):
k7m2
Binary: malware.exe
Path: C:/samples/malware.exe
Arch: x86_64
Port: 49152
PID: 12345
px3a
Binary: dropper.dll
Path: C:/samples/dropper.dll
Arch: x86_64
Port: 49153
PID: 12346
9bf1
Binary: payload.exe
Path: C:/samples/payload.exe
Arch: x86
Port: 49154
PID: 12347在LLM中使用
连接后,所有80多个IDA工具都可用。 所有IDA工具调用都需要 这 instance_id 参数以避免跨代理争用。
分析单个实例:
Decompile the main function in malware.exe (k7m2)交叉二元分析:
Decompile main in malware.exe (k7m2) and compare it with the entry point in dropper.dll (px3a)管理工具
服务器提供内置管理工具:
list_instances()
列出所有已注册的实例及其元数据(二进制名称、路径、体系结构、端口、, 类型: gui 或 idalib).
refresh_tools()
从IDA实例中重新发现工具。如果您更新IDA插件,请使用此选项。
get_ached_output(cache_id、偏移量、大小)
从之前被截断的工具调用中检索缓存输出。
decompile_to_file(…)
分解函数并将结果直接保存到磁盘上的文件中。需要 instance_id.
idalib_open(输入路径、超时、不安全) *(仅限IDA Pro)*
在新的headless idalib会话中打开二进制文件。生成子进程,等待自动分析,在共享注册表中注册。
idalib_close(实例id) *(仅限IDA Pro)*
终止无头idalib会话并将其从注册表中删除。
idalib_list() *(仅限IDA Pro)*
列出所有托管的无头idalib会话。
idalib_status(实例id) *(仅限IDA Pro)*
特定idalib会话的运行状况/准备状态检查。
实例ID说明
实例ID由4个字符组成,以36个字符串(0-9,a-z)为基础,如下所示 k7m2, px3a, 9bf1.
为什么是4个字符?
- 简短易读
- 168万种组合(典型使用时无碰撞)
- 如果检测到碰撞,自动扩展到5个字符
它们是如何产生的?
- 基于:进程ID、端口和IDB文件路径
- 相同的二进制文件重新打开=相同的ID(确定性)
- 二进制替换/更改=新ID(自动)
更改二进制文件时会发生什么? 在IDA实例中打开其他二进制文件时:
- 旧实例到期(例如。,
k7m2→ 过期) - 新实例寄存器(例如。,
b12) - 如果LLM尝试使用旧ID,则会收到替换ID的有用错误
CLI命令
ida-multi-mcp
启动MCP服务器(stdio)。由MCP客户端使用。这是默认命令。
ida-multi-mcp
ida-multi-mcp --idalib-python /path/to/python3 # custom Python for headless sessionsida-multi-mcp --list
列出所有已注册的IDA实例。
ida-multi-mcp --listida-multi-mcp --install [--ida-dir DIR]
安装IDA插件并自动配置所有检测到的MCP客户端(Claude Code、Claude Desktop、Cursor、Windsurf、VS Code、Zed等20+)。
ida-multi-mcp --install
ida-multi-mcp --install --ida-dir "C:\Program Files\IDA Pro 9.0" # Windows custom pathida-multi-mcp --uninstall [--ida-dir DIR]
删除IDA插件,清理注册表,并删除MCP客户端配置。
ida-multi-mcp --uninstallida-multi-mcp --config
打印MCP客户端配置JSON以便于参考。
ida-multi-mcp --config建筑
实例注册表
地点:
- macOS/Linux:
~/.ida-mcp/instances.json - 窗户:
%USERPROFILE%\.ida-mcp\instances.json
每个注册实例包括:
- ID --4节实例标识符(k7m2、px3a等)
- 进程ID --IDA Pro实例的进程ID
- 主机 --始终127.0.0.1(本地主机)
- 端口 --动态分配的HTTP端口
- 二进制名称 --文件名(malware.exe、driver.dll等)
- 二进制路径 --二进制文件的完整路径
- 拱门 --架构(x86_64、x86、arm64等)
- 注册地址 --实例注册时的时间戳
- 最后的心跳 --上次心跳检查时间戳
IDA插件目录
- macOS/Linux:
~/.idapro/plugins/ - 窗户:
%APPDATA%\Hex-Rays\IDA Pro\plugins\
请求路由
- MCP客户端调用工具(例如。,
decompile)需要instance_id参数 - 服务器通过HTTP JSON-RPC路由到目标实例
- IDA实例处理请求
- 结果返回给客户端
健康监测
- 每个IDA实例每60秒发送一次心跳
- 停滞实例(2分钟以上没有心跳)会自动清理
- 服务器启动时,死进程将从注册表中删除
- 如果实例崩溃,后续请求将收到一条有用的错误消息
二进制变化检测
使用双策略检测:
初级(快速) --二进制文件更改时,IDA事件挂钩立即触发 回退(安全) --每次工具调用都会验证二进制文件没有更改,处理钩子故障
当检测到二进制变化时:
- 旧实例ID标记为已过期
- 新实例使用新ID注册
- LLM收到带有替换ID的有用消息
故障排除
"No IDA instances registered"
确保:
- IDA Pro正在加载二进制文件的情况下运行
- 检查IDA的插件列表(编辑→ 插件→ 扫描)以确认
ida-multi-mcp插件已加载 - 检查IDA控制台是否有错误消息
- 跑
ida-multi-mcp --list再次
"Instance 'k7m2' not found"
实例已崩溃或过期。运行:
ida-multi-mcp --list要查看可用实例,请使用有效的ID。
"Instance 'k7m2' expired. Replaced by 'px3a'"
您在该IDA实例中打开了另一个二进制文件。这是意料之中的。使用新的实例ID(px3a).
Plugin doesn't load in IDA / "No module named 'ida_multi_mcp'"
这通常意味着IDA的Python无法找到该包,原因是 Python版本不匹配.
- 检查IDA的Python版本——在IDA控制台中,运行:
import sys; print(sys.version)- 安装特定Python版本的包:
macOS:
# Replace 3.11 with IDA's actual Python version
python3.11 -m pip install --user git+https://github.com/MeroZemory/ida-multi-mcp.git窗户:
# Replace 3.12 with IDA's actual Python version
py -3.12 -m pip install git+https://github.com/MeroZemory/ida-multi-mcp.git- 确保IDA插件目录包含
ida_multi_mcp.py:
- macOS/Linux: ~/.idapro/plugins/ - 窗户: %APPDATA%\Hex-Rays\IDA Pro\plugins\
- 重新启动IDA Pro
MCP server fails to connect (macOS)
如果您的MCP客户端显示 Status: failed 对于ida multi-mcp,注册的命令可能指向错误的Python版本。
- 检查配置了什么命令(例如,在
.claude.json,.cursor/mcp.json)
- 如果它显示
python3 -m ida_multi_mcp,将其替换为pipx管理的CLI:
克劳德代码:
claude mcp remove ida-multi-mcp -s user
claude mcp add ida-multi-mcp -s user -- ida-multi-mcp其他客户: 编辑MCP配置JSON并更改:
{
"command": "ida-multi-mcp",
"args": []
}- 重新启动MCP客户端
Codex fails to start on Windows with TOML parse error
如果Codex打印出以下错误 invalid unquoted key 为了 %USERPROFILE%\.codex\config.toml,该配置包含无效的TOML语法的Windows路径。
在Windows路径中使用文字引号键/字符串:
[projects.'\\?\C:\Git\MeroZemory\tidy-up']
trust_level = "trusted"
[mcp_servers.ida-multi-mcp]
command = 'C:\Users\MeroZemory\AppData\Local\Programs\Python\Python311\python.exe'
args = ["-m", "ida_multi_mcp"]不要使用未报价的 \\?\... 项目表键,除非转义反斜杠,否则不要使用双引号Windows路径。
设计决策
| 决定 | 理由 |
|---|---|
| 端口0(自动分配) | 消除端口冲突,扩展到无限实例 |
| 4节36个ID | 简短、可读、1.68M组合,易于记忆 |
| 基于文件的注册表 | 简单、跨进程、可调试、无数据库依赖性 |
| 动态工具发现 | 面向未来,自动更新,无硬编码工具列表 |
| 双二进制变化检测 | IDA挂钩失败时的稳健回退 |
| 每个二进制的子进程(idalib) | 真正的并行性、崩溃隔离、无进程内数据库切换 |
| compat.py垫片 | IDA 8.3–9.3 API差异的单一来源 |
演出
以大型游戏客户端(736K函数,x86-64,IDA 9.3)为基准:
| 度量 | 值 |
|---|---|
| 工具总延迟(28个工具) | 32.0秒 |
| 总响应有效负载 | 373 KB |
| 预计代币成本 | ~93K代币 |
| 类别 | 延迟 | 令牌 |
|---|---|---|
分类(survey_binary) | 17.0秒 | ~77K |
查询(func_query, imports_query) | 7.5秒 | ~2.4K |
导航(list_funcs, find_*, xrefs_*) | 5.5秒 | ~8.5K |
分析(decompile, analyze_function) | 41毫秒 | ~3.7K |
修改(set_comments, append_comments) | 4毫秒 | ~125 |
基础设施开销:
- 注册表操作:\
