首页
社区
课程
招聘
[分享]IDA-Script-MCP:基于 MCP 的二进制分析自动化方案
发表于: 2026-4-11 10:21 6183

[分享]IDA-Script-MCP:基于 MCP 的二进制分析自动化方案

2026-4-11 10:21
6183

项目地址:90cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6e0N6g2A6A6h3s2g2F1h3i4g2W2i4K6u0r3K9h3c8S2i4K6u0V1M7$3y4J5K9i4m8@1i4K6u0V1L8h3y4H3

IDA-Script-MCP 是一个基于 MCP(Model Context Protocol)协议的桥梁工具,它让 Claude、Cursor 等 AI 助手能够直接在 IDA Pro 中执行 IDAPython 脚本

运行在 IDA Pro 内部,提供 HTTP 服务端:

关键设计:

提供四个核心工具给 AI 助手:

一键安装插件并配置 MCP 客户端,支持:

安装完成后:

如果你用的是 Cursor、VS Code 等其他支持 MCP 的客户端,方法类似:

查看预设支持的客户端:

输出示例:

注意--list-clients 列出的是有预设配置路径的客户端。实际上,任何支持 MCP 协议的客户端都可以使用本项目,只需手动添加 MCP 配置即可。

手动配置方法:在客户端的 MCP 配置文件中添加:

如果你使用虚拟环境,把 python 换成虚拟环境中的 Python 路径。

如果想在项目级别配置(适合团队协作),加上 --project 参数:

现在你可以直接对 Claude 说:

用户: "帮我分析这个 crackme 的基本信息"

Claude 执行:

用户: "找出所有名字包含 'encrypt' 的函数"

Claude 执行:

用户: "谁调用了地址 0x401000 的函数?"

Claude 执行:

用户: "反编译 sub_401100 并解释它的逻辑"

Claude 执行:

当你同时打开多个 IDA 实例时:

你可以指定实例:

团队协作时,可以在项目目录创建 .mcp.json

这样每个项目可以有不同的 IDA 实例配置。

⚠️ 重要提醒

此工具允许 AI 执行任意 Python 代码,请务必:

项目还包含完整的 IDAPython 模块文档(idapython/docs/),覆盖 50+ 个 ida_* 模块,让 AI 能够准确使用 IDA API。

IDA-Script-MCP 打通了 AI 助手与 IDA Pro 之间的壁垒,让逆向工程师能够:

