首页/新闻资讯/正文详情

IDA Pro MCP 仓库开发指南:架构、线程模型、API 约定与测试体系

发布时间:2026/9/23 12:17:32 来源:云帆数科 栏目:资讯中心
IDA Pro MCP 仓库开发指南:架构、线程模型、API 约定与测试体系
IDA Pro MCP 仓库开发指南架构、线程模型、API 约定与测试体系【免费下载链接】ida-pro-mcpAI-powered reverse engineering assistant that bridges IDA Pro with language models through MCP.项目地址: https://gitcode.com/gh_mirrors/id/ida-pro-mcp本指南基于仓库根目录 CLAUDE.md 展开它是进入ida-pro-mcp项目开发的总纲先交代项目三大组成部分与 API 模块地图再给出必须遵守的 IDA 线程安全规则、API 编写约定与不安全操作标记方式随后覆盖日常运行/安装命令、基于 idalib 的无头测试与覆盖率流程最后列出开发优先级与环境版本要求。读完本文你将掌握如何在该仓库中新增一个符合规范的 MCP 工具、如何用ida-mcp-test验证它以及如何用coverage衡量测试充分度。一、项目是什么架构与模块地图CLAUDE.md 开宗明义IDA Pro MCP Server的核心使命是把 IDA Pro / idalib 的能力以 MCPModel Context Protocol工具的形式暴露给 LLM 客户端实现AI 辅助逆向的工作流。整个仓库被划分为三个主要部分组件路径职责MCP 服务器入口src/ida_pro_mcp/server.py对外提供 MCP 服务stdio / HTTP / SSE并代理 JSON-RPC 请求到正在运行的 IDA 实例无头 idalib 服务器src/ida_pro_mcp/idalib_server.py基于idapro库以无 GUI 方式打开二进制、托管会话供无法启动 IDA GUI 的环境使用IDA / 插件侧 APIsrc/ida_pro_mcp/ida_mcp/全部 MCP 工具的实现在此运行在 IDA 进程内CLAUDE.md 进一步列出了十个重要 API 模块它们是 MCP 工具按业务域划分的载体api_core.pyIDB 元数据、函数、字符串、导入表api_analysis.py反编译、反汇编、交叉引用xrefs、路径、模式搜索api_memory.py字节 / 整数 / 字符串读写与补丁patchingapi_types.py结构体、类型推断、类型应用api_modify.py注释、重命名、汇编补丁api_stack.py栈帧操作api_sigmaker.py签名创建、扫描、xref 签名底层使用sigmaker.pyapi_debug.py调试器控制属于不安全、测试优先级低的模块api_python.py在 IDA 上下文中执行任意 Pythonapi_resources.pyida://形式的 MCP 资源。这十个模块对应着工具注册的两个入口MCP_SERVER在 rpc.py 中创建负责承载所有工具MCP_UNSAFE集合记录被标记为不安全的函数名MCP_EXTENSIONS则按分组管理默认隐藏的扩展工具例如ext(dbg)标记的调试工具需要通过?extdbg查询参数才可见。二、核心实现规则如何在 IDA 进程内安全写代码2.1 IDA 线程安全所有 SDK 调用必须回到主线程CLAUDE.md 给出了本项目最优先的工程约束所有 IDA SDK 调用必须在 IDA 主线程上执行。MCP 服务器自身的请求处理线程不能直接触碰ida_*模块必须通过统一装饰器完成同步from .rpc import tool from .sync import idasync tool idasync def my_tool(...): ...在 sync.py 中可以看到idasync的实现它把被装饰函数包装成functools.partial然后判断当前是否已有主线程 pumpheadless 场景下 IDA 只运行在 pump 线程上再决定是直接调用sync_wrapper还是把整个同步体提交给 pump 线程等待结果。最终通过idaapi.execute_sync(runned, idaapi.MFF_WRITE)在写模式下于 IDA 主线程执行并在执行期间强制开启批处理模式idc.batch(1)见 sync.py避免弹出交互对话框阻塞无头流程。值得注意的是 sync.py 的注释揭示了设计演进早期存在独立的idaread/idawrite两个装饰器但只读操作也可能需要写访问例如反编译因此现在统一为单一的idasync。这是理解本仓库 API 惯例的重要背景。sync_wrapper还承担了超时与取消管理sync.py默认工具超时 60 秒可通过环境变量IDA_MCP_TOOL_TIMEOUT_SEC覆盖超时通过两条路径生效一是threading.Timer触发ida_kernwin.set_cancelled()许多 IDA SDK 调用如ida_search.find_*、ida_hexrays.decompile*会轮询user_cancelled()并提前返回二是sys.setprofile注入的 profile 钩子检查单调时钟 deadline工具内部可通过get_tool_deadline()自省剩余时间在遍历大型结构时优雅返回部分结果若需要为单个工具覆盖超时可使用tool_timeout(seconds)装饰器必须放在idasync之后最内层见 sync.py。2.2 API 约定batch-first 与类型提示CLAUDE.md 列出四条 API 编写约定均在源码中有直接对应优先 batch-first API单对象操作与批量操作使用同一入口批量编辑类工具如重命名、注释、类型应用支持一次传入多条操作并普遍提供stop_on_error、dry_run等控制项见 utils.py 中RenameBatch的定义。许多函数同时接受逗号分隔字符串或列表这是为了降低 LLM 客户端生成参数的难度。使用完整类型提示与Annotated[...]描述参数说明直接成为 MCP 工具 schema 的一部分影响客户端如何生成参数。函数 docstring 即 MCP 工具描述tool装饰器rpc.py会把函数注册进MCP_SERVER.tool(func)docstring 被用作工具的能力说明。一个符合规范的示例def my_api(addrs: Annotated[str, Addresses (0x401000, main) or list]) - list[dict]: ...2.3 常用助手解析、归一化、分页与过滤CLAUDE.md 指定了三类必须复用的公共助手全部实现在 utils.pyparse_address()utils.py接受int、带0x前缀的十六进制串、十进制串失败时尝试用idaapi.get_name_ea做名字→地址解析支持传入main这样的符号名仍失败则抛出IDAError。normalize_list_input()/normalize_dict_list()utils.py前者把list或逗号分隔字符串归一化为list后者把dict/list[dict]/ JSON 字符串 / 逗号分隔字符串 /list[str]统一归一化为list[dict]并支持自定义string_parser把单个字符串解析成操作字典。分页与过滤助手paginate()utils.py实现offset/count分页并返回next_offset游标pattern_filter()utils.py支持三种过滤语义——/regex/flags形式正则、含*/?的 glob、以及普通子串匹配。2.4 不安全操作显式标记、默认禁用调试器操作或破坏性操作内存/汇编补丁、Python 执行等必须显式标记为 unsafe否则默认不对外暴露from .rpc import tool, unsafe unsafe tool idasync def dangerous_op(...): ...unsafe装饰器rpc.py只是把函数名加入全局集合MCP_UNSAFE。真正执行禁用逻辑的是服务器启动阶段在 idalib_server.py 中若未传--unsafe参数则从MCP_SERVER.tools.methods中弹出所有不安全工具并记录日志 Unsafe tools disabled (start with --unsafe to enable)。server.py同样透传--unsafe开关。这保证默认安装形态对客户端只暴露安全的只读/分析能力。三、开发命令运行、检查与安装卸载CLAUDE.md 给出的命令统一以uv run前缀执行项目用 uv 的[project.scripts]段。3.1 运行模式uv run ida-pro-mcp uv run ida-pro-mcp --transport http://127.0.0.1:8744/sse uv run idalib-mcp --stdio path/to/binary uv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/binary uv run ida-pro-mcp --unsafe四条命令对应四种场景ida-pro-mcp默认 stdio 传输供 MCP 客户端直接以 stdio 方式拉起它本质是一个代理见 server.py 的dispatch_proxy除initialize与notifications/*之外的所有 JSON-RPC 请求都会被转发到正在运行的 IDA 实例默认127.0.0.1:13337可被--ida-rpc覆盖或自动发现若 IDA 未启动则返回错误提示Did you run Edit - Plugins - MCP (CtrlAltM) to start the server?。ida-pro-mcp --transport http://127.0.0.1:8744/sse以 HTTP/SSE 传输对外服务端口与路径取自 URL此时启用ProxyHttpRequestHandler除代理请求外还负责透传大输出下载/output/id.json。idalib-mcp --stdio path/to/binary与idalib-mcp --host 127.0.0.1 --port 8745 path/to/binary无头 idalib 模式前者走 stdio后者监听 HTTP默认端口 8745可直接指定要分析的二进制不带输入文件时可通过idb_open()工具动态加载见 idalib_server.py。--unsafe启用上节所述的不安全工具集合。3.2 MCP Inspectoruv run mcp dev src/ida_pro_mcp/server.py通过官方 MCP Inspector 以开发模式启动服务器便于交互式调试工具定义与调用。3.3 安装 / 卸载uv run ida-pro-mcp --install uv run ida-pro-mcp --uninstall--install会立即安装 IDA 插件并可接受逗号分隔的客户端目标如--install claude,cursor不指定目标时进入交互式选择器。相关 CLI 解析见 server.py还包括--allow-ida-free允许在安装有 IDA Free 的机器上安装、--transportstreamable-http/stdio/sse、--scopeproject/global安装范围、--config生成 MCP 配置 JSON与--list-clients等选项。安装逻辑本体位于 installer.py。四、测试与覆盖率无头回归体系CLAUDE.md 用最大篇幅描述了测试体系——这是该仓库开发工作流的重中之重全部基于 idalib 无头运行不依赖 IDA GUI。4.1 运行测试uv run ida-mcp-test tests/crackme03.elf -q uv run ida-mcp-test tests/typed_fixture.elf -q uv run ida-mcp-test tests/crackme03.elf -c api_analysis uv run ida-mcp-test tests/typed_fixture.elf -p *stack*ida-mcp-test的入口在 src/ida_pro_mcp/test.py核心参数对应-q、-c、-p参数说明-q, --quiet安静模式只输出汇总如Results: 120 passed, 2 failed, 3 skipped (45.12s)与失败列表-c, --category按模块类别过滤例如api_analysis只跑该模块相关测试-p, --pattern按测试名 glob 过滤例如*stack*只跑名字含 stack 的测试-x, --stop-on-failure首个失败即停止-l, --list只列出可用测试含 skip 标记而不运行-v, --verbose显示 IDA 控制台消息--mcp-mode端到端模式每个tool调用都经过真实 MCP 客户端/服务器往返并用 outputSchema 校验响应运行流程test.py先用idapro.open_database打开目标二进制并ida_auto.auto_wait()等待自动分析完成再用pkgutil.iter_modules动态导入ida_pro_mcp.ida_mcp.tests下所有test_*模块以注册test装饰器最后交给 framework.py 的run_tests()执行。测试的注册机制在 framework.pytest()装饰器把函数注册进全局TESTS字典自动从函数所在模块名提取类别test_api_core→api_core并支持两个关键参数test(binarycrackme03.elf)仅当目标二进制基名匹配时才运行用于二进制专属断言test(skipTrue)标记跳过。CLAUDE.md 特别提示非交互式输出应只显示失败项加汇总——这正是-q与failures_only逻辑共同保证的方便 CI 集成。4.2 覆盖率CLAUDE.md 给出的覆盖率流程在两个维护 fixture 上分别采集并合并uv run coverage erase uv run coverage run -m ida_pro_mcp.test tests/crackme03.elf -q uv run coverage run --append -m ida_pro_mcp.test tests/typed_fixture.elf -q uv run coverage report --show-missing--append使第二次运行的结果追加到同一数据文件--show-missing显示未被覆盖的行号。覆盖范围配置在 pyproject.tomlinclude [src/ida_pro_mcp/*]并排除测试模块与zeromcp/内置 MCP 实现。两个 fixture 的定位CLAUDE.md 明确说明tests/crackme03.elf紧凑的通用回归 fixture覆盖绝大多数 API 的常规路径tests/typed_fixture.elf类型化全局变量 / 结构体 / 局部变量 / 栈变量的覆盖 fixture其 C 源码即仓库中的 tests/typed_fixture.c可从源码了解其声明的全局结构、枚举与栈布局。4.3 测试期望质量红线CLAUDE.md 对测试质量提出了四条硬性期望参与贡献时必须遵守优先语义断言拒绝弱断言不要只写字段存在级别的检查例如仅assert name in result要验证数值与语义正确性对变更类 API 优先做往返测试round-trip写入后再读回验证真实生效测试暴露 API 明显错误时修 API 而非削弱测试即不要让测试去迁就错误行为聚焦 IDA 侧模块测试重点放在api_*、utils、framework等 IDA 相关实现上而不是服务器/配置的胶水逻辑同时接受 IDA / Hex-Rays 版本差异合理场景下允许用受保护断言或运行时跳过skip_test()来处理。4.4 通用测试 sanity checkCLAUDE.md 要求新增通用测试时除 fixture 外还应拿一个非 fixture 二进制试跑避免测试隐含 ELF 专属假设uv run ida-mcp-test C:\CodeBlocks\x64dbg\bin\x64\x64dbg.dll -q该示例使用 Windows 下的 PE 文件x64dbg.dll验证测试在非 ELF 目标上同样成立。对测试框架的更多细节可参考 devdocs/test-framework.md。五、范围优先级CLAUDE.md 明确列出开发优先级指导贡献者把精力放在何处高优先级api_analysis.py、api_types.py、api_modify.py、api_stack.py、api_memory.py、api_core.py、api_resources.py、utils.py、framework.py较低优先级api_debug.py、MCP 传输/托管细节、安装与配置变更逻辑。从测试文件分布src/ida_pro_mcp/ida_mcp/tests/ 下的test_api_*.py也能印证这一重心——分析、类型、修改、栈、内存、核心元数据均有成体系的测试模块。另一个与范围相关的机制是profile 白名单通过idalib-mcp --profile PATH可把暴露的工具限制为 profile 文件列出的名字每行一个工具名#开头为注释实现只读/受限部署。解析与过滤逻辑见 profile.py仓库自带两个示例profiles/readonly.txt 与 profiles/triage.txt前者通常只保留分析与读取类工具后者面向初步筛查场景。应用 profile 时idb_open/idb_list两个会话管理工具始终保留idalib_server.py。六、实用环境说明CLAUDE.md 在文末给出运行前提直接决定了开发环境的配置方式Python 版本服务器与插件代码要求 3.11pyproject.toml 中requires-python 3.11与之呼应IDA 版本支持 IDA Pro 8.3推荐 9.0不支持 IDA Free安装时可用--allow-ida-free强制放行server.py但官方不保证支持Python 解释器不匹配若 IDA 使用了错误的 Python使用idapyswitch切换 IDA 绑定的 Python 解释器。无头 idalib 场景还有两个实用细节idalib_server.py支持--verbose打开 IDA 控制台消息、--host/--port默认127.0.0.1:8745绑定监听地址若IDA_MCP_URL环境变量未设置下载基础 URL 会被自动设置为http://host:portidalib_server.py保证截断的大输出可通过该地址回源下载。结语CLAUDE.md 虽然篇幅不长却浓缩了ida-pro-mcp的全部开发纪律架构上服务器代理 IDA 插件 API双层分离线程上所有 SDK 调用经idasync收敛到主线程API 上统一 batch-first 与Annotated类型提示安全上以unsafe--unsafe双闸门管控破坏性操作质量上以ida-mcp-test无头回归 双 fixture 覆盖率为准绳。新贡献者只需按此约定在 src/ida_pro_mcp/ida_mcp/ 下新增模块、用tool注册、用test补齐用例即可无缝融入现有的 MCP 工具生态。【免费下载链接】ida-pro-mcpAI-powered reverse engineering assistant that bridges IDA Pro with language models through MCP.项目地址: https://gitcode.com/gh_mirrors/id/ida-pro-mcp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

