什么是 MCP?
简单理解,MCP(Model Context Protocol)是一套面向大语言模型(LLM)的交互协议,它定义了 LLM 与其他工具(如 IDA Pro、调试器、文件系统等)之间的通信标准。通过 MCP,语言模型不再只是一个“文本生成器”,而是可以主动调用外部工具执行任务的控制器。
MCP 为大语言模型提供了一系列可以调用的“工具”。
大语言模型的智能体自主决定,如何使用 MCP 提供的“工具”。
IDA-MCP 提供了哪些能力?
让我们来看看 IDA-MCP 的能力边界吧。
MCP 提供了一整套操作函数的 API,包括函数获取、重命名、反编译、汇编查看等:
-
• 获取函数信息: -
• get_function_by_name(name)
-
• get_function_by_address(address)
-
• get_current_function()
-
• list_functions(offset, count)
(分页列出所有函数) -
• 获取函数内容: -
• disassemble_function(start_address)
:获取函数的指令级反汇编(含注释)。 -
• decompile_function(address)
:获取函数的伪代码文本(类似 IDA 的 F5 功能)。 -
• 函数操作: -
• rename_function(address, new_name)
:重命名函数。 -
• set_function_prototype(address, prototype)
:设置函数原型,便于后续分析与类型传播。 -
• 全局变量操作: -
• list_globals(offset, count)
-
• list_globals_filter(offset, count, filter)
:支持名称模糊搜索。 -
• rename_global_variable(old_name, new_name)
-
• set_global_variable_type(variable_name, new_type)
-
• 本地类型管理: -
• list_local_types()
:列出所有本地结构体/类型定义。 -
• declare_c_type(c_declaration)
:通过 C 语法声明结构体或类型,类似 IDA 中的 Local Types 添加。 -
• 局部变量管理: -
• rename_local_variable(function_address, old_name, new_name)
-
• set_local_variable_type(function_address, variable_name, new_type)
-
• 字符串提取: -
• list_strings(offset, count)
-
• list_strings_filter(offset, count, filter)
:支持模糊匹配搜索字符串常量。 -
• 注释设置: -
• set_comment(address, comment)
:在反汇编视图和伪代码中同时设置注释。 -
• get_xrefs_to(address)
:获取对某个地址的引用(如函数调用、数据访问等)。 -
• get_xrefs_to_field(struct_name, field_name)
:定位对结构体特定字段的引用。 -
• get_entry_points()
:返回所有程序入口点(可执行文件的主函数、DLL 导出函数等)。 -
• 调试信息查看: -
• dbg_get_registers()
-
• dbg_get_call_stack()
-
• dbg_list_breakpoints()
-
• 调试流程控制: -
• dbg_start_process()
-
• dbg_continue_process()
-
• dbg_exit_process()
-
• dbg_run_to(address)
-
• 断点控制: -
• dbg_set_breakpoint(address)
-
• dbg_delete_breakpoint(address)
-
• dbg_enable_breakpoint(address, enable)
安装与配置运行
idalib 无头模式
pip install git+https://github.com/mrexodia/ida-pro-mcpuv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/executable
配置 mcp 客户端(cursor)
{"mcpServers": {"ida-mcp": {"url": "http://192.168.8.121:8745/sse","transport": "streamable_http" } }}
ida 模式
pip install git+https://github.com/mrexodia/ida-pro-mcpida-pro-mcp --install
案例学习
当前正在逆向的程序可能用到了什么库?
画出 45BD10 函数的交叉引用图,mermid 画图
讨论
虽然大语言模型(LLM)近年来在安全领域被广泛应用,但我们必须明确,LLM 不是逆向分析的万能解药。尤其在与 IDA 分析结合的场景中,LLM 并不能、也不应该被用来“解决分析中本质困难的问题”——比如结构模糊、语义不明、控制流复杂等深层技术挑战。这些问题本质上仍依赖分析师自身的知识储备、经验判断和精细操作,而不是语言模型能替代完成的。
LLM 真正的价值,在于它是一种高效的信息驱动器与指令生成器,它最适合的场景不是推理,而是“加速”;不是“解决不了的问题”,而是“可以做但很耗时间的操作”。而 MCP 的出现,正好提供了这一提效链条的技术基础——它让 LLM 能够通过结构化接口控制 IDA,实现信息提取、注释、重命名、伪代码调度、交叉引用查询等原本需要人工多次点击或写脚本完成的操作流程。
在实际使用中,LLM + MCP + IDA 的组合非常适合用来简化那些重复性强、逻辑简单但操作繁琐的日常工作。例如:自动提取所有调用某 API 的函数、给未命名的函数批量加上基于调用特征的语义化命名、为结构体字段添加注释说明、标记所有可疑 memcpy 的位置并生成交叉引用图等等。这些任务的共性在于——分析师完全可以手动完成,只是太慢了、太烦了、不值得浪费大量注意力。
这正是“效率工具”的核心价值:不改变你的思考过程,但显著减少你在操作层的时间浪费。你依然是分析的决策者,LLM 和 MCP 只是你派出去干活的“助手”。你只需要告诉它们你的意图,它们就可以把你从点鼠标、写脚本、查 cross-ref 这些琐碎任务中解放出来,让你专注在真正有价值的判断和推理上。
所以我们必须强调:**不要把 LLM 当作问题的解决者,而要把它当作你动手能力的放大器。**IDA + MCP 是一台极其强大、但依然依赖人为控制的“机械臂”;而 LLM,是那个理解你命令并把它转化为精确动作的“语音控制台”。这三者的组合,不是为了取代分析师,而是为了让分析师的时间与精力,花在最值得的地方。
因此,当我们使用 LLM 和 MCP 的时候,不是为了让它“告诉你一个漏洞在哪里”,而是让它“帮你迅速准备好你自己去找漏洞所需要的一切信息”。它是效率工具,而不是智能分析系统,更不是全自动安全专家。理性定位,才能高效使用。
|
|
|
重复性操作 |
|
|
模糊定位任务 |
|
|
结构辅助任务 |
|
|
交互式提问任务 |
|
|
简单语义理解与代码生成 |
|
|
复杂路径追踪/语义建模任务 |
|
|
漏洞检测与挖掘 |
|
|
原文始发于微信公众号(二进制磨剑):IDA 逆向分析不再重复劳动:MCP × LLM 的自动化实践
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论