跳到主要内容
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.dll 和 x64dbg.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.

助手可以组合使用 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 接口暴露给不可信网络。