3个核心策略助你横向发展:附完整示例与避坑指南
3个核心策略助你横向发展:附完整示例与避坑指南

3个核心策略助你横向发展:附完整示例与避坑指南 配置环境就卡半天,代码跑不通,文档全是英文,这时候你只想骂娘。很多后端开发在从单模块向高可用架构 横向发展 时,都卡在“怎么让服务之间安全通信”这个坎上。别急,今天这篇 完整示例… · 2026/9/23 12:17:25

小型编译程序C语言实现:手写词法分析、递归下降与四元式执行
小型编译程序C语言实现:手写词法分析、递归下降与四元式执行

简介:基于 C 语言实现的小型编译程序课程设计资源,面向编译原理学习者与计算机专业本科生。程序将高级语言源代码转换为四元式中间表示,覆盖词法分析、语法分析、语义分析及代码生成等编译核心阶段,有助于理解编译器整体结构&… · 2026/9/23 12:17:25

ADMM算法在风光氢系统协同优化中的应用
ADMM算法在风光氢系统协同优化中的应用

1. 风光氢系统协同优化问题解析风光氢系统作为新型能源体系中的"铁三角",本质上是一场多主体参与的动态博弈。风电的间歇性、光伏的波动性与氢能的储能特性相互制约又互为补充,就像三个性格迥异的演员在能源舞台上即兴表演。而ADMM算法恰好为这… · 2026/9/23 12:17:25

