一个简单的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文件,记录你的发现和采取的步骤
- 当你找到解决方案时,向用户提示你找到的密码以获取反馈
这个提示只是第一次实验,请分享如果你找到了改进输出的方法!
大型语言模型(LLMs)是强大的工具,但它们有时难以处理复杂的数学计算或表现出"幻觉"(编造事实)。确保告诉LLM使用conver_number
MCP,你可能还需要math-mcp进行某些操作。
另一点需要注意的是,LLMs在混淆代码上的表现不佳。在使用LLM解决问题之前,先查看二进制文件并花一些时间(自动)移除以下内容:
你还应该使用Lumina或FLIRT等工具尝试解析所有开源库代码和C++ STL,这将进一步提高准确性。
你可以运行一个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服务器,请按照以下步骤操作:
pip install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
C:\MCP\ida-pro-mcp
。cline_mcp_settings.json
。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>
当MCP服务器启动时,IDA Pro插件将自动安装。如果你禁用了--install-plugin
选项,请使用以下步骤:
src/ida_pro_mcp/mcp-plugin.py
到你的插件文件夹(Windows上为%appdata%\Hex-Rays\IDA Pro\plugins
)。Edit -> Plugins -> MCP
启动服务器。市面上有几个IDA Pro MCP服务器,但我自己创建了一个,原因如下:
如果你想查看它们,这里有一个列表(按我发现它们的顺序):
欢迎提交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"
