1、检测调试寄存器
(1)检测 SoftIce 等系统级调试器
检测softice的方法有很多.检测主要在驱动里中实现。
(2)监测用户级调试器
用户级调试器具有一下几个特征:
用户级调试器是采用MICROSOFT提供的DBGHELP.DLL库来实现对软件跟踪调试的。
被调试的软件其父进程为调试器。
所以可以采用如下的方法来检测:
a.调用API函数IsDebuggerPresent()(或是直接采用IsDebuggerPresent的反汇编代码,以防破解者拦截对该函数的调用)来检测是否有用户级调试器存在。
b.监测调试寄存器的方法。
c.采用TLB的方法,检查父进程的方法. 在WINNT下,可以采用进程注入的技术来检测软件的父进程是否正确的方法。
d.设置SEH进行反跟踪。
由于破解者者可以拦截软件对调试器的检测操作,所以将保护判断加在驱动程序中。因为驱动程序在访问系统资源时受到的限制比普通应用程序少得多,这也给了破解者增加了破解的难度。
2、CRC检校
增加对软件自身的完整性检查。这包括对磁盘文件和内存映像的检查,以防止破解者未经允许修改程序以达到破解的目的。DLL和EXE之间可以互相检查完整性。
为了防止破解者采用替代WORD,以及edocguard的DLL,通过计算DLL的CRC值来验证。