M

MCP服务器IDA Pro版

@fdrechsler/mcp-server-idapro
1 Stars 617 次浏览 fdrechsler 更新于 2026-08-23

一种模型上下文协议服务器,可使AI助手与IDA Pro交互,以执行反向工程和二进制分析任务。

MCP 服务配置

复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用

{
  "mcpServers": {
    "ida-pro": {
      "args": [
        "path/to/ida-server/dist/index.js"
      ],
      "command": "node",
      "env": {}
    }
  }
}

服务介绍

IDA Pro MCP 服务器

一个模型上下文协议(MCP)服务器,使AI助手能够与IDA Pro进行交互,以执行反向工程和二进制分析任务。

概述

该项目为AI助手与IDA Pro之间搭建了一座桥梁。IDA Pro是一个流行的用于软件逆向工程的反汇编器和调试器。它由三个主要组件组成:

  1. IDA Pro 远程控制插件 (ida_remote_server.py):一个IDA Pro插件,创建了一个HTTP服务器来远程控制IDA Pro的功能。
  2. IDA 远程客户端 (idaremoteclient.ts):一个TypeScript客户端,用于与IDA Pro远程控制服务器交互。
  3. MCP 服务器 (index.ts):一个模型上下文协议服务器,将IDA Pro功能暴露给AI助手。

功能

  • 从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 服务器示例用法

Roo 输出

安装

1. 安装IDA Pro远程控制插件

  1. ida_remote_server.py 复制到您的IDA Pro插件目录:

    • Windows: %PROGRAMFILES%\IDA Pro\plugins
    • macOS: /Applications/IDA Pro.app/Contents/MacOS/plugins
    • Linux: /opt/idapro/plugins
  2. 启动IDA Pro并打开一个二进制文件。

  3. 插件将自动在 127.0.0.1:9045 上启动一个HTTP服务器。

2. 安装MCP服务器

  1. 克隆此仓库:

    git clone <repository-url>
    cd ida-server
    
  2. 安装依赖项:

    npm install
    
  3. 构建项目:

    npm run build
    
  4. 在您的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) fd@fdrechsler.com

相关 MCP 服务