当前位置: 首页 > news >正文

使用MCP驱动IDA pro分析样本

最近国外的牛人开发了一个ida pro的mcp server,项目的地址为mrexodia/ida-pro-mcp: MCP Server for IDA Pro,实现了通过自然对话来分析样本。

今天我们试用一下。

MCP Server for IDA Pro项目简介

这个mcp server提供下面这些工具,基本涵盖了IDA常用的操作。

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):获取函数的汇编代码 (address: instruction; comment)。
get_xrefs_to(address):获取对给定地址的所有交叉引用。
get_entry_points():获取数据库中的所有入口点。
set_comment(address, comment):在函数 disassembly 和 pseudocode 中为给定地址设置注释。
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中需要安装一个插件,这个插件开启一个web server,mcp server调用插件提供的web api,插件根据mcp server提交的指令在IDA中执行对应的操作。

drawio

一、下载部署

将项目的源代码下载到本地后,使用vscode打开

cd ida-pro-mcp
# 同步项目依赖
uv sync
# 激活python环境
.venv\Scripts\activate
# 测试代码,没有报错,说明代码没问题
uv run src/ida_pro_mcp/server.py

二、安装ida pro插件

插件的位置mcp-plugin.py

将这个文件拷贝到IDA pro的插件目录下,我的是D:\tools\IDA_Pro_v8.3_Portable\plugins

这个插件最低要求是IDA 8.3,python环境为python3.11+。

打开IDA,点击菜单Edit->Plugins->MCP,就会开启web服务。

image-20250519203225944

三、在cherry stdio中使用

在cherry stdio的mcp配置中添加下面的配置,根据你的代码位置修改目录。

"ida-pro-mcp": {"command": "uv","args": ["--directory","D:\\博客\\mcp1\\ida-pro-mcp\\src\\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"]}

测试一下效果,我已经打开了一个恶意代码。

image-20250519205106315

image-20250519205132381

image-20250519205529069

只能说,很厉害。

相关文章:

  • MongoDB的管道聚合
  • 物联网之使用Vertx实现HTTP/WebSocket最佳实践
  • WordPress搜索引擎优化的最佳重定向插件:入门指南
  • 146. LRU 缓存
  • C++字符串处理:`std::string`和`std::string_view`的区别与使用
  • R 语言科研绘图第 49 期 --- 热力图-相关性
  • Geotools中关于坐标转换纬度超限问题
  • vue2、vue3项目打包生成txt文件-自动记录打包日期:git版本、当前分支、提交人姓名、提交日期、提交描述等信息 和 前端项目的版本号json文件
  • 物联网数据湖架构
  • 【C++】异常解析
  • YouTube视频字幕转成文章算重复内容吗?
  • 五分钟完成PolarDB替换postgresql
  • paddle ocr本地化部署进行文字识别
  • 基于Elasticsearch的搜索引擎简介
  • 为 Windows 和 Ubuntu 中设定代理服务器的详细方法
  • 区块链blog2_中心化与效率
  • 解决软件连接RabbitMQ突发System.IO.IOException: 无法从传输连接中读取数据: 远程主机强迫关闭了一个现有的连接异常
  • VR 互动实训的显著优势​
  • 一文了解VR拍摄制作
  • 江协科技EXTI外部中断hal库实现
  • 印军称中国向巴基斯坦提供防空系统协助,外交部:中方十分重视与印、巴两国关系
  • 牛市早报|上市公司重大资产重组新规出炉,4月经济数据将公布
  • 福建、广西等地有大暴雨,国家防总启动防汛四级应急响应
  • 义乌至迪拜“铁海快线+中东快航”首发,物流成本降低18%
  • 英国警方再逮捕一名涉嫌参与首相住宅纵火案嫌疑人
  • 气急败坏!20多名台湾艺人被台当局列为“重点核查对象”