转自看雪
ey\m)6A$ 原文地址 .Y(lB=pV Z2rzb{oS} %t~SOkx [1]引言
O%JsUKV
3 IWLBc 本文对基于Windows NT的操作系统上使用的几种反调试技术进行了分类和介绍。
:`Uyn!w w &|R5Q 反调试技术是程序检测它是否在调试器(Debugger)下运行的方法。反调试技术被用于商业可执行程序的保护,加壳工具以及病毒等,以杜绝或减缓软件被逆(向工程)
bKuj
po6 C3\E.u? 我们假设程序是在r3 debugger下进行分析的,例如Windows平台上的OD。本文面向逆向工程师和恶意软件分析师。
"\/^/vn? 请注意,我们将纯粹谈论通用的反调试和反跟踪技术。此文不会涉及特定的调试器检测,例如窗口或进程的枚举,注册表扫描等。
&`yOIX-H_ M .)}e7 [2]反调试和反跟踪技术
![@T iM )v52y8G-p - 利用内存差
2\nN4WL
5. 5K ,#4EOV (1) kernel32!IsDebuggerPresent
Wyq~:vU.S 如果正在调试进程,则IsDebuggerPresent返回1,否则返回0。此API只读取PEB!BeingDebugged 的byte-flag(位于PEB结构中的偏移 2)。
/$9BPjO{ 绕过它就只需要 PEB!BeingDebugged 设置为 0
1 O7]3&L@ 例:
Cl6m$YUt - call IsDebuggerPresent
- test eax, eax
- jne @DebuggerDetected
- ...
)Ab6!"' 6hM]% (2) PEB!IsDebugged
.5Knb c 2sqm7th 该字段引用进程的Process Environment Block(进程环境块/区间?)中的第二个字节. 被调试期间会由系统设置为非0, 该字节可以被重置为0,而不会对程序的执行过程产生影响(因为这是一个信息标志).
&