Agent Skills
返回列表
🔒

反调试绕过实战手册

IT 运维与安全 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/anti-debugging-techniques-idpa。

技能介绍

调试器一附加,程序就“装死”或直接退出?

逆向一个受保护的二进制时,最常见的挫折不是加密算法有多复杂,而是程序在你打开 gdb 的瞬间就检测到调试器,然后静默退出、触发反制逻辑,或者直接挂死在断点上。这类保护往往不止一层:先检查 PEB.BeingDebugged,再查 TracerPid,接着用 rdtsc 算一遍单步执行的耗时,稍有异常就触发 UD2 自杀。手动逐项 patch 不仅效率低,还容易遗漏——大部分基座模型分不清用户态检测和内核态检测的区别,对每个检测点应该改哪一层、用什么工具也经常给出错误的 patch 策略。

这个技能提供了什么

这份技能把反调试拆成了一张可查询的矩阵,每条技术都给出检测原理和两种以上的绕过路径:

  • Linux 侧:ptrace(PTRACE_TRACEME) 自附加检测(对应 LD_PRELOAD shim 或 GDB catch syscall 改 $rax)、/proc/self/status 的 TracerPid 检查、rdtsc/clock_gettime 计时攻击、SIGTRAP 信号截获、/proc/self/maps 注入检测,以及环境变量(LD_PRELOAD、LINES、COLUMNS)嗅探。
  • Windows 侧:IsDebuggerPresent、PEB 四个标志位(BeingDebugged、NtGlobalFlag、ProcessHeap.Flags、ForceFlags)及各自偏移、NtQueryInformationProcess 的三种 InfoClass(注意 ProcessDebugFlags 是取反语义)、硬件断点检测、INT 2D/UD2 异常技巧、TLS 回调、ThreadHideFromDebugger 隐藏线程,以及 VEH 异常处理器检测。
  • 进阶对抗:自调试看门狗(fork + ptrace)、父子进程互检、多点累计计时、Nanomite INT3 替换跳转表,每一项都标注了推荐的绕过工具组合。

边界与注意事项

工具选择要匹配检测的层次:ScyllaHide 能自动 patch PEB 字段,但它不理解 VEH 里的逻辑链;LD_PRELOAD shim 对付 ptrace 调用很好用,却会被针对 /proc/self/maps 的检查识破。NtGlobalFlag 的偏移(PEB+0xBC)是 x64 专属,x86 布局不同。对高对抗样本,多层检测点往往叠加在自定义 VM 保护或控制流平坦化之上,需要配合符号执行直接跳过检测块——这份技能明确标注了该调用 code-obfuscation-deobfuscation 和 symbolic-execution-tools 的场景,而不是声称自己能处理一切。

使用场景

  • 逆向工程师在 Linux 下用 GDB 调试一个会主动调用 ptrace(PTRACE_TRACEME) 自我保护的恶意样本,进程一加载就退出
  • Windows 逆向人员分析 VMProtect 保护的程序,遇到 PEB.BeingDebugged、NtGlobalFlag 与 rdtsc 计时多层反调试叠加
  • 恶意软件分析师在 x64dbg 中跟踪一个注册了 TLS 回调的样本,反调试代码在 main() 之前就已执行完毕
  • CTF 选手面对一段循环里嵌入 rdtsc 计时检查、单步就被发现的 challenge 二进制

适合人员

  • 逆向工程师:需要在 Linux/Windows 下快速定位并绕过样本内置的反调试检查,把分析推进到真正的业务逻辑
  • 恶意软件分析师:面对加壳或自保护样本,需要理解 ptrace、PEB、TLS 回调等检测点以恢复动态调试能力
  • CTF 选手:比赛中频繁遇到 ptrace 自附加、rdtsc 计时、INT3 补丁等反调试套路,需要一份按检测类型索引的速查清单
  • 安全研究员:研究保护方案与调试器对抗时,需要区分用户态/内核态检测的技术边界和对应 patch 策略