跳到主要内容
AI教程

使用 x64dbg-MCP Server 将 AI 助手连接到 x64dbg

了解如何安装 x64dbg-MCP Server、保护其 HTTP 端点、连接兼容 MCP 的 AI 助手,并执行常见调试任务,例如加载二进制文件、设置断点、检查寄存器、读取内存、跟踪代码和分析模块。

使用 x64dbg-MCP Server 将 AI 助手连接到 x64dbg

什么是 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.dllx64dbg.dll 解析调试器 API 符号。随后,它会在后台线程上启动 HTTP 服务器。MCP 客户端发送经过身份验证的 JSON-RPC 请求,每个 MCP 工具都会映射到 x64dbg SDK 调用,例如设置断点、读取内存或恢复执行。

由于插件运行在 x64dbg 进程内部,因此它可以直接与调试器 API 通信。无需外部辅助进程或轮询服务。

安装插件

选项 1:安装发布版本

  1. 从项目的 GitHub releases 下载最新软件包。
  2. 解压软件包。
  3. 将其 dist/ 目录中的内容复制到 x64dbg 安装目录的根目录。
  4. 启动 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.

助手可以组合使用 LoadBinarySetBreakpointrunWaitForPause 来加载可执行文件、恢复执行,并等待断点命中。

检查寄存器

目标暂停后,可以提出以下请求:

Show me the current CPU registers.

助手可以调用 GetAllRegisters。在经过授权的调试会话中,如需更改值,可以使用 SetRegister

读取并反汇编内存

要求助手检查当前指令指针附近的代码:

Read 64 bytes at the current instruction pointer and disassemble the next 10 instructions.

这可以使用 GetCurrentAddressReadMemoryDisassemble。如需检查完整的已分析函数,请请求 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,然后调用 GetCurrentAddressGetCallStack

有效使用断点

该插件支持普通软件断点、硬件断点、内存断点、条件断点和异常断点。

条件断点示例

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 节、入口点和映像大小。
  • GetImportsGetExports 检查导入表和导出表。
  • 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、断点操作或其他异步调试器操作之后,使用 WaitForPauseWaitForEventGetEventLog 可以查看最近的断点、异常、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 客户端发现可用工具。
  • GetThreadsSwitchThreadSuspendThreadResumeThread 管理线程上下文。
  • GetMemoryMapGetDumpableRegions 在读取或转储内存区域前识别这些区域。
  • DumpMemory 保存选定的内存范围,而 DumpModule 保存整个模块。
  • StopDebug 终止当前会话,RestartDebug 重新启动会话。

结语

x64dbg-MCP Server 将 x64dbg 的原生调试功能连接到兼容 MCP 的 AI 助手,无需外部运行时。安装正确的 x32 和 x64 插件、复制生成的 Bearer 令牌,并配置 HTTP 或 SSE 端点后,即可通过自然语言请求执行完整的调试工作流。

请从仅限本地的绑定地址和简单的只读检查任务开始。然后逐步进行事件感知单步执行、条件断点、跟踪、PE 分析以及经过严格控制的内存修改。始终仅在获得授权的目标上使用服务器,并避免将其未加密的 HTTP 接口暴露给不可信网络。