首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
首页
学习
活动
专区
圈层
工具
MCP广场
MCP广场 >详情页
ida-pro-mcp2025-05-270分享
github
IDA Pro MCP 服务器,专注自动化逆向工程。借助它,可高效处理逆向任务,简化复杂流程,以自动化方式提升逆向工程效率,为相关工作提供有力支持。
By mrexodia
2025-05-270
github
详情内容

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_globals_filter(offset, count, filter):列出数据库中匹配的全局变量(分页、过滤)。
  • list_globals(offset, count):列出数据库中的所有全局变量(分页)。
  • list_strings_filter(offset, count, filter):列出数据库中匹配的字符串(分页、过滤)。
  • list_strings(offset, count):列出数据库中的所有字符串(分页)。
  • decompile_function(address):反编译给定地址的函数。
  • disassemble_function(start_address):获取函数的汇编代码(地址:指令;注释)。
  • get_xrefs_to(address):获取给定地址的所有交叉引用。
  • get_xrefs_to_field(struct_name, field_name):获取命名结构体字段(成员)的所有交叉引用。
  • 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):设置局部变量的类型。

不安全函数(需要--unsafe标志):

  • dbg_get_call_stack():获取当前调用栈。
  • dbg_get_registers():获取所有寄存器及其值。此函数仅在调试时可用。
  • dbg_run_to(address):将调试器运行到指定地址。
  • dbg_exit_process():退出调试器。
  • dbg_continue_process():继续调试器。
  • dbg_enable_breakpoint(address, enable):启用或禁用指定地址的断点。
  • dbg_list_breakpoints():列出程序中的所有断点。
  • dbg_set_breakpoint(address):在指定地址设置断点。
  • dbg_delete_breakpoint(address):删除指定地址的断点。
  • dbg_start_process():启动调试器。

前提条件

安装

安装(或升级)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

提示工程

大型语言模型(LLMs)容易产生幻觉,你需要给出具体的提示。对于逆向工程,整数和字节之间的转换尤其成问题。下面是一个最小示例提示,如果你有更好的提示结果,欢迎讨论或提交问题:

你的任务是分析IDA Pro中的破解程序。你可以使用MCP工具来获取信息。通常使用以下策略:

  • 检查反编译代码并添加你的发现注释
  • 将变量重命名为更有意义的名称
  • 必要时更改变量和参数类型(特别是指针和数组类型)
  • 将函数名改为更具描述性的名称
  • 如果需要更多细节,反编译函数并添加你的发现注释
  • 永远不要自己转换数字基数。如果需要,请使用convert_number MCP工具!
  • 不要尝试暴力破解,仅从反汇编和简单Python脚本中推导解决方案
  • 最后创建一个report.md文件,记录你的发现和采取的步骤
  • 当你找到解决方案时,向用户提示你找到的密码以获取反馈

这个提示只是第一次实验,请分享如果你找到了改进输出的方法!

提高LLM准确性的技巧

大型语言模型(LLMs)是强大的工具,但它们有时难以处理复杂的数学计算或表现出"幻觉"(编造事实)。确保告诉LLM使用conver_number MCP,你可能还需要math-mcp进行某些操作。

另一点需要注意的是,LLMs在混淆代码上的表现不佳。在使用LLM解决问题之前,先查看二进制文件并花一些时间(自动)移除以下内容:

  • 字符串加密
  • 导入哈希
  • 控制流扁平化
  • 代码加密
  • 反编译技巧

你还应该使用Lumina或FLIRT等工具尝试解析所有开源库代码和C++ STL,这将进一步提高准确性。

SSE传输与无头MCP

你可以运行一个SSE服务器连接到用户界面,如下所示:

uv run ida-pro-mcp --transport http://127.0.0.1:8744/sse

安装idalib后,你还可以运行一个无头SSE服务器:

uv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/executable

注意idalib功能由Willi Ballenthin贡献。

手动安装

注意:本节适用于需要详细安装说明的LLMs和高级用户。

手动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
    }
  }
}

要检查连接是否正常,可以执行以下工具调用:

<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插件安装

当MCP服务器启动时,IDA Pro插件将自动安装。如果你禁用了--install-plugin选项,请使用以下步骤:

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

与其他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服务器。

开发

添加新功能是一个非常简单和流畅的过程。你只需要在mcp-plugin.py中添加一个新的@jsonrpc函数,你的函数就会在MCP服务器中可用,无需任何额外的样板代码!下面是一个视频,我在不到2分钟的时间内添加了get_metadata函数(包括测试):

https://github.com/user-attachments/assets/951de823-88ea-4235-adcb-9257e316ae64

要测试MCP服务器本身:

uv run mcp dev src/ida_pro_mcp/server.py

这将打开一个web界面(http://localhost:5173),允许你与MCP工具交互进行测试。

为了测试,我创建了一个到IDA插件的符号链接,然后直接向http://localhost:13337/mcp发送POST JSON-RPC请求。在启用符号链接后,你可以运行以下命令:

uv run ida-pro-mcp --install

生成直接提交到main的变更日志:

git log --first-parent --no-merges 1.2.0..main "--pretty=- %s"
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档