IDA Pro MCP
用于使用 IDA Pro 自动逆向工程的 MCP 服务器。
README
IDA Pro MCP
简单的 MCP 服务器,允许在 IDA Pro 中进行 vibe 逆向工程。
https://github.com/user-attachments/assets/6ebeaa92-a9db-43fa-b756-eececce2aca0
视频的二进制文件和提示可在 mcp-reversing-dataset 仓库中找到。
可用功能:
check_connection: 检查 IDA 插件是否正在运行。get_metadata(): 获取当前 IDB 的元数据。get_function_by_name(name): 通过名称获取函数。get_function_by_address(address): 通过地址获取函数。get_current_address(): 获取用户当前选择的地址。get_current_function(): 获取用户当前选择的函数。convert_number(text, size): 将数字(十进制、十六进制)转换为不同的表示形式。list_functions(offset, count): 列出数据库中的所有函数(分页)。list_strings(offset, count): 列出数据库中的所有字符串(分页)。search_strings(pattern, offset, count): 搜索包含给定模式的字符串(不区分大小写)。decompile_function(address): 反编译给定地址的函数。disassemble_function(start_address): 获取函数的汇编代码(地址:指令;注释)。get_xrefs_to(address): 获取对给定地址的所有交叉引用。get_entry_points(): 获取数据库中的所有入口点。set_comment(address, comment): 在函数反汇编和伪代码中为给定地址设置注释。rename_local_variable(function_address, old_name, new_name): 重命名函数中的局部变量。rename_global_variable(old_name, new_name): 重命名全局变量。set_global_variable_type(variable_name, new_type): 设置全局变量的类型。rename_function(function_address, new_name): 重命名函数。set_function_prototype(function_address, prototype): 设置函数的原型。declare_c_type(c_declaration): 从 C 声明创建或更新局部类型。set_local_variable_type(function_address, variable_name, new_type): 设置局部变量的类型。
前提条件
安装
安装(或升级)IDA Pro MCP 包:
pip install --upgrade git+https://github.com/mrexodia/ida-pro-mcp
配置 MCP 服务器并安装 IDA 插件:
ida-pro-mcp --install
重要提示:请确保完全重启 IDA/Visual Studio Code/Claude,以使安装生效。 Claude 在后台运行,您需要从托盘图标中退出它。
https://github.com/user-attachments/assets/65ed3373-a187-4dd5-a807-425dca1d8ee9
提示工程
LLM 容易产生幻觉,您需要明确您的提示。 对于逆向工程,整数和字节之间的转换尤其成问题。 以下是一个最小的示例提示,如果您使用不同的提示获得了良好的结果,请随时发起讨论或提出问题:
你的任务是在 IDA Pro 中分析一个 crackme。 你可以使用 MCP 工具来检索信息。 一般来说,使用以下策略:
- 检查反编译并添加注释,说明你的发现
- 将变量重命名为更有意义的名称
- 如果需要,更改变量和参数类型(尤其是指针和数组类型)
- 更改函数名称以更具描述性
- 如果需要更多细节,反汇编该函数并添加注释,说明你的发现
- 永远不要自己转换数字基数。 如果需要,使用 convert_number MCP 工具!
- 不要尝试暴力破解,完全从反汇编和简单的 python 脚本中推导出任何解决方案
- 在最后创建一个 report.md,其中包含你的发现和采取的步骤
- 当你找到解决方案时,提示用户反馈你找到的密码
这个提示只是第一次实验,如果你找到了改进输出的方法,请分享!
提高 LLM 准确性的技巧
大型语言模型 (LLM) 是强大的工具,但它们有时会在复杂的数学计算中遇到困难或表现出“幻觉”(编造事实)。 确保告诉 LLM 使用 conver_number MCP,并且对于某些操作,您可能还需要 math-mcp。
另一件需要记住的事情是,LLM 在混淆的代码上表现不佳。 在尝试使用 LLM 解决问题之前,请查看二进制文件并花一些时间(自动)删除以下内容:
- 字符串加密
- 导入哈希
- 控制流扁平化
- 代码加密
- 反反编译技巧
您还应该使用 Lumina 或 FLIRT 等工具来尝试解析所有开源库代码和 C++ STL,这将进一步提高准确性。
手动安装
注意:本节适用于需要详细安装说明的 LLM 和高级用户。
<details>
手动 MCP 服务器安装 (Cline/Roo Code)
要自己安装 MCP 服务器,请按照以下步骤操作:
- 全局安装 uv:
- Windows:
pip install uv - Linux/Mac:
curl -LsSf https://astral.sh/uv/install.sh | sh
- Windows:
- 克隆此存储库,例如
C:\MCP\ida-pro-mcp。 - 导航到 Cline/Roo Code MCP 服务器 配置(参见屏幕截图)。
- 单击 已安装 选项卡。
- 单击 配置 MCP 服务器,这将打开
cline_mcp_settings.json。 - 添加
ida-pro-mcp服务器:
{
"mcpServers": {
"github.com/mrexodia/ida-pro-mcp": {
"command": "uv",
"args": [
"--directory",
"c:\\MCP\\ida-pro-mcp",
"run",
"server.py",
"--install-plugin"
],
"timeout": 1800,
"disabled": false,
"autoApprove": [
"check_connection",
"get_metadata",
"get_function_by_name",
"get_function_by_address",
"get_current_address",
"get_current_function",
"convert_number",
"list_functions",
"list_strings",
"search_strings",
"decompile_function",
"disassemble_function",
"get_xrefs_to",
"get_entry_points",
"set_comment",
"rename_local_variable",
"rename_global_variable",
"set_global_variable_type",
"rename_function",
"set_function_prototype",
"declare_c_type",
"set_local_variable_type"
],
"alwaysAllow": [
"check_connection",
"get_metadata",
"get_function_by_name",
"get_function_by_address",
"get_current_address",
"get_current_function",
"convert_number",
"list_functions",
"list_strings",
"search_strings",
"decompile_function",
"disassemble_function",
"get_xrefs_to",
"get_entry_points",
"set_comment",
"rename_local_variable",
"rename_global_variable",
"set_global_variable_type",
"rename_function",
"set_function_prototype",
"declare_c_type",
"set_local_variable_type"
]
}
}
}
要检查连接是否有效,您可以执行以下工具调用:
<use_mcp_tool>
<server_name>github.com/mrexodia/ida-pro-mcp</server_name>
<tool_name>check_connection</tool_name>
<arguments></arguments>
</use_mcp_tool>
IDA 插件安装
IDA Pro 插件将在 MCP 服务器启动时自动安装。 如果您禁用了 --install-plugin 选项,请使用以下步骤:
- 将
src/ida_pro_mcp/mcp-plugin.py复制(不是移动)到您的插件文件夹(Windows 上为%appdata%\Hex-Rays\IDA Pro\plugins)。 - 打开一个 IDB 并单击
Edit -> Plugins -> MCP以启动服务器。
</details>
与其他 MCP 服务器的比较
有一些 IDA Pro MCP 服务器在流传,但我创建了自己的服务器有几个原因:
- 安装应该是完全自动化的。
- 其他插件的架构使得快速添加新功能变得困难(太多不必要的依赖项的样板代码)。
- 学习新技术很有趣!
如果您想查看它们,这里有一个列表(按我发现它们的顺序):
- https://github.com/taida957789/ida-mcp-server-plugin(仅 SSE 协议,需要在 IDAPython 中安装依赖项)。
- https://github.com/fdrechsler/mcp-server-idapro(TypeScript 中的 MCP 服务器,添加新功能需要过多的样板代码)。
- https://github.com/MxIris-Reverse-Engineering/ida-mcp-server(自定义套接字协议,样板代码)。
欢迎提交 PR 以在此处添加您的 IDA Pro MCP 服务器。
开发
添加新功能是一个非常简单和简化的过程。 您所要做的就是将一个新的 @jsonrpc 函数添加到 mcp-plugin.py,您的函数将在 MCP 服务器中可用,而无需任何额外的样板代码! 以下是一个视频,我在不到 2 分钟的时间内添加了 get_metadata 函数(包括测试):
https://github.com/user-attachments/assets/951de823-88ea-4235-adcb-9257e316ae64
要测试 MCP 服务器本身:
uv run fastmcp dev server.py
这将在 http://localhost:5173 上打开一个 Web 界面,并允许您与 MCP 工具进行交互以进行测试。
对于测试,我创建到 IDA 插件的符号链接,然后将 JSON-RPC 请求直接 POST 到 http://localhost:13337/mcp。 在启用符号链接后,您可以运行以下命令:
uv run ida-pro-mcp --install
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。