Token导航 LogoToken导航TokenDH.com
Ida Codex MCP logo
运维云端stdio官方级别未说明来源级核验

Ida Codex MCP

MCP Server

一款提供IDA Pro插件和本地MCP服务器的逆向工程功能服务,支持函数列表、调用图、反编译、程序信息查询等功能。

工具数

21

提示词数

0

GitHub Stars

20

资源数

0
逆向工程Python云端部署

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

Iamgublin

提供方

Iamgublin

最后核验

2026/5/17 20:22

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

python mcp_ida_server.py

详细介绍

ida法典委员会

本地MCP(模型上下文协议)服务器加上IDA 9.2插件,向MCP客户端公开常见的逆向工程功能。

  • ida_bridge.py:一个IDA插件,通过本地TCP JSON接口(默认)公开核心分析功能(函数列表、调用图、十六进制射线伪代码、反汇编、导入/导出、外部参照、字符串、内存读取等) 127.0.0.1:31337).
  • mcp_ida_server.py:与IDA插件通信的本地MCP服务器,然后通过STDIN/STDOUT将功能重新公开为MCP工具和资源,以便MCP客户端(例如Codex CLI)可以直接使用它们。

特性

  • 功能和调用

- 列出功能: ida_list_functions - 调用图: ida_call_graph(name, max_depth) - 分析并可选择重命名: ida_analyze_function(name, max_depth, rename, rename_locals)

  • 分解/拆解

- 伪码(十六进制射线): ida_get_pseudocode(name|ea, offset, limit) - 拆卸: ida_get_disassembly(name|ea, offset, limit) - 重命名功能: ida_rename_function(old_name, new_name)

  • 节目信息

- 进口: ida_get_imports - 出口: ida_get_exports - 交叉引用: ida_get_xrefs(target) (姓名或地址) - 全局: ida_list_globals(offset, count) - 内存读取: ida_read_memory(address, size) - 串: ida_get_strings(min_length, offset, count)

  • 多目标路由(新)

- 主动发现正在运行的IDA实例: ida_discover_targets - 列出已知目标(已配置+已发现): ida_list_targets - 为后续通话设置活动目标: ida_set_active_target - 查找所有目标的API: ida_find_function_across_targets - 全部 ida_* 工具支持可选 ida_target 论点 - 将一个MCP服务器路由到多个IDA实例(例如 A.dllB.dll)

  • 函数指针操作(新-固定v0.2.1)

- 跳转到地址: ida_jump_to_address(address) - 设置数据类型: ida_set_data_type(address, data_type) (字节、字、dword、qword等) - 设置函数指针类型: ida_set_function_pointer_type(address, function_signature) - 集合名称: ida_set_name(address, name) - 完整的工作流程: ida_create_function_pointer(address, name, function_signature) -转换 MEMORY[address] 在十六进制光线中调用命名函数 - 最近的修复:解决了函数签名解析中的语法错误,增加了签名规范化,改进了回退类型

  • MCP资源

- resources/list:将顶级函数导出为资源(前500个) - resources/read:通过以下方式获取伪代码(或回退到反汇编) ida://function/{ea}/{name} - resources/templates/list:提供 ida_function 模板

仓库的规划

ida-codex-mcp/
├─ ida_bridge.py        # IDA plugin: local TCP JSON bridge
├─ mcp_ida_server.py    # MCP local process server: bridge MCP  IDA
└─ __pycache__/         # cache generated at runtime

需求

  • IDA Pro 9.2(伪代码功能建议使用十六进制射线)
  • Python 3.9+
  • Windows/Linux/macOS

安装与启动

  1. IDA端(插件)
  • 复制 ida_bridge.py 进入IDA plugins 目录并重新启动IDA。
  • 当目标打开时,插件会在以下位置生成一个本地侦听器 127.0.0.1:31337 (如果使用,则自动递增端口)。
  1. MCP侧(本地过程)
  • 在此repo文件夹中,运行:
python mcp_ida_server.py
  • 要覆盖IDA网桥地址/端口(单个目标),请设置环境变量:
# Default: 127.0.0.1:31337
set IDA_HOST=127.0.0.1
set IDA_PORT=31337
  • 要从一个MCP服务器连接多个IDA实例,请使用:
# alias=host:port;alias=host:port
set IDA_TARGETS=A=127.0.0.1:31337;B=127.0.0.1:31338
# optional, default is "default"
set IDA_DEFAULT_TARGET=A
  • 然后调用工具 ida_target:
{"jsonrpc":"2.0","id":"10","method":"tools/call","params":{"name":"ida_list_functions","arguments":{"ida_target":"A"}}}
{"jsonrpc":"2.0","id":"11","method":"tools/call","params":{"name":"ida_list_functions","arguments":{"ida_target":"B"}}}
  • 可选的自动发现范围覆盖:
set IDA_DISCOVERY_HOST=127.0.0.1
set IDA_DISCOVERY_PORT_START=31337
set IDA_DISCOVERY_PORT_END=31437
set IDA_AUTO_DISCOVER_ON_START=1
# If MCP process may restart frequently, skip repeated startup scan in this interval (seconds)
set IDA_STARTUP_DISCOVERY_MIN_INTERVAL_SEC=30
# Hard budget for startup discovery (seconds). Discovery stops early when budget is reached.
set IDA_STARTUP_DISCOVERY_TIMEOUT_SEC=4.0
# Fast TCP connect timeout used for per-port probe (milliseconds, localhost can be very small)
set IDA_DISCOVERY_CONNECT_TIMEOUT_MS=15
# Retry timeout for busy IDA UI thread (milliseconds)
set IDA_DISCOVERY_RETRY_TIMEOUT_MS=1200
# Optional cache file for discovered targets (restored on next start)
set IDA_DISCOVERY_CACHE_FILE=C:\temp\ida_mcp_targets_cache.json
  • 发现+定位工作流程:
{"jsonrpc":"2.0","id":"20","method":"tools/call","params":{"name":"ida_discover_targets","arguments":{}}}
{"jsonrpc":"2.0","id":"21","method":"tools/call","params":{"name":"ida_find_function_across_targets","arguments":{"name":"CreateFileW","match_mode":"exact"}}}
{"jsonrpc":"2.0","id":"22","method":"tools/call","params":{"name":"ida_set_active_target","arguments":{"ida_target":"B"}}}
  • 该过程通过STDIN/STDOUT进行通信。在您的MCP客户端(例如Codex CLI)中注册它以使用工具和资源。

