关于 IDA Pro MCP Server
IDA Pro MCP Server 让 AI 助手通过 MCP 操作 IDA Pro,用于逆向工程和二进制分析。它由 IDA 插件、TypeScript 客户端和 MCP 服务三部分组成,适合需要自动化分析二进制文件的安全研究人员。
主要功能
- 01在 IDA Pro 中执行 Python 脚本
- 02查询字符串、导入、导出和函数列表
- 03搜索立即数、文本与字节序列
- 04获取指定地址范围的反汇编结果
- 05插件默认仅监听本地地址
适用场景
- 01让 AI 助手辅助分析二进制样本
- 02批量检索二进制中的字符串或特定字节序列
- 03通过脚本自动化 IDA Pro 的分析流程
MCP 相关
MCP 服务将 IDA Pro 的功能以工具形式(如 run_ida_command、get_functions)提供给 MCP 客户端调用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
IDA Pro MCP 服务
一个模型上下文协议(MCP)服务,可让 AI 助手使用 IDA Pro 执行逆向工程和二进制分析任务。
概述
本项目为 AI 助手与 IDA Pro 搭建桥梁。IDA Pro 是一款广受欢迎的反汇编器和调试器,常用于软件逆向工程。项目由三个主要组件构成:
- IDA Pro 远程控制插件(
ida_remote_server.py):一个 IDA Pro 插件,可创建 HTTP 服务以远程控制 IDA Pro 功能。 - IDA 远程客户端(
idaremoteclient.ts):一个用于与 IDA Pro 远程控制服务交互的 TypeScript 客户端。 - MCP 服务(
index.ts):一个模型上下文协议服务,可向 AI 助手提供 IDA Pro 功能。
功能
- 让 AI 助手在 IDA Pro 中执行 Python 脚本
- 获取二进制文件信息:
- 字符串
- 导入项
- 导出项
- 函数
- 高级二进制分析功能:
- 搜索指令中的立即数
- 搜索二进制文件中的文本字符串
- 搜索特定字节序列
- 获取指定地址范围的反汇编代码
- 通过标准化接口自动执行 IDA Pro 操作
- 确保组件之间的通信安全
前置条件
- IDA Pro 8.3 或更高版本
- Node.js 18 或更高版本
- TypeScript
ida_remote_server.py 使用示例
curl -X POST -H "Content-Type: application/json" -d '{"script":"print(\"Script initialization...\")"}' http://127.0.0.1:9045/api/execute
{"success": true, "output": "Script initialization...\n"}
MCP 服务使用示例

安装
1. 安装 IDA Pro 远程控制插件
-
将
ida_remote_server.py复制到 IDA Pro 插件目录:- Windows:
%PROGRAMFILES%\IDA Pro\plugins - macOS:
/Applications/IDA Pro.app/Contents/MacOS/plugins - Linux:
/opt/idapro/plugins
- Windows:
-
启动 IDA Pro 并打开一个二进制文件。
-
插件将自动在
127.0.0.1:9045上启动 HTTP 服务。
2. 安装 MCP 服务
-
克隆此仓库:
git clone <repository-url> cd ida-server -
安装依赖:
npm install -
构建项目:
npm run build -
在 AI 助手的 MCP 设置文件中配置 MCP 服务:
{ "mcpServers": { "ida-pro": { "command": "node", "args": ["path/to/ida-server/dist/index.js"], "env": {} } } }
使用方法
安装并配置完成后,MCP 服务会向 AI 助手提供以下工具:
run_ida_command
执行 IDA Pro Python 脚本。
参数:
scriptPath(必需):要执行的脚本文件的绝对路径outputPath(可选):用于保存脚本输出的绝对路径
示例:
# Example IDA Pro script (save as /path/to/script.py)
import idautils
# Count functions
function_count = len(list(idautils.Functions()))
print(f"Binary has {function_count} functions")
# Get the first 5 function names
functions = list(idautils.Functions())[:5]
for func_ea in functions:
print(f"Function: {ida_name.get_ea_name(func_ea)} at {hex(func_ea)}")
# Return data
return_value = function_count
随后,AI 助手可以使用以下脚本:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>run_ida_command</tool_name>
<arguments>
{
"scriptPath": "/path/to/script.py"
}
</arguments>
</use_mcp_tool>
search_immediate_value
搜索二进制文件指令中的立即数。
参数:
value(必需):要搜索的值(数字或字符串)radix(可选):数字转换的基数(默认值:16)startAddress(可选):搜索起始地址endAddress(可选):搜索结束地址
示例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_immediate_value</tool_name>
<arguments>
{
"value": "42",
"radix": 10
}
</arguments>
</use_mcp_tool>
search_text
搜索二进制文件中的文本字符串。
参数:
text(必需):要搜索的文本caseSensitive(可选):搜索是否区分大小写(默认值:false)startAddress(可选):搜索起始地址endAddress(可选):搜索结束地址
示例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_text</tool_name>
<arguments>
{
"text": "password",
"caseSensitive": false
}
</arguments>
</use_mcp_tool>
search_byte_sequence
搜索二进制文件中的特定字节序列。
参数:
bytes(必需):要搜索的字节序列(例如,"90 90 90"表示三个 NOP)startAddress(可选):搜索起始地址endAddress(可选):搜索结束地址
示例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_byte_sequence</tool_name>
<arguments>
{
"bytes": "90 90 90"
}
</arguments>
</use_mcp_tool>
get_disassembly
获取指定地址范围的反汇编代码。
参数:
startAddress(必需):反汇编起始地址endAddress(可选):反汇编结束地址count(可选):要反汇编的指令数量
示例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_disassembly</tool_name>
<arguments>
{
"startAddress": "0x401000",
"count": 10
}
</arguments>
</use_mcp_tool>
get_functions
获取二进制文件中的函数列表。
参数:
- 无需参数
示例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_functions</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>
get_exports
获取二进制文件中的导出列表。
参数:
- 无需参数
示例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_exports</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>
get_strings
获取二进制文件中的字符串列表。
参数:
- 无需参数
示例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_strings</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>
IDA Pro 远程控制 API
IDA Pro 远程控制插件提供以下 HTTP 端点:
GET /api/info:获取插件信息GET /api/strings:获取二进制文件中的字符串GET /api/exports:获取二进制文件中的导出GET /api/imports:获取二进制文件中的导入GET /api/functions:获取函数列表GET /api/search/immediate:搜索指令中的立即数GET /api/search/text:搜索二进制文件中的文本GET /api/search/bytes:搜索字节序列GET /api/disassembly:获取指定地址范围的反汇编POST /api/execute:执行 Python 脚本(JSON/Form)POST /api/executebypath:从文件路径执行 Python 脚本POST /api/executebody:从原始请求体执行 Python 脚本
安全注意事项
出于安全考虑,IDA Pro 远程控制插件默认只监听 127.0.0.1(本地主机)。这可以防止远程访问你的 IDA Pro 实例。
如果需要允许远程访问,可以修改 ida_remote_server.py 中的 DEFAULT_HOST 变量,但请注意相关的安全影响。
开发
从源代码构建
npm run build
运行测试
npm test
许可证
本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。
作者
Florian Drechsler(@fdrechsler)[email protected]
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。