
什么是 x64dbg-MCP Server?
x64dbg-MCP Server 是适用于 x64dbg 的原生 Model Context Protocol 插件。它通过 HTTP 上的 JSON-RPC 暴露 x64dbg 功能,使兼容 MCP 的 AI 助手能够以编程方式控制调试会话。
该助手可以加载或附加到进程、设置断点、单步执行指令、检查寄存器、读取和修改内存、查看模块和线程、提取字符串、跟踪引用、分析 PE 结构,以及执行许多其他逆向工程操作。
该插件使用 Zig 编写,直接运行在 x64dbg 内部。它不需要 Python、.NET 或独立运行时。它支持 MCP 2024-11-05 规范,以及 Streamable HTTP 和旧版 SSE 传输方式。
仅将本软件用于合法的逆向工程、恶意软件分析、安全研究、教育,或其他已获得明确授权的工作。
主要功能
- 广泛的调试器控制:工具涵盖反汇编、执行、断点、寄存器、内存、模块、线程、调用栈、符号、引用、PE 分析、跟踪、转储、PEB 检查等功能。
- 全面的调试器事件覆盖:插件会记录初始化、停止、断点、异常、单步执行、进程附加、DLL 活动和线程活动等事件。
- 原生部署:插件不依赖外部运行时或框架。
- 支持 x32 和 x64:同一套代码可为两种 x64dbg 架构构建插件。
- 两种 MCP 传输方式:推荐使用 Streamable HTTP,SSE 用于支持旧版 MCP 客户端。
- 强制身份验证:每个请求都必须携带有效的 Bearer 令牌。
- 自动启动:服务器会在 x64dbg 启动时自动启动。
- 内置配置:x64dbg 的 Plugins 菜单提供绑定地址、端口和令牌设置。
- 交叉编译:Zig 可以从 Windows、WSL、Linux 或 macOS 构建 Windows 插件。
集成工作原理
x64dbg 启动时,插件会从 x64bridge.dll 和 x64dbg.dll 解析调试器 API 符号。随后,它会在后台线程上启动 HTTP 服务器。MCP 客户端发送经过身份验证的 JSON-RPC 请求,每个 MCP 工具都会映射到 x64dbg SDK 调用,例如设置断点、读取内存或恢复执行。
由于插件运行在 x64dbg 进程内部,因此它可以直接与调试器 API 通信。无需外部辅助进程或轮询服务。
安装插件
选项 1:安装发布版本
- 从项目的 GitHub releases 下载最新软件包。
- 解压软件包。
- 将其
dist/目录中的内容复制到 x64dbg 安装目录的根目录。 - 启动 x32 或 x64 版本的 x64dbg。
该发行包遵循 x64dbg 的目录结构,因此将其复制到根目录后,会同时安装两种架构对应的插件:
dist/
├── x32/
│ └── plugins/
│ └── x64dbg-MCP-Server.dp32
└── x64/
└── plugins/
└── x64dbg-MCP-Server.dp64服务器会自动启动。默认端口如下:
- x64:
0.0.0.0:9094 - x32:
0.0.0.0:9095
选项 2:从源代码构建
构建需要 Zig 0.16-dev 或更高版本。在仓库根目录中运行:
zig build -Doptimize=ReleaseSafe --prefix dist该命令会在 dist/ 下创建 x32 和 x64 插件文件。将该目录中的内容复制到 x64dbg 根文件夹,操作方式与安装发布包相同。
配置服务器和身份验证
在 x64dbg 中,打开 Plugins > x64dbg-MCP Server > Configure MCP Server...。在该对话框中可以更改绑定地址、端口和身份验证令牌。
- 当 MCP 客户端运行在同一台 Windows 系统上且不需要远程访问时,使用
127.0.0.1。 - 当需要从 WSL 或其他机器连接,并通过网络访问主机时,使用
0.0.0.0。 - 选择 Copy 以复制当前令牌。
- 选择 Generate 以轮换令牌。
首次运行时会自动生成 Bearer 令牌。使用错误令牌或未携带令牌的请求会收到 401 Unauthorized。保存的更改会立即生效,因为服务器会自动重启。配置存储在 x64dbg 可执行文件旁的 mcp_config.json 中。
服务器通过未加密的 HTTP 提供内存读写、进程操作和调试器命令执行权限。即使强制要求 Bearer 身份验证,也不要将其暴露在不受信任的网络中。
连接 MCP 客户端
推荐的 Streamable HTTP 配置
在 MCP 客户端配置中添加服务器条目,例如添加到 .mcp.json。对于默认的 x64 端口,使用:
{
"mcpServers": {
"x64dbg": {
"type": "http",
"url": "http://localhost:9094/",
"headers": {
"Authorization": "Bearer YOUR_TOKEN_HERE"
}
}
}
}将 YOUR_TOKEN_HERE 替换为从插件配置对话框中复制的令牌。如果使用 x32dbg,请将默认端口改为 9095。
为旧版客户端配置 SSE
如果你的 MCP 客户端仅支持 SSE,请选择 sse 传输方式,并在端点后追加 /sse:
{
"mcpServers": {
"x64dbg": {
"type": "sse",
"url": "http://localhost:9094/sse",
"headers": {
"Authorization": "Bearer YOUR_TOKEN_HERE"
}
}
}
}对于 WSL 或远程访问,请将 localhost 替换为 Windows 主机的 IP 地址,并确保服务器绑定到 0.0.0.0。
运行基本的 AI 辅助调试会话
连接客户端后,打开 x64dbg,并要求助手执行一小组调试任务。典型会话可以从以下操作开始:
Load calc.exe and break at the entry point.助手可以组合使用 LoadBinary、SetBreakpoint、run 和 WaitForPause 来加载可执行文件、恢复执行,并等待断点命中。
检查寄存器
目标暂停后,可以提出以下请求:
Show me the current CPU registers.助手可以调用 GetAllRegisters。在经过授权的调试会话中,如需更改值,可以使用 SetRegister。
读取并反汇编内存
要求助手检查当前指令指针附近的代码:
Read 64 bytes at the current instruction pointer and disassemble the next 10 instructions.这可以使用 GetCurrentAddress、ReadMemory 和 Disassemble。如需检查完整的已分析函数,请请求 DisassembleFunction。
单步执行代码
执行工具对应于熟悉的 x64dbg 操作:
StepInto跟进调用,对应 F7。StepOver跳过调用,对应 F8。StepOut执行至当前函数返回。run恢复执行,对应 F9。PauseDebug暂停目标。RunToAddress继续执行,直到到达指定地址。
例如:
Step over the next three instructions, then show the current address and call stack.助手可以调用三次 StepOver,然后调用 GetCurrentAddress 和 GetCallStack。
有效使用断点
该插件支持普通软件断点、硬件断点、内存断点、条件断点和异常断点。
条件断点示例
Set a breakpoint on the target function, but pause only when the specified x64dbg condition is true.助手可以使用 SetConditionalBreakpoint,并传入 x64dbg 条件表达式和可选的日志操作。相关工具可以启用、禁用、切换、删除断点,或重置断点命中次数。
硬件断点和内存断点
使用 SetHardwareBreakpoint,通过可用的调试寄存器监控读取、写入或执行操作。当按页面进行读取、写入或执行监控更符合调查需求时,请使用 SetMemoryBreakpoint。
在创建更多断点前,请要求助手调用 ListBreakpoints。这有助于避免调试器状态重复或冲突。
分析模块、符号和引用
服务器提供了多个工具,可将低级调试扩展到更广泛的程序分析:
ListModules报告已加载模块、基址和大小。AnalyzeModule检查 PE 节、入口点和映像大小。GetImports和GetExports检查导入表和导出表。SearchSymbols查找与模式匹配的符号。GetFunctions列出已分析的函数和标签。GetReferences定位指向目标地址的 CALL 和 JMP 引用。FindPattern扫描模块内存,并支持??通配符。GetStrings从模块内存中提取 ASCII 字符串。DetectOEP帮助定位加壳可执行文件的原始入口点。
一个实用的分析请求可能是:
List loaded modules, analyze the main executable, extract its ASCII strings, and show references to the selected function.高级提示
使用事件感知型工作流
不要假设目标在恢复执行后立即暂停。在 run、断点操作或其他异步调试器操作之后,使用 WaitForPause 或 WaitForEvent。GetEventLog 可以查看最近的断点、异常、DLL 加载及相关事件。
使用跟踪代替重复单步操作
如需记录较短的指令历史,请使用 TraceInto,在跟进调用时记录地址和反汇编结果。当应跳过调用时,请使用 TraceOver。这比发出许多独立的单步请求更方便。
批量检查表达式
EvalExpression 可计算地址、寄存器或算术表达式等 x64dbg 表达式。当需要同时监控多个值时,请使用 WatchExpressions 在一次请求中计算多个表达式。
保存并恢复分析状态
使用 CommentOrLabelAtAddress 和书签工具,为重要位置添加注释。调用 SaveDatabase,将 x64dbg 数据库保存为 .dd64 或 .dd32 文件。
谨慎应用补丁
WriteMemToAddress 会修改字节,而 Assemble 会在指定地址写入汇编指令。修改前请检查现有字节,并记录变更。使用 GetPatches 查看修改内容,使用 RestorePatches 恢复原始字节。
调查进程结构
使用 GetPEB 检查进程环境块字段,使用 GetSEHChain 检查 x32 结构化异常处理程序链,使用 GetArguments 从寄存器或栈中检查函数参数。FollowPointer 可按指定层数解引用指针链。
尽量减少网络暴露
除非需要远程连接,否则优先使用 127.0.0.1。如果必须绑定到 0.0.0.0,请使用可信的网络控制措施限制访问,保护令牌,并在怀疑已暴露时轮换令牌。请注意,传输协议是 HTTP,而不是加密的 HTTPS。
实用操作工具
GetDebugState检查调试会话是否处于活动状态,并报告 PID 和指令指针。AttachProcess按 PID 将 x64dbg 附加到正在运行的进程。ExecuteDebuggerCommand直接运行 x64dbg 命令。ListCommandsByCategory帮助 MCP 客户端发现可用工具。GetThreads、SwitchThread、SuspendThread和ResumeThread管理线程上下文。GetMemoryMap和GetDumpableRegions在读取或转储内存区域前识别这些区域。DumpMemory保存选定的内存范围,而DumpModule保存整个模块。StopDebug终止当前会话,RestartDebug重新启动会话。
结语
x64dbg-MCP Server 将 x64dbg 的原生调试功能连接到兼容 MCP 的 AI 助手,无需外部运行时。安装正确的 x32 和 x64 插件、复制生成的 Bearer 令牌,并配置 HTTP 或 SSE 端点后,即可通过自然语言请求执行完整的调试工作流。
请从仅限本地的绑定地址和简单的只读检查任务开始。然后逐步进行事件感知单步执行、条件断点、跟踪、PE 分析以及经过严格控制的内存修改。始终仅在获得授权的目标上使用服务器,并避免将其未加密的 HTTP 接口暴露给不可信网络。
