x64dbg 动态调试(Windows)
SkillDev toolsx64dbg 调试(Windows):attach、断点、Scylla。 触发词:x64dbg、Windows调试、Scylla
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the x64dbg 动态调试(Windows) skill
What this skill tells your AI
The instructions your AI receives, as published by dslsdzc/rev-skills in .claude/skills/re-x64dbg/SKILL.md and read by ahel’s review.
何时使用 / 何时不用
- 用:Windows 原生目标(PE)动态调试;attach/启动/断点/内存搜索;脱壳后 Scylla 修复 IAT
- 不用:Linux 目标(走 [[re-gdb]]);macOS 目标([[re-lldb]]);WSL 内分析(跨边界不可 attach,见 [[re-analyze/platform-tips]] WSL 分支)
- 不用:只读内存不交互(Windows 侧用 procdump/DumpIt + Volatility,见 [[re-analyze/platform-tips]] Windows 分支)
- 不用:无 UI 的自动化跑批/大量脚本操作(重活交给命令框与脚本,见 [[commands]])
- 用:需要寄存器/内存级证据链的验证场景(授权校验路径、解密时刻、调用参数),动态结论落 [[re-analyze/analysis-contract]]
工具准备
参考 [[re-analyze/platform-tips]] Windows 分支——attach 需要管理员权限;内存转储工具链 procdump/DumpIt。
x64dbg
- 下载: GitHub
x64dbg/x64dbgrelease(zip 解压即用,x64dbg.exe;同包内 x32dbg.exe 管 32 位目标) - Windows:
choco install x64dbg - 验证: 打开 x64dbg.exe,
File > Open加载任意 exe 能停在入口 - 版本: 2023 年 v1.0 为唯一正式稳定版;2025.06.30 起改 CalVer 大版本(类型系统重做、AVX-512、脚本引擎重写);快照版(dev 滚动)比 release 新但有回归风险——正式分析用 release,详见 [[gotchas]]
- 界面三件套: CPU 视图(反汇编/寄存器/内存/栈四窗格)、底部命令框(表达式+命令,见 [[commands]])、视图切换 Alt+C / Alt+M / Alt+B 等
Scylla(IAT 修复插件)
- 新版 x64dbg 官方 release 已内置(插件目录 plugins/ 下有 Scylla,Ctrl+I 打开)
- 独立版: GitHub
NtQuery/Scyllarelease - 验证: x64dbg 插件菜单出现 Scylla,能 Attach 到进程并列出模块
OllyDbg(旧 32 位)
- 下载: 官网 ollydbg.de(仅 32 位,x64dbg 出现前的主力)
- 验证: 打开加载 32 位 exe 正常
- 注意: 插件/脚本/数据库与 x64dbg 不通用(见 [[gotchas]])
操作步骤
-
附加与启动两种模式(先选对入口方式):
- 启动(
File > Open/ F3 / 拖拽 exe 到窗口):调试器从进程创建就接管,默认停在系统断点(ntdll);Alt+F9跑到用户代码 - 断点时机:
Options > Settings > Events标签可勾选 System/Entry Breakpoint、System/User TLS Callbacks、DLL Load/Unload、Thread Create/Exit、Exit Breakpoint——需要断入口前逻辑(TLS 回调、构造函数、DLL 加载)时在这里开对应事件,错过无法重放 - 附加(
File > Attach/ Alt+A,管理员权限):进程已在运行,早期初始化已执行完——防调试/防附加逻辑可能已跑过,错过就补不回来;多线程进程附加后先 F12 暂停再下断,避免线程竞态;结束用detach/Alt+F2 - 无窗口服务/后台进程: attach 后按进程名/pid 过滤
- 动态前先静态初勘: [[re-triage]] 哈希/壳识别 → [[re-format-pe]] 看节区权限与入口——决定断点下在哪、要不要先处理反调试
- 附加失败(权限/保护)见坑 1、3
- 启动(
-
断点族:
F2地址/符号处软断点(INT3);Shift+F2条件断点,例:[401000]==0x90(仅当内存值满足)、eax==0x1000;断点窗口Alt+B管理(Space 启停、Delete 删除、双击改条件/日志)- 硬件断点: 选中行右键 > Hardware breakpoint(执行/读/写),或命令
bph——走 DR 寄存器,最多 4 个,可断数据访问,不修改代码字节(抗完整性校验) - 内存断点:
Alt+M内存窗口选中区域右键 > Set Memory BPX(访问/写入触发,GUARD_PAGE 实现)——查密钥解密时刻、脱壳自解密代码常用 - 日志/命令断点: 断点窗口右键设 log 表达式与命中命令,不中断只记录——批量验证调用参数
- 断点不命中先查模块加载:
Alt+E模块窗口看目标模块是否已加载;跨重载下断点用API名或模块.函数形式(如bp kernel32.VirtualAlloc),模块重载后自动生效
-
运行与跟踪组合:
F9继续运行;F4运行到光标;Ctrl+F9运行到函数返回(配合F8跳过 call 后快速出函数);Alt+F9运行到用户代码(从系统断点/库代码回到用户模块);F12暂停;Ctrl+F2重启会话F7/F8单步(步入/步过);Shift+F7/Shift+F8单步但跳过异常(系统 API 内部异常多时用)- 条件跟踪: 命令
ticnd <条件>/tocnd <条件>连续单步直到条件成立——自动遍历解密循环/搜索特定状态;trace 记录(opentrace命令 + 运行)可回放指令流 - 命令行组合见 [[commands]](
bp/bph/bpm/find/savedata等底部命令框输入)
-
内存窗口与搜索:
Alt+M打开 Memory Map:看节区权限(RWX 异常=壳/解密段)、模块列表- 搜索:
Ctrl+B二进制模式(如55 8B EC,支持?通配),Ctrl+F当前视图查找,Shift+D模块内字符串 - 定位流程: 字符串/常量 →
Ctrl+R找交叉引用 → 引用处断点/上溯调用者——校验比较点、解密函数都从"被谁引用"开始 - Dump 窗口
Ctrl+G跳地址;Ctrl+E编辑内存(改字节绕校验) - 导出: 命令
savedata <文件> <地址> <大小>存内存区段;minidump <文件>生成全内存 dmp 供 [[re-mem-forensics]]
-
寄存器与调用栈:
- 寄存器窗口直接改值(右键改 EAX/EFLAGS 等)——改返回寄存器(
EAX=0)或标志位是最快的分支改写 Alt+K调用栈窗口: 回溯返回地址链,定位"谁调了这里";栈窗格看局部变量/参数(x64 传参在 RCX/RDX/R8/R9,栈上在 [rsp+0x28] 起)- 对调用目标下断点(
bp <API名>)看参数,是理清加密/校验调用最直接的路径
- 寄存器窗口直接改值(右键改 EAX/EFLAGS 等)——改返回寄存器(
-
反调试绕过:
- 右键寄存器窗口改 EFlags/ZF 等标志位
- 断
IsDebuggerPresent/NtQueryInformationProcess→ 改返回寄存器(EAX=0)后F9 - 时间差/执行计数类: 断点比较指令处改比较寄存器
- 先静态定位检测点([[re-ida]] / [[re-format-pe]] 找检测 API 引用与特征串),再选绕过方式: 单点改返回值/标志、ScyllaHide 批量隐藏、或直接静态 patch 检测点——顺序是"先点后面",全家桶开不出针对性结果
- 反调试插件 ScyllaHide(x64dbg 插件管理器安装)批量隐藏调试痕迹;边界与绕过不了的情况见 [[gotchas]]
-
Scylla 修复 IAT(脱壳后):
Plugins > Scylla(Ctrl+I)→ 填 OEP → IAT Autosearch → Get Imports → Dump → Fix Dump- 流程: 壳内运行到 OEP(看堆栈/内存已解密的特征,或对 OEP 下硬件断点)→
Ctrl+I打开 Scylla → OEP 字段填完整 VA(通常自动填充为入口点+ImageBase,手填也填 VA 不是 RVA)→IAT Autosearch(普通/高级两种模式,结果差时都试)→Get Imports校验导入 →Dump存出进程镜像 →Fix Dump选刚才的 dump 文件,输出修复后的干净 exe(*_SCY.exe) - 失败形态: 日志出现
IAT not found at OEP ...= OEP 填错,回调试器确认真实 OEP 重来;Get Imports 后红色无效项可 Cut thunk 删除;dump 文件直接跑不起来是正常的——没 Fix Dump 就没有 IAT - 修复后的文件 sha256 与原始对照存证(见 [[re-triage]])
- 流程: 壳内运行到 OEP(看堆栈/内存已解密的特征,或对 OEP 下硬件断点)→
-
补丁与保存(绕校验的持久化):
Ctrl+E改字节或Space原地汇编 →View > Patches(Ctrl+P)查看修改列表 →Save file写回磁盘成新 exe /Save patch导出.1337补丁文件(可分发复用)- 补丁前先记录原始字节,回滚用
Undo selection(Ctrl+Backspace);补丁定位方法论见 [[re-patching]]
-
证据核对(收尾):断点命中记录/寄存器与内存证据(
Ctrl+E查看后存档)、savedata/minidump导出产物、Scylla 修复文件 sha256——全部对照 [[re-triage]] 初勘值入档,结论写 [[re-analyze/analysis-contract]]
跨域联合
- [[re-binary-core]]:工作流第 6 步(Windows 调试器)
- [[re-anti-analysis]]:脱壳(运行到 OEP + Scylla 修复)核心工具
- [[re-cracking]]:注册码/校验逻辑定位
- [[re-imports]]:Scylla 修复后的 IAT 完整性对照
- [[re-patching]]:调试确认校验点后做持久化补丁
- [[re-triage]]:样本哈希/初勘先行,调试结论与其对照
- 与 [[re-memdump]](Windows 侧 procdump 兜底)互补,见 [[re-analyze/platform-tips]]
常见坑与陷阱
- 需要管理员权限:attach 高权限进程/服务失败——以管理员启动 x64dbg,仍失败查保护进程
- 反调试/反 attach:
ThreadHideFromDebugger/NtSetInformationThread或断网检测——用 ScyllaHide 插件隐藏调试痕迹,或先静态 patch 自检点 - PPL 进程无法附加(Protected Process Light,如部分 EDR/系统进程)——x64dbg 无驱动无法附加,换内核调试或放弃该目标
- 位数匹配:64 位目标必须 x64dbg(x32dbg 只支持 32 位);混用会加载失败/崩溃
- attach 失败先区分权限与 PPL/保护进程:现象——以管理员运行 x64dbg 仍 attach 失败;原因——普通权限限制管理员可解决,PPL(Protected Process Light)取决于 Signer Level 等级(EDR 常见 PPL-Windows TCB/Antimalware),非对应级别无法附加;对策——先确认目标是否 PPL(Process Explorer 的 Protection 列)及其 Signer Level,再按级别准备对应调试能力(同级别驱动/内核调试),见 [[re-analyze/platform-tips]] Windows 分支
- 程序只在 x64dbg 下崩 → 查调试器特征检测:现象——样本原生环境正常、换其他调试器也正常,唯独 x64dbg 加载/附加后崩溃或行为跳变;原因——样本检测调试器特征(x64dbg 模块/窗口类/DLL 名称/内存特征),识别到 x64dbg 后故意崩溃或切换逻辑;对策——先静态找特征字符串/窗口类名/模块名([[re-ida]] / [[re-format-pe]]),patch 特征检测点或隐藏 x64dbg 痕迹(ScyllaHide),再重新加载(见 [[re-anti-analysis]] 反调试方法论 AD31)
- 硬件断点被检测(DR 寄存器):现象——下硬件断点/内存断点后进程即退出,或断点不触发;原因——样本读取调试寄存器(DR0-DR3/DR6/DR7)检测硬件断点;对策——ScyllaHide 注入方式隐藏(HookLibrary/InjectorCLI),或改用逻辑断点避开 DR 痕迹,必要时先静态 patch DR 检测点再 attach(见 [[re-anti-analysis]] 反调试方法论 AD15)
- 断点设了不命中:先
Alt+E确认模块已加载、地址落在加载后基址上;代码段被改写(壳解密)会覆盖 INT3——解密完成后重新下断 - 附加模式下的分析盲区:入口前逻辑(TLS 回调、构造函数、解密初始化)在 attach 时已执行完——查注册/初始化类逻辑必须选启动模式 + Events 事件断点,别在 attach 模式里找不存在的过程
- Scylla dump 产物"不能运行"别当失败:未 Fix Dump 的 dump 文件没有 IAT,直接跑必然崩;修复后仍崩再查无效导入项与 OEP 是否正确
- 版本差异、Scylla 细节与反调试绕过边界(含"绕过不了"的情形)见 [[gotchas]]
Signals
- GitHub stars
- 57
- Forks
- 8
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
re-x64dbg- Source
- github.com/dslsdzc/rev-skills