IDA Pro MCP

IDA Pro MCP

用于使用 IDA Pro 自动逆向工程的 MCP 服务器。

Category
访问服务器

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): 设置局部变量的类型。

前提条件

  • Python (3.11 或更高版本)
    • 使用 idapyswitch 切换到最新的 Python 版本
  • IDA Pro (8.3 或更高版本,推荐 9)
  • 支持的 MCP 客户端(选择你喜欢的)

安装

安装(或升级)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 服务器,请按照以下步骤操作:

  1. 全局安装 uv
    • Windows: pip install uv
    • Linux/Mac: curl -LsSf https://astral.sh/uv/install.sh | sh
  2. 克隆此存储库,例如 C:\MCP\ida-pro-mcp
  3. 导航到 Cline/Roo Code MCP 服务器 配置(参见屏幕截图)。
  4. 单击 已安装 选项卡。
  5. 单击 配置 MCP 服务器,这将打开 cline_mcp_settings.json
  6. 添加 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 选项,请使用以下步骤:

  1. src/ida_pro_mcp/mcp-plugin.py 复制(不是移动)到您的插件文件夹(Windows 上为 %appdata%\Hex-Rays\IDA Pro\plugins)。
  2. 打开一个 IDB 并单击 Edit -> Plugins -> MCP 以启动服务器。

</details>

与其他 MCP 服务器的比较

有一些 IDA Pro MCP 服务器在流传,但我创建了自己的服务器有几个原因:

  1. 安装应该是完全自动化的。
  2. 其他插件的架构使得快速添加新功能变得困难(太多不必要的依赖项的样板代码)。
  3. 学习新技术很有趣!

如果您想查看它们,这里有一个列表(按我发现它们的顺序):

  • 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

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选