Codex CLI集成(config.toml)

将此服务器添加到Codex CLI config.toml 因此,这些工具出现在客户端中。配置文件的确切位置取决于您的设置,例如:

  • 窗户: %AppData%\\Codex\\config.toml
  • macOS: ~/Library/Application Support/Codex/config.toml
  • Linux: ~/.config/codex/config.toml

使用stdio传输的示例配置:

# Register an MCP server named "ida"
[mcp.servers.ida]
type = "stdio"
command = "python"
# Use an absolute path to the server script; single quotes are safe for Windows paths
args = ['D:\\Code\\ida-codex-mcp\\mcp_ida_server.py']

# Optional environment overrides:
# - Single target: IDA_HOST + IDA_PORT
# - Multi target: IDA_TARGETS + IDA_DEFAULT_TARGET
env = { IDA_TARGETS = "A=127.0.0.1:31337;B=127.0.0.1:31338", IDA_DEFAULT_TARGET = "A" }

# Optional stability knobs
enabled = true
restart_on_exit = true
timeout_ms = 15000

类Unix路径变体:

[mcp.servers.ida]
type = "stdio"
command = "python3"
args = ["/path/to/ida-codex-mcp/mcp_ida_server.py"]
env = { IDA_HOST = "127.0.0.1", IDA_PORT = "31337" }
# or:
# env = { IDA_TARGETS = "A=127.0.0.1:31337;B=127.0.0.1:31338", IDA_DEFAULT_TARGET = "A" }
enabled = true
restart_on_exit = true
timeout_ms = 15000

验证步骤:

  • 确保IDA正在运行 ida_bridge.py 加载并打开数据库。
  • 重新启动Codex CLI,使其启动新服务器。
  • 在Codex CLI中,列出工具并确认 ida_* 工具(例如。, ida_list_functions, ida_get_pseudocode)可用。

快速检查(两种方式)

选项A:将TCP直接连接到IDA插件(简单自检)

# quick_test.py
import json, socket

HOST, PORT = "127.0.0.1", 31337
req = {"method": "list_functions", "params": {}}

s = socket.create_connection((HOST, PORT), timeout=5)
s.sendall((json.dumps(req) + "\n").encode("utf-8"))
data = s.recv(65536)
print("IDA reply:", data.decode("utf-8", "ignore"))
python quick_test.py

选项B:通过MCP(建议通过MCP客户端)

  • 初始化:
{"jsonrpc":"2.0","id":"1","method":"initialize","params":{"protocolVersion":"2024-11-05"}}
  • 列出工具:
{"jsonrpc":"2.0","id":"2","method":"tools/list"}
  • 调用示例(列表函数):
{"jsonrpc":"2.0","id":"3","method":"tools/call","params":{"name":"ida_list_functions","arguments":{}}}

提示:通过管道发送单个JSON行仅用于烟雾测试——在MCP客户端中注册此过程以获得最佳体验。

函数指针工作流示例

新的函数指针工具有助于转换Hex Rays伪代码:

v10 = MEMORY[0xFFFFF803799C3010](a1, a4, 48, 1, 538997579);

对此:

v10 = SomeApiCall(a1, a4, 48, 1, 538997579);

方法1:手动步骤

  1. ida_jump_to_address(address=0xFFFFF803799C3010) -跳转到地址
  2. ida_set_data_type(address=0xFFFFF803799C3010, data_type="qword") -设置为8字节指针
  3. ida_set_function_pointer_type(address=0xFFFFF803799C3010, function_signature="NTSTATUS (__fastcall *)(void *, void *, int, int, int)") -设置函数指针类型
  4. ida_set_name(address=0xFFFFF803799C3010, name="SomeApiCall") -给它起个名字

方法2:一步式工作流程

ida_create_function_pointer(
  address=0xFFFFF803799C3010,
  name="SomeApiCall", 
  function_signature="NTSTATUS (__fastcall *)(void *, void *, int, int, int)"
)

这将自动执行所有步骤并刷新“十六进制光线”视图。

常见问题解答

  • 如果未安装Hex Rays, ida_get_pseudocode 将出错;使用 ida_get_disassembly 相反。
  • 要添加伪代码注释,请使用 ida_py_exec 以调用IDA的Python API(例如。, ida_hexrays / idc.set_cmt)直接。
  • 函数指针操作要求将地址映射到IDA的地址空间中。
  • 函数签名应遵循标准的C函数指针语法: return_type (__calling_convention *)(param_types)
  • 中频端口 31337 被占用时,插件会自动增加端口号;集 IDA_PORT 因此在MCP侧进行匹配。
  • 传输编码为UTF-8;每个请求/响应都是一个以换行符结尾的JSON行。

许可证

TBD。欢迎投稿——请在PR中提及许可意向。

演示

IDA reverse engineering demo

目录标签

目录标签

逆向工程Python云端部署本地部署IDA插件反编译函数分析程序信息

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

21

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdionone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP