当前位置: 首页 > 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

只能说,很厉害。

http://www.xdnf.cn/news/538237.html

相关文章:

  • DV SSL证书管理主要有哪些功能?
  • C语言—字符函数和字符串函数
  • 如何实现从网页一键启动你的 Electron 桌面应用(zxjapp://)
  • pcie phy电气层(PCS)详解gen1、2 (rx)
  • 北斗卫星通讯终端的技术原理是什么
  • 2025-05-19 学习记录--Python-简易用户登录系统 + 计算天数
  • RAG策略
  • 第二章、IMU(Inertial Measurement Unit 惯性测量单元)
  • 包装可靠性测试【二】
  • C++寻位映射的奇幻密码:哈希
  • AtomicReference 和 volatile 的比较
  • C++--综合应用-演讲比赛项目
  • 让数据驱动增长更简单! ClkLog用户行为分析系统正式入驻GitCode
  • 【随手记】 Event Bus vs. Event Loop
  • 01、java方法
  • 【Python训练营打卡】day30 @浙大疏锦行
  • 盲盒APP开发——解锁盲盒经济无限可能
  • mapbox-gl强制请求需要accessToken的问题
  • Chromium 回调设计实战:BindOnce 与 BindRepeating 的最佳实践
  • 【css】【面试提问】css经典问题总结
  • Golang中的runtime.LockOSThread 和 runtime.UnlockOSThread
  • 嵌入式自学第二十四天
  • 整数的个数
  • Ollama 如何在显存资源有限的情况下合理分配给不同的服务?
  • 理解前端工程化
  • 新书速览|鸿蒙HarmonyOS NEXT开发之路 卷2:从入门到应用篇
  • java集成mqtt
  • 停等协议(Stop-and-Wait Protocol)
  • AI人工智能写作平台:AnKo助力内容创作变革!
  • 铅铋环境下应力腐蚀的疲劳试验装置