Skip to main content

MCP server for executing IDAPython scripts in IDA Pro with multi-instance support

Project description

IDA Script MCP

一个用于在 IDA Pro 中执行 IDAPython 脚本的 MCP (Model Context Protocol) 服务器。这使得 Claude 等 AI 助手能够直接在 IDA Pro 环境中运行 Python 代码。

功能特性

  • 在 IDA Pro 环境中执行 Python 代码或脚本文件
  • 完整访问所有 IDA API 模块(idaapi、idc、idautils 等)
  • 捕获 stdout/stderr 输出
  • 支持表达式返回值
  • 连接状态监控
  • 支持多个 IDA 实例同时运行(可同时分析多个二进制文件)

系统架构

单实例模式

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   AI 助手       │────▶│   MCP 服务器    │────▶│   IDA 插件      │
│   (Claude等)    │     │ (FastMCP/stdio) │     │ (HTTP 服务器)   │
└─────────────────┘     └─────────────────┘     └─────────────────┘
                                                      │
                                                      ▼
                                                ┌─────────────────┐
                                                │    IDA Pro      │
                                                │  (主线程执行)    │
                                                └─────────────────┘

多实例模式

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   AI 助手       │────▶│   MCP 服务器    │────▶│ IDA实例1:13338  │
│   (Claude等)    │     │ (自动发现实例)   │     │   crackme.exe   │
└─────────────────┘     └─────────────────┘     └─────────────────┘
                              │
                              │                  ┌─────────────────┐
                              └─────────────────▶│ IDA实例2:13339  │
                                                 │   malware.dll   │
                                                 └─────────────────┘

系统要求

  • IDA Pro 8.3+(不支持 IDA Free)
  • Python 3.11+
  • 操作系统:Windows / macOS / Linux

安装步骤

方法一:使用安装命令(推荐)

安装 Python 包后,使用 ida-script-mcp-install 命令:

# 1. 安装 Python 包
pip install ida-script-mcp

# 2. 安装 IDA 插件
ida-script-mcp-install install

# 3. 同时配置 MCP 客户端(可选)
ida-script-mcp-install install claude      # 配置 Claude Desktop
ida-script-mcp-install install claude,cursor  # 配置多个客户端

# 查看可用客户端
ida-script-mcp-install --list-clients

完整安装示例:

# 安装插件并配置 Claude
pip install ida-script-mcp
ida-script-mcp-install install claude

方法二:从源码安装

# 克隆仓库
git clone https://github.com/yourusername/ida-script-mcp.git
cd ida-script-mcp

# 安装 Python 包(开发模式)
pip install -e .

# 安装 IDA 插件
ida-script-mcp-install install

方法三:手动安装

如果不想安装 Python 包,可以手动复制插件:

# 将插件文件复制到 IDA 用户目录
# Windows: %APPDATA%\Hex-Rays\IDA Pro\plugins\
# macOS/Linux: ~/.idapro/plugins/

cp src/ida_script_mcp/ida_plugin.py ~/.idapro/plugins/ida_script_mcp.py

安装命令详解

ida-script-mcp-install

安装工具提供以下功能:

# 安装 IDA 插件
ida-script-mcp-install install

# 安装插件并配置 MCP 客户端
ida-script-mcp-install install claude
ida-script-mcp-install install claude,cursor,vscode

# 使用项目级配置(而不是全局)
ida-script-mcp-install install --project claude

# 卸载插件
ida-script-mcp-install uninstall

# 列出可用的 MCP 客户端
ida-script-mcp-install --list-clients

# 显示 MCP 配置示例
ida-script-mcp-install --config

支持的 MCP 客户端

客户端 配置文件位置
Claude claude_desktop_config.json
Cursor .cursor/mcp.json
Claude Code .claude.json
VS Code settings.json
Windsurf mcp_config.json

使用方法

启动 IDA 插件

  1. 打开 IDA Pro
  2. 加载一个二进制文件
  3. 进入 Edit → Plugins → IDA-Script-MCP(或按 Ctrl+Alt+S
  4. 插件将启动 HTTP 服务器,显示:
    [IDA-Script-MCP] Server started at http://127.0.0.1:13338
    [IDA-Script-MCP] Instance ID: 12345_crackme.exe
    [IDA-Script-MCP] Execute endpoint: POST http://127.0.0.1:13338/execute
    

启动 MCP 服务器

# 使用 stdio 传输方式(适用于 Claude Desktop 等)
ida-script-mcp

# 使用 HTTP 传输方式
ida-script-mcp --transport http --port 8765

# 指定 IDA 实例
ida-script-mcp --ida-instance "crackme.exe"

配置 Claude Desktop

安装命令会自动配置,也可以手动添加到配置文件:

Windows: %APPDATA%\Claude\claude_desktop_config.json

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "ida-script": {
      "command": "python",
      "args": ["-m", "ida_script_mcp.server"]
    }
  }
}

MCP 工具说明

list_ida_instances

列出所有正在运行的 IDA 实例。

返回值:

