executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
re-x64dbgx64dbg 调试(Windows):attach、断点、Scylla。 触发词:x64dbg、Windows调试、Scylla
Independent GitHub snapshot · Automated classification · Original documentation governs
参考 [[re-analyze/platform-tips]] Windows 分支——attach 需要管理员权限;内存转储工具链 procdump/DumpIt。
x64dbg/x64dbg release(zip 解压即用,x64dbg.exe;同包内 x32dbg.exe 管 32 位目标)choco install x64dbgFile > Open 加载任意 exe 能停在入口NtQuery/Scylla release附加与启动两种模式(先选对入口方式):
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断点族:
F2 地址/符号处软断点(INT3);Shift+F2 条件断点,例: [401000]==0x90(仅当内存值满足)、eax==0x1000;断点窗口 Alt+B 管理(Space 启停、Delete 删除、双击改条件/日志)bph——走 DR 寄存器,最多 4 个,可断数据访问,不修改代码字节(抗完整性校验)Alt+M 内存窗口选中区域右键 > Set Memory BPX(访问/写入触发,GUARD_PAGE 实现)——查密钥解密时刻、脱壳自解密代码常用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 命令 + 运行)可回放指令流bp/bph/bpm/find/savedata 等底部命令框输入)内存窗口与搜索:
Alt+M 打开 Memory Map:看节区权限(RWX 异常=壳/解密段)、模块列表Ctrl+B 二进制模式(如 55 8B EC,支持 ? 通配),Ctrl+F 当前视图查找,Shift+D 模块内字符串Ctrl+R 找交叉引用 → 引用处断点/上溯调用者——校验比较点、解密函数都从"被谁引用"开始Ctrl+G 跳地址;Ctrl+E 编辑内存(改字节绕校验)savedata <文件> <地址> <大小> 存内存区段;minidump <文件> 生成全内存 dmp 供 [[re-mem-forensics]]寄存器与调用栈:
EAX=0)或标志位是最快的分支改写Alt+K 调用栈窗口: 回溯返回地址链,定位"谁调了这里";栈窗格看局部变量/参数(x64 传参在 RCX/RDX/R8/R9,栈上在 [rsp+0x28] 起)bp <API名>)看参数,是理清加密/校验调用最直接的路径反调试绕过:
IsDebuggerPresent/NtQueryInformationProcess → 改返回寄存器(EAX=0)后 F9Scylla 修复 IAT(脱壳后):
Plugins > Scylla(Ctrl+I)→ 填 OEP → IAT Autosearch → Get Imports → Dump → Fix Dump
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补丁与保存(绕校验的持久化):
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]]
ThreadHideFromDebugger/NtSetInformationThread 或断网检测——用 ScyllaHide 插件隐藏调试痕迹,或先静态 patch 自检点Alt+E 确认模块已加载、地址落在加载后基址上;代码段被改写(壳解密)会覆盖 INT3——解密完成后重新下断