用途
本技能用于在授权的软件分析、安全研究和恶意软件分析过程中,理解所遇到的各类保护机制,帮助分析人员识别保护类型、定位检查代码并规划绕过方式,从而完成合法的分析任务。技能本身属于双用途安全技术,文档开头即强调:仅限授权使用,在开始任何绕过或分析前需确认已获得软件所有者的明确书面许可,或处于合法安全场景(CTF、授权渗透测试、恶意软件分析、安全研究)中,并需记录活动范围、理解未授权绕过软件保护可能违反 CFAA、DMCA 反规避等法律。合法用例包括:恶意软件分析、授权渗透测试、CTF 竞赛、学术安全研究、分析自己拥有或有权利的软件。
主要能力
反调试技术
Windows 反调试
- 基于 API 的检测:
IsDebuggerPresent、CheckRemoteDebuggerPresent、NtQueryInformationProcess(ProcessDebugPort 值 7、ProcessDebugFlags 值 0x1F)。 - 基于 PEB 的检测:直接读取 PEB(x64 用
__readgsqword(0x60),x86 用__readfsdword(0x30)),检查BeingDebugged标志、NtGlobalFlag(被调试时为 0x70)、堆标志(*heapFlags & 0x50000062)。 - 基于计时的检测:RDTSC、QueryPerformanceCounter、GetTickCount。
- 基于异常的检测:SEH 利用 INT3 异常被调试器吞掉的特性;VEH 注册自处理 INT3 的处理器,若调试器先行拦截则被检测。
Linux 反调试
ptrace(PTRACE_TRACEME, ...)自跟踪检查,返回 -1 表示已被跟踪。- 读取
/proc/self/status中的TracerPid字段,非 0 则退出。 - 父进程检查(getppid)。
反虚拟机检测
- 硬件指纹:CPUID 管理程序位(ECX 第 31 位)、CPUID 品牌字符串(如 "VMwareVMware"、"Microsoft Hv"、"KVMKVMKVM"、"VBoxVBoxVBox")、MAC 地址前缀(VMware 00:0C:29 / 00:50:56,VirtualBox 08:00:27,Hyper-V 00:15:5D)。
- 注册表与文件检测:如
HKLM\SOFTWARE\VMware, Inc.\VMware Tools、HKLM\HARDWARE\ACPI\DSDT\VBOX__,以及 vmmouse.sys、vmhgfs.sys、VBoxMouse.sys 等文件,vmtoolsd.exe、VBoxService.exe 等进程。 - 计时型检测:通过 CPUID 触发 VM exit 造成的时间异常。
代码混淆
- 控制流混淆:控制流平坦化(状态变量 + switch 循环)、不透明谓词(恒真/恒假表达式)。
- 数据混淆:字符串 XOR 加密、栈字符串、动态 API 解析(LoadLibrary/GetProcAddress)、API 哈希。
- 指令级混淆:死代码插入、指令替换(如
xor eax, eax替换为sub eax, eax等)。
使用方式
技能采用如下输入/输出模型。
输入:二进制路径或样本(可执行文件、DLL 或固件镜像)、平台(Windows x86/x64、Linux、macOS、ARM,影响适用检查项)、目标(为动态分析绕过、识别保护类型、构建检测代码、为 CTF 实现)。
输出:
- 保护识别:命名技术(如 RDTSC 计时检查、PEB BeingDebugged)及在二进制中的位置。
- 绕过策略:具体补丁地址、hook 点或工具命令,用于消除每项检查。
- 分析报告:结构化列出每层保护、严重性和建议绕过方式。
- 代码产物:用于绕过或实现检查的 Python/IDAPython 脚本、GDB 命令序列或 C 桩代码。
技能给出了多种具体绕过示例,包括:
- 使用 x64dbg 的 ScyllaHide 插件自动修补常见检查;手动把
IsDebuggerPresent返回值强制为 0、把 PEB.BeingDebugged 置 0、hookNtQueryInformationProcess;在 IDA 中用ida_bytes.patch_byte(check_addr, 0x90)。 - 在 x64dbg 中跟随 gs:[60](x64)或 fs:[30](x86),把 BeingDebugged(偏移 +2)置 0、清除 NtGlobalFlag(x64 上偏移 +0xBC)。
- 计时检测绕过:使用硬件断点、NOP 比较与条件跳转、通过 hypervisor 冻结 RDTSC、hook 计时 API 返回一致值。
- 异常检测绕过:在 x64dbg 中对 EXCEPTION_BREAKPOINT 设置“将异常传递给程序”(Options → Exceptions → 添加 0x80000003)。
- Linux ptrace 绕过:
LD_PRELOADhook 使 ptrace 返回 0,或使用给出的 GDB catch syscall 命令序列。 - 反虚拟机绕过:使用裸机环境、加固虚拟机(移除 guest 工具、随机化 MAC、删除痕迹文件)、在二进制中补丁检测分支,或使用 FLARE-VM/REMnux 并加固设置。
- 混淆分析:使用 D-810(IDA)、SATURN 处理控制流平坦化;用 angr、Triton 符号执行识别不透明谓词;用 FLOSS 自动字符串去混淆;用 IDAPython 脚本解密 XOR 字符串;用 HashDB 插件处理 API 哈希。
技能还给出一个 Python 计时型反调试检测扫描脚本示例,通过搜索字节模式(RDTSC 的 \x0f\x31、RDTSCP 的 \x0f\x01\xf9、GetTickCount、QueryPerformanceCounter、NtQuerySystemInformation 字符串)定位检查逻辑。
适用场景
恶意软件分析(防御性)、授权渗透测试、CTF 竞赛、学术安全研究、分析自己拥有或有权利的软件,以及出于合法目的理解保护机制、出于教育目的的学习。
限制与注意事项
- 授权要求:本技能属于双用途技术,使用前必须确认书面授权或处于合法安全场景,未经授权绕过软件保护可能违反 CFAA、DMCA 反规避等法律。
- 禁止用途:不得用于软件盗版、未授权访问或恶意目的。
- 平台差异:RDTSC、CPUID 仅适用于 x86;ARM 上需改用
MRS x0, PMCCNTR_EL0(需内核 PMU 访问)或 clock_gettime(CLOCK_MONOTONIC),且 ARM 上无 PEB/TEB,需替换为 /proc/self/status(Linux)或 task_info(macOS)。 - 误报风险:计时检查可能因 Process Monitor 或 AV hook 增大系统调用延迟而误报,建议启动时校准阈值(测量 3 次并取 mean + 3*stddev);ptrace 检查应先核对 TracerPid 的进程名再退出。
- 补丁崩溃风险:NOP 条件跳转前需完整跟踪“被检测”分支,若该分支初始化或释放后续所需堆状态,跳过会破坏状态,应改为修补比较操作数为预期“干净”值。
高级技术(如 RDTSC 差值校准、VMware 后门端口、管理程序叶子枚举、guest 驱动痕迹检查、重叠指令、垃圾字节插入、自修改代码、ROP 混淆等)见技能内的 references/advanced-techniques.md。相关技能包括 binary-analysis-patterns、memory-forensics、protocol-reverse-engineering。
工具推荐(来自技能内容)
- 反调试绕过:ScyllaHide、TitanHide
- 脱壳:x64dbg + Scylla、OllyDumpEx
- 去混淆:D-810、SATURN、miasm
- 虚拟机分析:VMAttack、NoVmp、手动跟踪
- 字符串解密:FLOSS、自定义脚本
- 符号执行:angr、Triton