韩国反外挂分析



随着网络游戏产业的发展,外挂产业也随之诞生并得到飞速的发展,外挂技术不断升级,对网络游戏的威胁也在不断加剧。大陆主流的网络游戏,尤其是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.韩国反外挂产品寄希望于一劳永逸地解决外挂问题,过多的底层技术应用使其无法快速更新以应对层出不穷的外挂技术。

第二章 韩国反外挂产品的技术实现机理



  下面是我们对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钩子,估计是用于检查阻止其他消息钩子,但对于底层键盘钩子并无效果。

  根据前面的介绍,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的改进在于降低了内核技术的比例,并增加了服务端的检测内容。



  第三章 外挂程序破解韩国反外挂产品的技术策略



  对于外挂开发者,Game Guard和HackShield都构造了一层破解起来相当困难的保护外壳。相对而言,脱机外挂的开发者的任务更单纯一些,不需要破解保护层,只要模拟与服务端的验证通讯,如果验证通讯涉及客户端的代码特征,加载一个内存DMP文件就够了,因为这种验证与游戏过程没有关联,即去掉这种验证,游戏也能不受影响地进行下去。

  对于非脱机外挂,或称内挂的开发者,则需要破解保护层,但这种破解基本是一次性的任务,一点突破,全局皆破,而且快速更新的可能性很小。因为本身使用的就是非常底层的内核驱动技术,被突破以后,再深入就只有更换系统内核或使用硬件了。反外挂系统使用内核驱动,外挂同样也可以使用,至少在分析破解时可以用来发现反外挂系统的漏洞和验证算法。

  Game Guard和HackShield都做了一些进程隐藏的保护,不让常见的破解工具发现和分析相关的进程和模块,但是这种方式对于使用更深技术的工具是无效的。IceSword就可以有效地发现游戏客户端进程并枚举和分析进程中的反外挂模块,还可以列出反外挂系统注册的驱动程序。

  一个简单的例子:Game Guard和HackShield都采用拦截SendInput API的方式来防御键盘和鼠标模拟,下面是Game Guard和HackShield对SendInput的Hook方式:

Game Guard:

  原有代码(Windows 2003 Server)

  77E322B8 > B8 F4110000   MOV EAX,11F4

77E322BD   BA 0003FE7F   MOV EDX,7FFE0300

77E322C2   FF12         CALL DWORD PTR DS:[EDX]

77E322C4   C2 0C00       RETN 0C

77E322C7   E8 E6ABFFFF   CALL USER32.77E2CEB2

77E322CC   E9 86040000   JMP USER32.77E32757



Game Guard启动以后的代码

77E322B8 > E9 3323A7CD   JMP npggNT.458A45F0

77E322BD   BA 0003FE7F   MOV EDX,7FFE0300

77E322C2   E9 1926A7CD   JMP npggNT.458A48E0

77E322C7   E8 E6ABFFFF   CALL USER32.77E2CEB2

77E322CC   E9 86040000   JMP USER32.77E32757



HackShield:

  原有代码(Windows 2000 Server)

77E47E9B > B8 E1110000   MOV EAX,11E1

77E47EA0   8D5424 04     LEA EDX,DWORD PTR SS:[ESP+4]

77E47EA4   CD 2E       INT 2E

77E47EA6   C2 0C00       RETN 0C



HackShield启动以后的代码

77E47E9B > FF25 1E00235F   JMP DWORD PTR DS:[5F23001E]

77E47EA1   54         PUSH ESP

77E47EA2   24 04       AND AL,4

77E47EA4   CD 2E       INT 2E

77E47EA6   C2 0C00       RETN 0C



  DS:[5F23001E]为一个间接跳转地址5F220F5A

5F220F5A   57         PUSH EDI

5F220F5B   52         PUSH EDX

5F220F5C   51         PUSH ECX

5F220F5D   50         PUSH EAX

5F220F5E   BF 0A00225F   MOV EDI,5F22000A

5F220F63   8B5424 10     MOV EDX,DWORD PTR SS:[ESP+10]

5F220F67   B9 18010000   MOV ECX,118

5F220F6C   31C0         XOR EAX,EAX

5F220F6E   F0:0FB157 01   LOCK CMPXCHG DWORD PTR DS:[EDI+1],EDX

5F220F73   74 09       JE SHORT 5F220F7E

5F220F75   83C7 0E       ADD EDI,0E

5F220F78   31C0         XOR EAX,EAX

5F220F7A ^ E2 F2       LOOPD SHORT 5F220F6E
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值