{
  "count": 2,
  "instances": {
    "12345_crackme.exe": {
      "pid": 12345,
      "port": 13338,
      "database": "crackme.exe",
      "database_path": "C:\\analysis\\crackme.exe"
    },
    "67890_malware.dll": {
      "pid": 67890,
      "port": 13339,
      "database": "malware.dll"
    }
  }
}

execute_idapython

在 IDA Pro 环境中执行 Python 代码或脚本文件。

参数:

参数 类型 必填 说明
code string 否* 要执行的 Python 代码
script_path string 否* Python 脚本文件路径
capture_output boolean 是否捕获输出(默认 true)
instance_id string 目标 IDA 实例 ID(多实例时使用)
port int 目标 IDA 实例端口(多实例时使用)

返回值:

{
  "result": "表达式返回值",
  "stdout": "标准输出",
  "stderr": "错误输出",
  "instance": "12345_crackme.exe",
  "port": 13338
}

示例:

# 在默认实例执行代码
code = "print(idaapi.get_root_filename())"

# 指定实例(通过数据库名模糊匹配)
execute_idapython(code="...", instance_id="crackme.exe")

# 指定实例(通过端口)
execute_idapython(code="...", port=13339)

check_ida_connection

检查所有 IDA Pro 实例的连接状态。

get_ida_database_info

获取指定 IDA 数据库的信息。


可用的 IDA 模块

执行代码时,以下模块自动在全局命名空间中可用:

模块 说明
idaapi IDA Pro 核心 API
idc IDA C 风格 API
idautils IDA 工具函数
ida_bytes 字节操作
ida_funcs 函数操作
ida_name 名称操作
ida_segment 段操作
ida_hexrays Hex-Rays 反编译器
ida_kernwin IDA 内核/窗口系统
ida_xref 交叉引用
ida_typeinf 类型信息

使用示例

列出所有函数

import idautils
import idc

for ea in idautils.Functions():
    name = idc.get_func_name(ea)
    print(f"{hex(ea)}: {name}")

反编译函数

import ida_hexrays
import ida_funcs
import idc

ea = idc.get_name_ea_simple("main")
func = ida_funcs.get_func(ea)
if func:
    cfunc = ida_hexrays.decompile(func)
    print(str(cfunc))

重命名函数

import idc

idc.set_name(0x401000, "my_function", idc.SN_NOWARN)

获取交叉引用

import idautils

for xref in idautils.XrefsTo(0x401000):
    print(f"从 {hex(xref.frm)} 引用到 {hex(xref.to)}")

多实例使用场景

场景:同时分析多个二进制文件

当你打开多个 IDA Pro 窗口分析不同的二进制文件时:

IDA 实例 1: crackme.exe  -> 端口 13338
IDA 实例 2: malware.dll  -> 端口 13339
IDA 实例 3: payload.bin  -> 端口 13340

MCP 服务器会自动发现并管理这些实例。


故障排除

问题:在 IDA 中找不到插件

解决方案:

  1. 确认插件文件 ida_script_mcp.py 在 IDA 的 plugins 目录中
  2. 检查 IDA 的 Python 版本是否为 3.11+
  3. 查看 IDA 输出窗口的错误信息

问题:连接被拒绝

解决方案:

  1. 确保 IDA Pro 正在运行且已加载数据库
  2. 确认插件已启动(Edit → Plugins → IDA-Script-MCP)
  3. 检查端口是否正确(默认:13338)

问题:找不到命令

解决方案:

# 确认包已安装
pip show ida-script-mcp

# 检查命令路径
which ida-script-mcp-install

安全注意事项

⚠️ 重要提示:

  • 此插件允许在 IDA Pro 中执行任意 Python 代码
  • 请仅与可信的 AI 助手一起使用
  • 插件默认绑定到 127.0.0.1(仅本地访问)
  • 不要在公网暴露 HTTP 端口

许可证

MIT License

贡献

欢迎贡献代码!请提交 Issue 或 Pull Request。


英文文档: 请参阅 README_EN.md

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ida_script_mcp-1.0.0.tar.gz (26.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ida_script_mcp-1.0.0-py3-none-any.whl (20.3 kB view details)

Uploaded Python 3

File details

Details for the file ida_script_mcp-1.0.0.tar.gz.

File metadata

  • Download URL: ida_script_mcp-1.0.0.tar.gz
  • Upload date:
  • Size: 26.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.9

File hashes

Hashes for ida_script_mcp-1.0.0.tar.gz
Algorithm Hash digest
SHA256 4000d4aaf961cf0fcaff382614dcf4b4e29bbea533485b8bd17c0d62781ad412
MD5 59bf0a00fe45f7dde2144c68dd0b4c56
BLAKE2b-256 b566376de2f2b177e623231429c9cacca9de2f4ce09179d2dee5752a74271a56

See more details on using hashes here.

File details

Details for the file ida_script_mcp-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: ida_script_mcp-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 20.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.9

File hashes

Hashes for ida_script_mcp-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 98dd8bca922b25dff27e7f74b0aa2135b5901ba4e220ad0f3cd91863b9aca358
MD5 55561081e4136ce532b5e9360373a479
BLAKE2b-256 1efae60d75457626c574545e118a19f0b297c878dd2c2c9c4019d6b6d08a771e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page