随着网络游戏产业的发展,外挂产业也随之诞生并得到飞速的发展,外挂技术不断升级,对网络游戏的威胁也在不断加剧。大陆主流的网络游戏,尤其是MMORPG,基本上都是从韩国引进运营。因此从2002年开始,在韩国游戏开发商逐步认识到外挂对网络游戏的危害,感受到中国大陆外挂制作者高超的技术实力的同时,韩国的网络安全技术公司也意识到反外挂将伴随网络游戏产业的持续发展,成为一个极具潜力的新兴产业,尤其是在外挂危害最深的大陆市场。因此,韩国将原来用于电子商务、网络通讯、病毒防护等领域的软件安全技术移植到网络游戏,开发了几款网络游戏反外挂系统,比较有名的是INCA公司的Game Guard和安博士研究所的AhnLab HackShield。
奇迹在2003年下半年开始使用Game Guard反外挂系统,陆续使用Game Guard的游戏有希望Online、天堂2等等。Game Guard在与奇迹合作的早期(2003年底),确实达到了遏制外挂的目的。但是很快,随着外挂制作者对Game Guard技术的了解不断深入,同时由于该技术本身固有的一些弱点,一些外挂已经完全突破了Game Guard对网络游戏的防护,神话外挂就已经能够绕过Game Guard直接启动奇迹游戏客户端。Game Guard在吸取了奇迹上的教训以后在保护机制、验证机制等方面有了很多的改进,但是后来的希望Online等游戏尽管使用了Game Guard,各种外挂,尤其脱机外挂仍然层出不穷,无法遏止,主要原因就是外挂制作者已经熟悉了Game Guard所使用的核心技术,并积累了破解的经验,因此不触动实现理念和核心机制的小修小补无济于事。
AhnLab HackShield出现较晚,在国内的应用也比较少,目前使用安博士的只有天联世纪的街头篮球。尽管在大陆的应用时间不长,并不为人所了解,但是由于其核心机制和Game Guard基本一致,很快也出现了脱机外挂,比如街头篮球战神。
韩国的反外挂产品在大陆应用的多次失败,已经能够说明很多问题。且不论其实现机制和使用的技术是否优秀,其系统的基本理念就有明显的缺陷。这些产品在韩国本土的成功运用并不能证明其在大陆也能够成功,只能说明在韩国本土,由于政策的限制、用户的习惯以及黑客文化的缺乏,没有形成像大陆这样蓬勃发展的游戏外挂产业。
第一章 韩国反外挂产品的技术特点和内在缺陷
韩国的反外挂产品,由于其源自于电子商务、网络通讯、病毒防护等领域的已有技术,不可避免地带有原有技术的明显特征,比如依赖于系统底层技术的目标进程保护、类似于病毒扫描的特征码识别等等。这些手段对付木马和病毒应该是有效的,但对于游戏外挂,则存在一些内在的缺陷:
1.外挂程序在用户的系统中拥有和反外挂程序同样的控制权限,因此依赖于系统底层技术,就是在与外挂制作者较量谁能够最终控制系统,过多地使用底层技术还会带来兼容性问题。由于外挂用户不是被动的受害者,而是主动的使用者,因此外挂在优先权上更有优势,比如用户会根据外挂的使用说明,严格地按步骤操作,甚至会按外挂的要求安装新的操作系统。
2.外挂与病毒和木马有完全不同的目的和代码特征,而且在利益的驱动下,外挂的变形能力和更新能力远高于病毒和木马,因此基于特征码识别的技术很难取得明显的效果,金山游盾就是最好的例证。
3.韩国反外挂产品更多地是在操作系统层面与游戏客户端绑定,与游戏过程本身的关联很弱,只要能够找到黑客高手成功的从系统层面剥离反外挂系统,外挂程序就可以随意使用;这种剥离基本上只需要做一次,因为底层机制的更新是很困难的。
4.韩国反外挂产品的设计思路是阻止外挂侵害客户端,着眼于对游戏客户端进程的保护,对于不依赖于客户端存在的脱机外挂,这些保护完全没有意义,脱机外挂需要做的只是模拟反外挂模块与反外挂服务端的简单验证通讯,而网络游戏最大的敌人就是对游戏平衡性具有最强破坏力的脱机外挂;
5.韩国反外挂产品寄希望于一劳永逸地解决外挂问题,过多的底层技术应用使其无法快速更新以应对层出不穷的外挂技术。
Internet客户/服务器模式的通讯一般采用TCP/IP通信协议,数据交换是通过IP数据包的传输来实现的,一
般来说客户端向服务器发出某些请求,比如移动、战斗等指令都是通过封包的形式和服务器交换数据。
那么把本地发出消息称为SEND,意思就是发送数据,服务器收到SEND的消息后,会按照既定的程序
把有关的信息反馈给客户端,比如,移动的坐标,战斗的类型。那么把客户端收到服务器发来的有关消息
称为RECV。知道了这个道理,接下来要做的工作就是分析客户端和服务器之间往来的数据(也就是封包),
这样就可以提取到有用的数据进行修改,然后模拟服务器发给客户端,或者模拟客户端发送给服务器,
这样就可以实现修改游戏的目的了
目前除了修改游戏封包来实现修改游戏的目的,也可以修改客户端的有关程序来达到要求。目前
各个服务器的运算能力是有限的,特别在游戏中,游戏服务器要计算游戏中所有玩家状况几乎是不可能的,
所以有一些运算还是要依靠客户端来完成,这样又给了外挂制作及使用者修改游戏提供了一些便利。
比如可以通过将客户端程序脱壳来发现一些程序的判断分支,通过跟踪调试可以把一些对外挂不利
的判断去掉,以此来满足修改游戏的需求
第二章 韩国反外挂产品的技术实现机理
下面是我们对Game Guard和HackShield这两种反外挂产品所实现的功能及其实现方式的简要分析。这两款产品在实现思路和机制上是基本一致的,仅在实现细节上有少量的差异:
1.Game Guard
Game Guard随游戏客户端启动,启动后检查自身版本并自动更新到最新版本。启动后,首先加载设备驱动进入Ring 0级获得系统的控制权,在NT系统中使用的驱动程序为npptNT.sys。Game Guard使用设备驱动监控系统的进程创建动作,从而保证在系统的所有进程,包括游戏启动时已有的和启动以后新建的进程,中注入Game Guard的模块npggNT.des,该模块拦截所注入进程的部分系统API,实现对系统API监控,防止外挂进程针对游戏进程的有害操作。随Game Guard启动的还有一个GameMon.des进程,该进程主要负责对非法进程和模块的特征码扫描。为保证模块自身的存在,Game Guard提供一个可以即时更新的服务端认证模块,即Game Guard的客户端模块需要与服务端进行加密验证通讯以确认客户端模块是否正常工作,后期增加了对客户端程序代码的验证,因此在一定程度上可以阻止脱机外挂,但这种验证与游戏过程无关,因此仅仅是增加了外挂模拟的难度。
2.HackShield
HackShield使用了同样的自动更新方式,也利用设备驱动获得控制权,驱动程序EagleNT.sys(NT系统)动态生成,不需要磁盘上保留程序文件。HackShield在所有进程中注入的模块为EGRNAPx2.dll,API的拦截方式与Game Guard也有所不同。除了实现API监控外,EagleNT.sys还接管了NTOSKERNAL中的系统服务函数:NtOpenProcess, NtOpenSection, NtReadVirtualMemory, NtWriteVirutalMemory, NtSuspendThread, NtTerminateThread等,目的是阻止各种用户级和核心级调试工具,也可以更有效地防范外挂读写游戏内存。HackShield同样也实现了对外挂进程和模块的特征码扫描。与Game Guard的服务端认证类似,HackShield提供”服务器连动防止外挂”,即客户端定时地根据服务端的请求返回正确的响应以验证客户端模块不被篡改,同样这种请求-响应包含了部分对客户端程序的完整性检查,但与游戏过程还是没有什么联系。HackShield还注册了一个WH_DEBUG钩子,估计是用于检查阻止其他消息钩子,但对于底层键盘钩子并无效果。
今天看到了两次熟悉的XP蓝屏,却是以前从未见到过的蓝屏提示,是eaglent.sys文件引起的。第一反应是系统有问题,第二反应是不是系统问题,从没见过Windows有过这样一个文件。第三反应是中毒了。
于是赶快上网去搜索,总算有了点眉目,总算不是病毒(不用重做系统了)。原来是所谓的“安博士网游反外挂”的一个文件。安博士?没听说过,继续查,是韩国的——真他妈烂。害得我虚惊一场。
看下面的资料:
HackShield使用了同样的自动更新方式,也利用设备驱动获得控制权,驱动程序EagleNT.sys(NT系统)动态生成,不需要磁盘上保留程序文件。HackShield在所有进程中注入的模块为EGRNAPx2.dll,API的拦截方式与Game Guard也有所不同。除了实现API监控外,EagleNT.sys还接管了NTOSKERNAL中的系统服务函数:NtOpenProcess, NtOpenSection, NtReadVirtualMemory, NtWriteVirutalMemory, NtSuspendThread, NtTerminateThread等,目的是阻止各种用户级和核心级调试工具,也可以更有效地防范外挂读写游戏内存。HackShield同样也实现了对外挂进程和模块的特征码扫描。与Game Guard的服务端认证类似,HackShield提供”服务器连动防止外挂”,即客户端定时地根据服务端的请求返回正确的响应以验证客户端模块不被篡改,同样这种请求-响应包含了部分对客户端程序的完整性检查,但与游戏过程还是没有什么联系。HackShield还注册了一个WH_DEBUG钩子,估计是用于检查阻止其他消息钩子,但对于底层键盘钩子并无效果。
根据前面的介绍,Game Guard和HackShield都使用了大量的底层技术,据HackShield的演示文档,HackShield、HackShield Pro和Game Guard在技术运用上的差异如下:
项 目
HackShield
(H)
HackShield Pro
(HP)
Game Guard
(I)
适用技术
User Mode 10%
Kernel Mode 90%
User Mode 40%
Kernel Mode 60%
User Mode 90%
Kernel Mode 10%
即HackShield使用了更多的底层尤其是核心驱动技术,带来的后果就是兼容性下降,HackShield在Windows 2003上无法启动。HackShield Pro的改进在于降低了内核技术的比例,并增加了服务端的检测内容