项目地址: 805K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6&6L8%4g2J5N6i4y4W2M7X3&6S2L8h3g2Q4x3V1k6A6k6r3q4Q4x3X3c8K6j5%4u0A6M7s2c8Q4x3X3c8E0j5%4l9`.

声明:本文仅用于技术交流,请遵守相关法律法规,不要用于非法用途。

特性 说明
AI 驱动分析 Claude 直接操作 IDA Pro,执行反编译、分析等任务
多实例支持 同时分析多个二进制文件,跨不同 IDA 实例
完整 API 访问 支持所有 IDA 模块(idaapi、ida_hexrays、idautils 等)
一键安装 一条命令完成插件安装和 MCP 客户端配置
跨平台 支持 Windows、macOS、Linux
工具名 功能
list_ida_instances 列出所有运行中的 IDA 实例
execute_idapython 在 IDA 中执行 Python 代码
check_ida_connection 检查连接状态
get_ida_database_info 获取数据库元信息
客户端 配置位置
Claude Desktop claude_desktop_config.json
Cursor .cursor/mcp.json
VS Code settings.json
Windsurf mcp_config.json
┌─────────────────┐     MCP Protocol      ┌─────────────────┐
│   AI Assistant  │ ◄───────────────────► │   MCP Server    │
│  (Claude/Cursor)│                       │   (server.py)   │
└─────────────────┘                       └────────┬────────┘
                                                   │ HTTP
                                                   ▼
                                          ┌─────────────────┐
                                          │   IDA Plugin    │
                                          │ (ida_plugin.py) │
                                          │   Inside IDA    │
                                          └─────────────────┘
# 核心端点
GET  /health      # 健康检查
GET  /metadata    # 获取数据库信息
POST /execute     # 执行 Python 代码
# 1. 安装 Python 包
pip install ida-script-mcp

# 2. 安装插件并配置 MCP 客户端
ida-script-mcp-install install claude
# 配置 Cursor
ida-script-mcp-install install cursor

# 配置 VS Code
ida-script-mcp-install install vscode

# 配置 Windsurf
ida-script-mcp-install install windsurf

# 同时配置多个客户端
ida-script-mcp-install install claude,cursor,vscode
ida-script-mcp-install --list-clients
Available MCP clients:

  claude              (found)
  cursor              (found)
  vscode              (found)
  windsurf            (found)
  claude-code         (found)
{
  "mcpServers": {
    "ida-script-mcp": {
      "command": "python",
      "args": ["-m", "ida_script_mcp.server"]
    }
  }
}
# 项目级配置,会在当前目录生成 .mcp.json
ida-script-mcp-install install --project claude
[IDA-Script-MCP] Server started at http://127.0.0.1:13338
[IDA-Script-MCP] Instance ID: 12345_crackme.exe
# 获取文件信息
print(f"文件名: {idaapi.get_root_filename()}")
print(f"架构: {'x64' if ida_ida.inf_is_64bit() else 'x86'}")
print(f"函数数量: {len(list(idautils.Functions()))}")
print(f"字符串数量: {len(list(idautils.Strings()))}")
import idautils
import ida_funcs

for ea in idautils.Functions():
    name = ida_funcs.get_func_name(ea)
    if 'encrypt' in name.lower():
        func = ida_funcs.get_func(ea)
        print(f"{name}: {func.start_ea:#x} - {func.end_ea:#x}")
import idautils

for xref in idautils.XrefsTo(0x401000):
    caller = ida_funcs.get_func_name(xref.frm)
    print(f"调用者: {caller} at {xref.frm:#x}")

[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

最后于 2026-4-11 10:22 被苏子寻月zzy编辑 ,原因:
收藏
免费 11
支持
分享
最新回复 (13)
雪    币: 20
活跃值: (916)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
 idat -A -S"xx.py" xx.exe 
2026-4-11 11:18
0
雪    币: 104
活跃值: (8567)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
tql
2026-4-13 09:44
0
雪    币: 104
活跃值: (8567)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
tql
2026-4-13 09:44
0
雪    币: 1662
活跃值: (2049)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
tql
2026-4-14 22:16
0
雪    币: 11
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
你得说说跟583K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6E0M7X3g2^5L8$3c8A6j5g2)9J5c8X3W2V1j5g2)9J5k6s2m8J5L8#2)9J5k6r3#2U0M7q4)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4c8e0g2Q4z5e0u0Q4z5p5y4Z5N6s2c8H3M7#2)9K6b7g2)9J5c8W2)9J5c8X3N6A6N6r3S2#2j5W2)9J5k6h3y4G2L8g2)9J5c8X3u0D9j5h3y4C8N6r3!0H3i4K6u0r3K9h3c8S2i4K6u0V1L8h3y4H3i4K6u0V1M7Y4y4Q4x3U0k6F1j5Y4y4H3i4K6y4n7i4@1f1%4i4@1q4p5i4K6R3&6i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1#2i4K6S2o6i4@1u0m8i4@1f1#2i4K6R3^5i4@1q4n7i4@1f1#2i4K6V1#2i4K6S2m8i4K6t1$3L8X3u0K6M7q4)9K6b7W2)9J5y4X3&6T1M7%4m8Q4x3@1t1`.
2026-5-5 07:46
0
雪    币: 130
活跃值: (182)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
请问,ida 你门的版本都是从哪里来的啊,自己买的话好贵啊
2026-5-5 10:54
0
雪    币: 631
活跃值: (792)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
cecini 你得说说跟b9cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6E0M7X3g2^5L8$3c8A6j5g2)9J5c8X3W2V1j5g2)9J5k6s2m8J5L8#2)9J5k6r3#2U0M7l9`.`.6caK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6T1L8r3q4U0K9%4c8G2M7q4)9J5c8X3W2V1j5g2)9J5k6r3#2U0M7q4)9J5k6s2u0K6 等的区别啊
直观感受上可以说没啥区别,想用哪个用哪个。一定要说有区别就是我觉得没必要给mcp写那么多接口,直接给一个运行python脚本的接口就可以了,能在一次操作中进行更复杂的操作,不用让ai反复调用mcp
2026-5-6 09:46
0
雪    币: 1342
活跃值: (6567)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
苏子寻月zzy 直观感受上可以说没啥区别,想用哪个用哪个。一定要说有区别就是我觉得没必要给mcp写那么多接口,直接给一个运行python脚本的接口就可以了,能在一次操作中进行更复杂的操作,不用让ai反复调用mcp
ida-pro-mcp这东西问题挺大的,50+工具会撑爆上下文,我重写了一套符合llm渐进式披露,给一个python接口,最佳实践的mcp
2026-5-6 10:08
0
雪    币: 1342
活跃值: (6567)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
苏子寻月zzy 直观感受上可以说没啥区别,想用哪个用哪个。一定要说有区别就是我觉得没必要给mcp写那么多接口,直接给一个运行python脚本的接口就可以了,能在一次操作中进行更复杂的操作,不用让ai反复调用mcp
ida-pro-mcp还有个致命的问题,llm总会调用错tools_call,因为他根本没在tool说明给出调用例子,要llm瞎猜好几次
2026-5-6 10:10
0
雪    币: 631
活跃值: (792)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
qj111111 ida-pro-mcp这东西问题挺大的,50+工具会撑爆上下文,我重写了一套符合llm渐进式披露,给一个python接口,最佳实践的mcp
认同,不过ida-pro-mcp出来的比较早,那个时候ai写代码的能力还不是很强,容易出错。现在的AI不存在这个问题了,直接让运行python脚本更好。
2026-5-6 10:43
0
雪    币: 8956
活跃值: (3278)
能力值: ( LV8,RANK:127 )
在线值:
发帖
回帖
粉丝
12
论坛发的泄露版你都不看的吗
2026-5-9 16:57
0
雪    币: 631
活跃值: (792)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
SnowFox 论坛发的泄露版你都不看的吗
???
2026-5-16 15:30
0
雪    币: 10584
活跃值: (6301)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
好用
5天前
0
游客
登录 | 注册 方可回帖
返回