一个模型上下文协议(MCP)服务器,使AI助手能够与IDA Pro进行交互,用于逆向工程和二进制分析任务。
该项目提供了一个桥梁,连接AI助手和IDA Pro(一种用于逆向工程软件的流行反汇编器和调试器)。它由三个主要组件组成:
ida_remote_server.py
):一个IDA Pro插件,创建一个HTTP服务器以远程控制IDA Pro功能。idaremoteclient.ts
):一个TypeScript客户端,用于与IDA Pro远程控制服务器进行交互。index.ts
):一个模型上下文协议服务器,向AI助手暴露IDA Pro的功能。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"}

将 ida_remote_server.py
复制到您的IDA Pro插件目录:
%PROGRAMFILES%\IDA Pro\plugins
/Applications/IDA Pro.app/Contents/MacOS/plugins
/opt/idapro/plugins
启动IDA Pro并打开一个二进制文件。
插件将自动在 127.0.0.1:9045
上启动一个HTTP服务器。
克隆此仓库:
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助手提供以下工具:
执行一个IDA Pro Python脚本。
参数:
scriptPath
(必需):要执行的脚本文件的绝对路径outputPath
(可选):保存脚本输出的绝对路径示例:
# 示例 IDA Pro 脚本(保存为 /path/to/script.py)
import idautils
# 计算函数数量
function_count = len(list(idautils.Functions()))
print(f"Binary has {function_count} functions")
# 获取前5个函数名称
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_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>
在二进制指令中搜索立即数。
参数:
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>
在二进制文件中搜索文本字符串。
参数:
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>
在二进制文件中搜索特定的字节序列。
参数:
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>
获取地址范围内的反汇编代码。
参数:
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>
获取二进制文件中的函数列表。
参数:
示例:
<use_mcp_tool> <server_name>ida-pro</server_name> <tool_name>get_functions</tool_name> <arguments> {} </arguments> </use_mcp_tool>
获取二进制文件中的导出列表。
参数:
示例:
<use_mcp_tool> <server_name>ida-pro</server_name> <tool_name>get_exports</tool_name> <arguments> {} </arguments> </use_mcp_tool>
获取二进制文件中的字符串列表。
参数:
示例:
<use_mcp_tool> <server_name>ida-pro</server_name> <tool_name>get_strings</tool_name> <arguments> {} </arguments> </use_mcp_tool>
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) fd@fdrechsler.com