摘要:2020年6月ChatGPT3发布以来的五年之后,AI从横向发展(应用层面)到纵向发展(基础/底层层面)延伸,其不仅写代码,且调试代码/逆向代码/分析代码的持续深入。
2020年6月ChatGPT3发布以来的五年之后,AI从横向发展(应用层面)到纵向发展(基础/底层层面)延伸,其不仅写代码,且调试代码/逆向代码/分析代码的持续深入。
比如借助AI的利器MCP对代码进行逆向,调试,开发等等(客户端Cline)。
pip uninstall ida-pro-mcppip install https://github.com/mrexodia/ida-pro-mcp/archive/refs/heads/main.zip//配置 MCP 服务器并安装 IDA 插件:ida-pro-mcp --install打开ida pro,然后随便载入一个cpp文件,菜单栏-》Edit->Plugins里面选择MCP,此时ida output面板显示
表示MCP服务启动成功。
客户端配置:
{ "mcpServers": { "github.com/mrexodia/ida-pro-mcp": { "autoApprove": [ "get_metadata", "get_function_by_name", "get_function_by_address", "get_current_address", "get_current_function", "convert_number", "list_globals_filter", "list_globals", "list_imports", "list_strings_filter", "list_strings", "list_local_types", "decompile_function", "disassemble_function", "get_xrefs_to", "get_xrefs_to_field", "get_callees", "get_callers", "get_entry_points", "set_comment", "rename_local_variable", "rename_global_variable", "set_global_variable_type", "get_global_variable_value_by_name", "get_global_variable_value_at_address", "rename_function", "set_function_prototype", "declare_c_type", "set_local_variable_type", "get_stack_frame_variables", "get_defined_structures", "rename_stack_frame_variable", "create_stack_frame_variable", "set_stack_frame_variable_type", "delete_stack_frame_variable", "read_memory_bytes", "data_read_byte", "data_read_word", "data_read_dword", "data_read_qword", "data_read_string", "check_connection", "search_files", "list_imports_filter" ], "disabled": false, "timeout": 1800, "type": "stdio", "command": "D:\\BaiduNetdiskDownload\\IDA Professional 9.0\\python311\\python.exe", "args": [ "D:\\BaiduNetdiskDownload\\IDA Professional 9.0\\python311\\Lib\\site-packages\\ida_pro_mcp\\server.py" ] } }}然后我们可以看到ida的mcp了
提示词:分析下当前ida打开的文件,它的分析结果跟个人分析基本一致
我已经成功分析了IDA Pro中当前打开的CPP.exe文件。以下是详细的分析报告:IDA Pro分析报告 - CPP.exe文件基本信息文件路径: D:\Visual Studiio Project\ConsoleApp3\x64\Debug\CPP.exe基地址: 0x140000000文件大小: 0x176f000 (24.4 MB)哈希值:MD5: 3030631c0cf846a8dc538f479f7d7c4aSHA256: 9f7593b80d273cd4fb2b9ec3b5e1b3861d83f139349728079340e1dea614f323程序功能分析这是一个C++编写的调试器程序,主要功能是:附加到指定进程进行调试使用Capstone引擎进行反汇编实现单步调试功能监控和处理调试事件主要函数分析main函数 (0x1401c09a0)函数大小: 0x552 (1362字节)功能: 程序的主入口点,实现完整的调试器逻辑主要逻辑流程:用户输入: 提示用户输入要附加的进程ID进程附加: 使用DebugActiveProcess附加到目标进程Capstone初始化: 初始化反汇编引擎调试事件循环: 使用WaitForDebugEvent等待调试事件异常处理:处理断点异常 (EXCEPTION_BREAKPOINT, 0x80000003)处理单步异常 (EXCEPTION_SINGLE_STEP, 0x80000004)反汇编: 使用Capstone反汇编当前指令单步调试: 设置EFLAGS的TF位启用单步调试关键API调用调试相关API:DebugActiveProcess - 附加到进程WaitForDebugEvent - 等待调试事件ContinueDebugEvent - 继续调试DebugActiveProcessStop - 停止调试线程操作API:OpenThread - 打开线程句柄GetThreadContext - 获取线程上下文SetThreadContext - 设置线程上下文内存操作API:OpenProcess - 打开进程句柄ReadProcessMemory - 读取进程内存技术特点反汇编引擎: 使用Capstone引擎进行指令反汇编单步调试: 通过设置EFLAGS的TF位实现硬件单步异常处理: 专门处理断点和单步异常实时反汇编: 在调试过程中实时显示反汇编代码程序用途这是一个教学或研究用途的调试器程序,具有以下特点:演示了Windows调试API的基本用法展示了如何实现简单的单步调试功能集成了Capstone反汇编引擎使用C++标准库进行输入输出安全评估该程序本身是良性的调试工具,但具有以下能力:可以附加到任意进程进行调试能够读取目标进程的内存可以修改目标进程的线程上下文具备基本的反汇编能力这是一个功能完整的调试器实现,适合用于学习Windows调试API和反汇编技术。MCP-WinDBG(调试分析)
1.先置条件
首先要确定cdb的位置,注意新版的windbg preview可能没有cdb。此时我们就需要重新安装
新的windbg preview可能没有cdb这种东西,所以需要重新安装搜索cdb:PS D:\windbg-mcp> winget search -q "windows sdk"名称 ID 版本 源Windows SDK Microsoft.WindowsSDK.10.0.17134 10.0.17134.12 wingetWindows SDK Microsoft.WindowsSDK.10.0.18362 10.0.18362.0 wingetGit for Windows SDK Git.SDK 1.0.8 winget搜索之后安装
winget install --id Microsoft.WindowsSDK.10.0.18362 --source wingetnget//查找cdb位置where cdb//如果没有找到,则运行以下命令:Start-Process "https://go.microsoft.com/fwlink/p/?linkid=2120843"//下载之后安装,勾选debugger调试即可。//比如个人的的cdb在:D:\\Windows Kits\\10\\Debuggers\\x64\\cdb.exe注意这个cdb我们的MCP-windbg配置文件需要。
新建一个虚拟的python环境以及安装mcp-windbg
python -m venv .venv.\.venv\Scripts\Activate.ps1python -m pip install --upgrade pippip install mcp-windbg我们配置文件用这个虚拟环境的python路径:
D:\\windbg-mcp\\.venv\\Scripts\\python.exe最后我们在Cline的配置文件里面配置下:
"mcpServers": { "mcp_windbg": { "type": "stdio", "command": "D:\\windbg-mcp\\.venv\\Scripts\\python.exe", "args": ["-m", "mcp_windbg", "--cdb-path", "D:\\Windows Kits\\10\\Debuggers\\x64\\cdb.exe"], "env": { "_NT_SYMBOL_PATH": "SRV*C:\\Symbols*https://msdl.microsoft.com/download/symbols" } } }此时我们就可以看到windbg的mcp了
比如让它分析一个dump,测试下如下:
Task Completed我已经使用WinDbg成功分析了您的Flutter应用程序崩溃转储文件。以下是完整的分析报告:- __Flutter相关__: - flutter_windows.dll (Flutter引擎) - 多个Flutter插件 (window_manager, tray_manager, url_launcher等)- __输入法相关__: - SogouPY.ime (搜狗输入法) - ichat_bundle64.dll - isgpet_bundle64.dll- __系统模块__: - win32u.dll, user32.dll, kernel32.dll, ntdll.dll - 图形相关模块 (d3d11, opengl32, dxgi等)### 4. 分析结论__崩溃原因__: 这是一个典型的Windows消息循环断点异常。应用程序在主消息循环中调用`GetMessageW`函数时遇到了断点指令。__可能的原因__:1. __调试器断点__: 应用程序可能被调试器设置了断点2. __异常处理__: 应用程序可能正在处理其他异常时触发了断点3. __输入法冲突__: 搜狗输入法可能与Flutter应用程序存在兼容性问题4. __消息队列问题__: Windows消息队列可能处于异常状态__建议解决方案__:1. 检查是否有调试器附加到应用程序2. 更新搜狗输入法到最新版本3. 检查Flutter应用程序的消息处理逻辑4. 验证Firebase插件的兼容性5. 考虑在消息循环中添加异常处理这是一个相对常见的Windows桌面应用程序崩溃类型,通常与消息处理或第三方组件兼容性有关。## 崩溃分析总结效果还是不错滴,速度也快。
下面是chrome-devtools的mcp和ida pro逆向的mcp一级windbg-mcp的全配置(Cline)
{ "mcpServers": { "mcp_windbg": { "type": "stdio", "command": "D:\\windbg-mcp\\.venv\\Scripts\\python.exe", "args": ["-m", "mcp_windbg", "--cdb-path", "D:\\Windows Kits\\10\\Debuggers\\x64\\cdb.exe"], "env": { "_NT_SYMBOL_PATH": "SRV*C:\\Symbols*https://msdl.microsoft.com/download/symbols" } }, "chrome-devtools": { "autoApprove": [ "list_pages" ], "disabled": false, "timeout": 60, "type": "stdio", "command": "npx", "args": [ "chrome-devtools-mcp@latest", "--chrome-executable-path=C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" ] }, "github.com/mrexodia/ida-pro-mcp": { "autoApprove": [ "get_metadata", "get_function_by_name", "get_function_by_address", "get_current_address", "get_current_function", "convert_number", "list_globals_filter", "list_globals", "list_imports", "list_strings_filter", "list_strings", "list_local_types", "decompile_function", "disassemble_function", "get_xrefs_to", "get_xrefs_to_field", "get_callees", "get_callers", "get_entry_points", "set_comment", "rename_local_variable", "rename_global_variable", "set_global_variable_type", "get_global_variable_value_by_name", "get_global_variable_value_at_address", "rename_function", "set_function_prototype", "declare_c_type", "set_local_variable_type", "get_stack_frame_variables", "get_defined_structures", "rename_stack_frame_variable", "create_stack_frame_variable", "set_stack_frame_variable_type", "delete_stack_frame_variable", "read_memory_bytes", "data_read_byte", "data_read_word", "data_read_dword", "data_read_qword", "data_read_string", "check_connection", "search_files", "list_imports_filter" ], "disabled": false, "timeout": 1800, "type": "stdio", "command": "D:\\BaiduNetdiskDownload\\IDA Professional 9.0\\python311\\python.exe", "args": [ "D:\\BaiduNetdiskDownload\\IDA Professional 9.0\\python311\\Lib\\site-packages\\ida_pro_mcp\\server.py" ] } }}从此我们拥有了逆向,调试,以及chrome开发者工具分析的能力。
为了畅通AI环境,后端模型是DeepSeek。如果极端需求可以切到Claude和ChatGPT。
至此一个完整的底层简陋智能体搭建完成。
本篇展示了AI对于代码逆向,分析,调试的能力。
来源:opendotnet