为了保护自己的程序不被破译等,很多软件使用了反调试技术来阻止逆向程序员对自己程序进行爆破,这同时也催生了另一种技术--反调试破解技术的出现。反调试技术分为静态反调试技术和动态反调试技术。相比来说静态反调试技术更容易实现,破解一般也只需要一次,我们这次就先谈一下静态反调试技术,以及对应的破解之道。
1.PEB结构中有几个重要的成员标示了进程是否处于被调试状态。(以下以32位为例)
+0x002 BeingDebugged : UChar
+0x00c Ldr : _PEB_LDR_DATA
+0x018 ProcessHeap : Ptr32 Void
+0x068 NtGlobalFlag : Uint4B
BeingDebugged成员在被调试状态会显示1,正常情况下为0。解决方法:更改该值为0。
Ldr:进程在被调试状态时堆内存区域会出现一些特殊的标志,未使用的堆内存区域全部填充着0xFEEEFEEE,而Ldr正好在堆内存中被创建(只在XP系统中有,Vista之后的系统没有这种标志)。解决方法:将该区域覆盖为NULL即可。
ProcessHeap:Proce