Warden的机制使得暴雪能够在不需要更新客户端的情况下任意更新作弊检测代码。事实上,自从D2升级到1.11以来,Warden的检测mod和外挂双方一直都在针对对方的改变而进化。这一篇介绍外挂如何躲避前一篇提到的.mod使用的三种检测方法:DLL扫描、进程扫描和窗口扫描。
躲避DLL扫描
前面介绍过,外挂一般是做为一个普通的DLL远程注入到游戏进程进行工作的,因此Warden mod最早的检测手段是搜查游戏进程内加载的特定DLL名称(通过Module32First/Module32Next)。那么如何避免这种检测呢,一种简单的方法是截获Module32First/Module32Next,但由于枚举DLL的方法有多种,Windows 9x平台和NT平台也有区别,这种方法比较麻烦。高级一点的做法是利用进程内加载的所有模块由PEB(进程环境块)结构中的一个模块链表维护这一事实,简单的把外挂模块从链表中断开就可达到隐身的目的,当然这种方法只能用在Windows NT based系统中(包括NT/2K/XP/2K3)。更进一步的做法是自己编写DLL装载代码进行手工加载,这样它不会存在PEB的模块链表中,当然也就不会被Module32First/Module32Next找到。手工加载DLL看起来似乎很难,但其实网上就有现成的源代码,我的Remote Run Library就能做到,我自己最早则是从著名的back door软件Back Orifice 2000中学会的。EasyMap早期的一个版本用的断开模块链表法,后来则用了