淘宝评论数据采集实战:从异步接口到风控规避的完整指南
淘宝评论数据采集实战:从异步接口到风控规避的完整指南

商品详情页的评论区,是很多做电商分析、选品调研、用户口碑监测的人绕不开的一块数据。但真到动手的时候,大部分人会发现:淘宝的评论接口不像普通网页那样直接返回HTML,而是走异步加载,参数里还带着一串加密签名&#… · 2026/9/23 13:03:40

ABSODEX直接驱动分度装置调试指南:配线、增益调整与报警定位
ABSODEX直接驱动分度装置调试指南:配线、增益调整与报警定位

简介:CKD公司出品的CKD DD马达自动化系列产品使用说明书,面向自动化设备设计、装配与维护人员,重点讲解ABSODEX AX系列TS型/TH型作动器的选型、安装、调试、维护与保修事项。内容按危险、警告、注意三级安全标识展开,明确了电源接… · 2026/9/23 13:03:40

OPA 2022 年 10 月社区月报解读:v0.45.0 新特性与政策即代码生态进展
OPA 2022 年 10 月社区月报解读:v0.45.0 新特性与政策即代码生态进展

后端认证鉴权云原生 【免费下载链接】opa Open Policy Agent (OPA) is an open source, general-purpose policy engine. 项目地址: https://gitcode.com/gh_mirrors/op/opa 点击查看 免费下载 本篇文章基于 Open Policy Agent(OPA)官方 202… · 2026/9/23 13:03:34

