IDA Pro MCP服务器
一种模型上下文协议(MCP)服务器,使AI助手能够与IDA Pro交互,以执行逆向工程和二进制分析任务。
概述
该项目在AI助手和IDA Pro之间架起了一座桥梁,IDA Pro是一种用于逆向工程软件的流行反汇编程序和调试器。它由三个主要部分组成:
- IDA Pro远程控制插件 (
ida_remote_server.py):创建HTTP服务器以远程控制IDA Pro功能的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插件目录:
- 窗户: %PROGRAMFILES%\IDA Pro\plugins - macOS: /Applications/IDA Pro.app/Contents/MacOS/plugins - Linux: /opt/idapro/plugins
- 启动IDA Pro并打开一个二进制文件。
- 该插件将自动启动HTTP服务器
127.0.0.1:9045.
2.安装MCP服务器
- 克隆此存储库:
git clone
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_命令
执行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助手可以使用此脚本:
ida-pro
run_ida_command
{
"scriptPath": "/path/to/script.py"
}
search_immediate_value
在二进制指令中搜索即时值。
参数:
value(必填):要搜索的值(数字或字符串)radix(可选):用于数字转换的基数(默认值:16)startAddress(可选):搜索起始地址endAddress(可选):搜索结束地址
例子:
ida-pro
search_immediate_value
{
"value": "42",
"radix": 10
}
搜索文本
在二进制文件中搜索文本字符串。
参数:
text(必填):要搜索的文本caseSensitive(可选):搜索是否区分大小写(默认值:false)startAddress(可选):搜索起始地址endAddress(可选):搜索结束地址
例子:
ida-pro
search_text
{
"text": "password",
"caseSensitive": false
}
search_byte_sequence
在二进制文件中搜索特定的字节序列。
参数:
bytes(必填):要搜索的字节序列(例如,“90 90 90”表示三个NOP)startAddress(可选):搜索起始地址endAddress(可选):搜索结束地址
例子:
ida-pro
search_byte_sequence
{
"bytes": "90 90 90"
}
get_disassembly
获取地址范围的反汇编。
参数:
startAddress(必填):拆卸开始地址endAddress(可选):拆卸结束地址count(可选):拆卸说明数量
例子:
ida-pro
get_disassembly
{
"startAddress": "0x401000",
"count": 10
}
get_functions
从二进制文件中获取函数列表。
参数:
- 无需
例子:
ida-pro
get_functions
{}
get_exports
从二进制文件获取导出列表。
参数:
- 无需
例子:
ida-pro
get_exports
{}
get_strings
从二进制文件中获取字符串列表。
参数:
- 无需
例子:
ida-pro
get_strings
{}
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 (localhost)出于安全原因。这可以防止远程访问IDA Pro实例。
如果需要允许远程访问,可以修改 DEFAULT_HOST 变量in ida_remote_server.py,但要注意安全方面的影响。
发展
从源头构建
npm run build运行测试
npm test许可证
该项目根据MIT许可证获得许可。请参阅 许可证 文件以获取详细信息。
作者
弗洛里安·德雷克斯勒(@fdrechsler)fd@fdrechsler.com
