IDA-MCP 服务器(Rust 实现)
使用说明(Markdown 格式)
- 项目简介
- 这是一个用 Rust 实现的 MCP 服务器,用于在无图形界面的 IDA Pro 环境中提供面向 LLM/AI 客户端的上下文服务。服务器暴露一组工具接口,支持打开数据库、查询函数、反汇编、去编译等功能,并通过 MCP 协议与客户端通信。
- 服务器底层通过一个专门的 IDA 工作线程来执行所有 IDA 相关操作,确保 IDA 的要求(如必须在主线程)得到满足,同时在后台运行异步的 MCP 服务以响应客户端请求。
- 主要功能点
- 资源与工具管理:提供对 IDA 数据库的访问、加载外部调试信息、自动分析状态查询、打开/关闭数据库等能力,以及工具目录与单个工具的文档查询。
- 远程执行工具:支持打开数据库、列出函数、查找/解析函数、反汇编、去编译、读取内存/字符串、读取结构体等一系列分析工具。
- 背景任务与流式传输:支持在背景中执行长时任务(例如 DSC 加载模块),并通过任务系统轮询任务状态;提供两种传输模式(标准输入输出,和基于 SSE 的 HTTP 流传输)。
- 安全与会话:实现多传输模式、对打开的数据库进行锁文件管理,避免并发访问冲突,提供 close_token 机制(在 HTTP/SSE 模式下用于关闭会话)。
- 安装步骤
- 先确保系统中已安装 IDA Pro 9.3+(或 9.2),并具备有效许可证。
- 构建方式(从源码编译)
- 使用 Rust 的构建工具编译整个项目(Cargo 会自动处理依赖)。
- 运行方式(三种模式之一):
- 服务模式(默认):直接启动 MCP 服务器,使用标准输入输出进行 MCP 通信。
- 典型命令:ida-mcp
- 基于流的 HTTP (SSE) 模式:提供更贴近网页/云端客户端的接入方式。
- 启动命令示例(需要配置入口参数):ida-mcp serve-http --bind 0.0.0.0:8765
- 参数包括绑定地址、SSE 保活、允许来源等。
- 诊断/探测模式:probe,用于在主线程中对库进行基本测试和演示用的快速探测。
- 服务模式(默认):直接启动 MCP 服务器,使用标准输入输出进行 MCP 通信。
- 服务器配置(客户端常用,只需提供启动信息即可连接服务器)
- 说明:MCP 客户端要连接服务器,需要一个包含服务器名称、启动命令和参数的 JSON 配置。以下信息仅作示例,实际请按你的部署环境填写。
- 示例 JSON(请替换成实际服务器信息并仅作参考,不作为代码提交) { "server_name": "ida", "command": "ida-mcp", "args": [ "serve" ], "transport": "stdio", "notes": "默认使用 STDIO 传输。若需通过浏览器或其他客户端使用 SSE,请改用 serve-http 模式并配置相应传输选项。" }
- 基本使用方法
- 连接并初始化
- 启动服务器后,客户端通过 MCP JSON-RPC 交互,与 IDA 数据库建立会话。
- 常用操作流程
- 打开一个数据库或原始二进制文件:使用 open_idb 工具,提供数据库路径及选项,服务器会返回数据库元信息。
- 查询可用工具:tool_catalog,获取符合任务的工具列表及简要描述。
- 获取工具细节:tool_help,通过工具名称获取完整参数及示例。
- 执行分析任务:调用具体工具,如 list_functions、disasm_by_name、decompile 等,获取结果。
- 管理会话:如需在 HTTP/SSE 模式下共享会话,请使用 close_idb 提前关闭数据库,或在会话结束时进行清理。
- 进阶用法
- 如需在背景中加载 Apple 的 dyld_shared_cache 模块等耗时任务,服务器会返回任务 ID,后续可以通过 task_status 获取进度和结果。
- 连接并初始化
- 注意事项
- 依赖与许可:IDA 运行在主线程,且需要正确的许可证。请确保在实际部署环境中符合 IDA 的使用条款。
- 安全性:HTTP/SSE 模式下,服务器支持 Origin 过滤,确保只有信任的来源可以建立连接。
- 兼容性:服务器实现了工具目录、工具帮助、以及任务系统等,以便与常见的 MCP 客户端配合使用。