3个坑教你用Python生成好听的qq网名女生速查手册
3个坑教你用Python生成好听的qq网名女生速查手册

3个坑教你用Python生成好听的qq网名女生速查手册 别再对着屏幕发呆,看了一堆教程还是不会写项目,那是你没抓住核心。今天不聊虚的,直接给你一份基于Python的【好听的qq网名女生】生成器,附带一份实战速查手册。这不是简单的字符拼接,而… · 2026/9/23 13:03:33

大麦抢票抓包网络诊断:盯住 3 个接口快速定位失败原因
大麦抢票抓包网络诊断:盯住 3 个接口快速定位失败原因

大麦抢票抓包网络诊断:盯住 3 个接口快速定位失败原因 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 我跑大麦抢票自动化工具 ticket-p… · 2026/9/23 13:03:27

黑色大地攻略2026最新:3步解决性能瓶颈,拒绝文档焦虑
黑色大地攻略2026最新:3步解决性能瓶颈,拒绝文档焦虑

黑色大地攻略2026最新:3步解决性能瓶颈,拒绝文档焦虑 官方文档动辄几百页,翻来翻去找不到重点,这是不是你的日常?很多开发者一看到《黑色大地攻略》相关的复杂业务逻辑或高性能场景,就头大。其实,2026最新的优化思路早就变了,不再是死磕算法… · 2026/9/23 13:03:26

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码