返回市场
罗伊达MCP服务器

罗伊达MCP服务器

作者:r0ysue67 星标更新:2025-05-15

项目介绍

r0idamcp

大型模型驱动的IDAPro智能自动化逆向工程单文件MCP服务器

交流与学习:添加微信:r0ysue(注意:加入MCP学习群)

该项目的优势包括:

  • 集成了市场上现有项目的大多数功能,并将继续根据问题进行维护和添加功能
  • 几乎没有依赖项:只需要最新版的FastMCP 2.0,无需复杂的UV或特定版本的Python
  • 强大的兼容性:一个支持所有MCP功能的大模型助手,无需对复杂依赖项和环境进行科学互联网配置,成功率极高
  • 极简代码:许多市场项目使用嵌套代码生成工具,导致可读性差。此项目被压缩成一个文件,mcp.tool声明与实现一一对应,高度可读且具有良好的扩展性和可扩展性

安装要求:

  • UV:不需要
  • Python:不需要(使用IDA自带的Python即可)
  • IDA Pro:推荐8.3及以上版本,最好是9
  • 支持的MCP客户端:全部

安装方法:

  1. 正常安装并使用IDA pro,运行idapyswitch以指定Python路径。

  2. 使用相同路径的Python安装pip,并通过pip安装fastmcp。

pip install fastmcp

  1. 将r0idamcp.py文件复制到IDA插件目录,如下所示:
Windows%appdata%\Hex-Rays\IDA Pro\plugins
Linux~/.idapro/plugins/
macOS~/Library/Application Support/IDA Pro/plugins/

安装完成!

使用过程:

  1. 打开IDA主界面,在下方的Python窗口中会有日志输出:
>>>r0mcp插件已加载,使用Edit->Plugins->r0mcp启动SSE服务器
  1. 点击:Edit ->Plugin ->r0idamcp,打开MCPserver,日志如下:
>>> 调用了r0mcp.run(),服务器启动
INFO:     启动了服务器进程[6804]
INFO:     等待应用程序启动。
INFO:     应用程序启动完成。
INFO:     Uvicorn正在运行于http://0.0.0.0:26868(按CTRL+C退出)

如果提示访问局域网设备,请同时允许局域网连接;防火墙允许26868通过或关闭。如果IDA和大模型助手在同一台计算机上运行,也可以将源代码中的0.0.0.0改为127.0.0.1以实现纯本地连接。

  1. 大多数具有MCP功能的大模型助手支持JSON配置文件配置:
{
  "mcpServers": {
    "r0idamcp": {
      "url": "http://192.168.1.2:26868/sse",
      "type": "sse"
    }
  }
}

192.168.1.2是运行IDA pro的计算机IP地址

如果使用GUI界面配置,应选择添加上述相同的URL的SSE服务器。在成功配置后检查连接状态时,如果在IDA下方的Python窗口中出现以下日志,表示连接成功:

INFO:     192.168.1.3:62966 - "GET /sse HTTP/1.1" 200 OK

现在可以开始大规模模型驱动的自动化逆向工程了!

已有功能:

  • check_connection确认其是否运行
  • 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)分页列出IDB中的所有函数
  • list_strings(offset, count)分页列出IDB中的所有字符串
  • 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)重命名函数内的局部变量
  • set_local_variable_type(function_address, variable_name, new_type): 指定局部变量类型
  • 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的声明创建或更新局部变量类型

为了达到最准确的执行效果,提示语应尽可能使用我的中文翻译(或功能名称),以提高命中率。

快去玩吧,孩子们!如果有任何疑问,请随时在群里提供反馈!我们将根据反馈进行修复或更新功能~

致谢: