IDA快速MCP服务器

用于IDA Pro的自动化逆向工程的MCP服务器,提供高效的工具调用和数据处理功能。

  • by Harmenszoon
  • Python
  • 本地部署
  • 10 星标
  • 更新于
在 GitHub 查看 Harmenszoon/ida-fast-mcp

使用说明

IDA快速MCP

IDA Pro的MCP服务器。专为自动化逆向工程而设计。

设计

上下文是有限的。LLM用于解析工具名称、读取描述或处理臃肿输出的每个令牌都是用于推理二进制文件的令牌。

  • 15工具 --无冗余、无重叠、动词清晰(get_, list_, find_, set_, apply_, define_)加一个 run_python 安全舱口
  • 紧工具说明 --明确的输入和输出,因此模型选择正确的工具并在第一次正确使用它
  • 有界输出 --对所有列表进行分页,没有上下文炸弹
  • 直接执行 --在IDA的主线程上运行;没有队列或工作池,只请求输入,结果输出
  • 每个工具一个声明 --每个工具的参数通过类型化描述符声明一次;模型看到的JSON模式和服务器运行的验证是 衍生的 从单一来源,所以它们永远不会漂移
  • 多个IDA实例 --打开多个IDA,并通过二进制名称从一个客户端定位其中任何一个;无需额外配置,无需连接每个实例的端口

每个错误都会使您的令牌成本翻倍。此服务器的设计旨在将它们最小化。看 设计.md 目标和架构。

安装

  1. 复制 ida_fast_mcp.py 到IDA插件文件夹
  2. 重新启动IDA--服务器在以下时间自动启动 http://127.0.0.1:13338/mcp
  3. 将您的MCP客户端指向URL

大多数客户端只需要在MCP配置中提供服务器URL。例子:

{
  "ida-pro": {
    "url": "http://127.0.0.1:13338/mcp"
  }
}

钥匙(ida-pro 这里)由您选择——它将成为模型的工具名称前缀 看到(mcp__ida-pro__get_function),因此,一个简短的描述性名称有助于工具选择。

没有依赖关系。没有环境设置。

执行模型

每个工具都通过以下方式在IDA的主线程上运行 execute_sync(),它已经序列化了所有调用者。没有队列,没有工作池,也没有IDA结果的缓存——一个请求输入,一个JSON结果输出。真正长的操作(例如反编译病理功能)会阻塞,直到它完成——这是IDA的单线程API所固有的。 run_python 此外,还强制执行尽力而为的时间限制,以中断失控的Python循环。

运输是 POST /mcp (JSON-RPC 2.0,每次HTTP调用一个请求)。

工具

工具 说明
get_binary_info 二进制元数据和段列表
get_function 已分解的伪代码(回退到反汇编)
get_xrefs 对地址的入站交叉引用
get_pointer_table 读取绝对指针表(例如vtable)
get_type 按名称定义类型
list_functions 函数(可按名称、大小过滤)
list_strings 字符串(可按内容、长度过滤)
list_imports 进口/出口(可过滤)
list_types 本地类型库中的类型
find_pattern 字节模式搜索
set_name 重命名符号或局部变量
set_comment 在地址处设置评论
apply_type 将类型应用于地址或本地
define_type 将C声明解析到类型库中
run_python 逃逸舱口:当没有专用工具时运行IDAPython
list_instances 列出多实例路由的打开IDA实例

多个IDA实例

打开多个IDA实例(最多20个)——它们会自动协调。客户仍然 连接到单个URL;每个实例无需配置任何内容。

  • 呼叫 list_instances 查看打开的二进制文件(name, path, pid).
  • 传递可选 instance 论点(a 双名、路径或pid)在任何工具上 选择它运行的位置,例如。 get_function(instance="kernel32.dll", address=…).
  • 在一个IDA打开的情况下, instance 是可选的,一切都和以前一样。

幕后:每个实例都服务于一个私有环回端口;拿着主 港口将呼叫路由到其他港口,并在关闭时自动接管。没有注册表,没有 经纪人,无需额外流程。

配置

违约: 127.0.0.1:13338

环境变量(可选):

IDA_FAST_MCP_HOST=127.0.0.1
IDA_FAST_MCP_PORT=13338
IDA_FAST_MCP_ALLOW_NONLOOPBACK=1   # opt in to a non-loopback bind (exposes RCE — see Security)

安全

为单个本地用户构建。有 无需认证: run_python 跑 任意IDAPython——IDA进程中的代码执行——因此HTTP层是整个 信任边界。每个请求都经过验证:任何 Host 标头必须是环回(击败DNS 重新绑定),任何 Origin 必须是环回的,这样网页就不能驱动它(合法 非浏览器MCP客户端不发送任何内容),并且正文必须 application/json.没有CORS 授予。

这会阻止什么:浏览器驱动的请求(CSRF)和DNS重新绑定。它的作用 不 stop:任何其他可以POST JSON的本地进程——它不发送 Origin 以及环回 Host,因此它通过了所有检查并获得了全部功率。

服务器绑定环回和 拒绝非环回绑定 除非您明确设置 IDA_FAST_MCP_ALLOW_NONLOOPBACK=1 (它回落到 127.0.0.1 并记录原因),因为a 网络可达绑定将是远程代码执行—— Host 检查不是防御 在那里,因为攻击者可以简单地发送 Host: 127.0.0.1.保持环回绑定 使用本地非浏览器MCP客户端。

许可证

无许可证 --公共领域