如何防范游戏外挂
1、由于HTTP协议是明文传输,很容易通过抓取HTTP包获取游戏内交互的逻辑和数据,请问如何能有效地防止外挂程序?总的说来,道高一尺魔高一丈,外挂不可能100%被杜绝,只能通过不同的手段来防止大部分的外挂,具体可以从以下几个方面考虑:1. 协议层加密以flash客户端为例,在与后端做数据通信时,可采用amf协议,它虽然也是基于http协议,但是对传输的内容做了加密。当然,amf协议是透明的,所以该方法只能干掉一部分只知道用httpwatch/firebug等查看明文http包传输工具的小白。如果需要继续增加门槛,可以自定义加密协议。但由于客户端需要知道解密方式,所以客户端本身也需要做好加密。关于flash本身格式的加密解密是另一个比较大的话题,在此就不展开赘述了。2. checksum校验客户端发送数据时增加一段checksum校验码,服务器端根据相应的算法进行校验,如果校验不通过则返回错误。与(1)一样,只要破解了客户端就可以知道checksum的校验算法。因此一方面需要注意客户端的安全,另一方面checksum生成算法需要不定期更换。3. 通过任务策划来防治外挂主要是代替人工来做些重复性的工作,这样玩家可以不操作电脑也能在游戏中获得收益。外挂的出现一般都是和利益有关,最好的治理方式是引导而不是打压,因此我们可以在产品设计方面做些降低外挂的工作:1)降低长时间重复性任务所获得收益,或者同一种获得收益的任务随时间的增加收益减少。2)游戏本身提供一些类似外挂的功能:比如自动打怪等辅助工具。4. 定期检查数据通过排行榜等数据统计,可以通过发现一些异常的数据来检测是否有外挂存在5. 深入玩家内部,了解外挂行情这个是客服们的工作,与技术关系不大,但有时能起到意想不到的作用。

3、外挂的处理:处理外挂一定不能一发现就踢掉或提示验证码等等,这会让外挂捕捉到你的处理方式,应该是以记录+打分的方式,记录每一次“疑似外挂”的行为,每种行为按照疑似程度设置不同的分值,然后按照总的分值制定一个分值标竿,大于这个分值的,按运营手段处理,封禁也好、不定期弹出验证码也好。总的原则就是“非即时性”,让外挂作者不易察觉到你的抓捕机制,从而增加外挂升级更新难度。其他针对游戏设计以及游戏生态的外挂功能也有相应的抓捕方式,不过还是那句话“道高一尺魔高一丈”,外挂做的越来越像客户端,原生的客户端一升级版本也有可能被误抓为外挂,所以我认为,抓外挂的手段中,辨别请求来源是很难的,这是游戏中外挂不好处理的主要原因。看了前面几个兄弟的回答,从技术角度上已经很完备。简单从产品和运营层面上说说我的经验,希望给大家点启发。第一次回答问题,有不当的地方,请大家尽情喷。在之前的工作中,认识不少做外挂的朋友,也得知某些游戏外挂一年的销售额可以达到1200万人民币。巨大商业利益的背后,是外挂团队极强的技术能力,对于网络协议加密,通过研读汇编语言去进行破解,是很常见的形态。从某种意义上说,与外挂的斗争,仅仅依靠技术手段,是无法取胜的。所以在各位所说的技术方案的基础上,应该制定一些策略。

5、Ring0层通过调用内核未导出函数 KeyboardClassServiceCallback、MouseClassServiceCallback实现的,其实这两个函数是Windows端口驱动在获得键盘鼠标硬件输入后往上传递给类驱动的两个回调函数(何为端口和类驱动需要补驱动和内核知识了:))。也就是正常情况下操作系统也是这样实现的。广州开发的“梦幻昆仑”游戏的一款很火的外挂“易坤辅助”就是这样实现的,从何而知?逆向工程又派上用场了。防御的方法使用HOOK(替换原始函数),当外挂调用应用层API时,判断SendMessage、PostMessage、SendInput的目的地是否为我们的游戏客户端、发送源是哪个进程,若是系统或常用软件进程则放过,不是则阻止(做得好的话还需要判断一下发送的是否为按键消息)。当外挂调用两个内核未导出函数时,在我们的HOOK函数中判断是哪个函数调用的,貌似这点不用汇编较难实现,汇编[ebp+4]即为调用者代码的下一句地址,再跟实际操作系统调用的函数地址对比,若一样则放过,不是则认为是外挂在模拟。这个方法也是我反“梦幻昆仑”的“易坤辅助”所用的方法,而现用的HProtect未做到这点。显然不能说我技术比他牛,HProtect做的工作n*n多。但“梦幻昆仑”一直被这样打着辅助旗号的伪善工具吸吮着。“内部CALL调用外挂”是稍后出来的技术,通过逆向工程反汇编、反编译分析游戏内部函数调用逻辑。比如:XXX游戏使用attack()函数对怪物进行攻击,外挂编写者分析出这个攻击函数后,就用这个函数作为外挂的打怪功能。由于需要精通汇编和逆向分析技术,所以较模拟类外挂实现起来较难,此类外挂也较少。防御的方法要使用加密壳对客户端程序进行保护,或程序中运用反调试、暗桩(与丛杰的“非即时性”报告检测差外挂原则类似)。这样就可以一定程度上的抵御外挂作者对程序逻辑的分析,但会脱加密壳、反反调试的人大有人在(中国从来不缺少人才)。不过使用“虚拟机壳”+代码乱序+多态变形+深层次的反调试(可以利用自己挖掘的漏洞)可以吓到90%的外挂编写者,外挂编写者不是畏惧技术难度搞不定,卓越的程序员从来不觉得哪项技术难,而是花时间与游戏保护(反外挂程序)周旋的成本比外挂带来的价值大。“脱机外挂”是难度最大的一种外挂,外挂开发者需要完全分析出游戏客户端与服务器的通信逻辑,达到不使用官方游戏客户端,自己通过发送接收数据与服务端交互。但把通信数据加密和签名认证过程,足以让脱机外挂开发者雪上加霜。加密算法选用成熟的对称加密算法:3DES、AES、TEA等,密钥协商使用非对称加密算法或Diffie-Hellman。因为对称加密算法较快,加密大量通信数据需用此;非对称加密比对称的慢几十倍,传送个小数据量的对称加密用到得密钥合适。其实更简单的方法是配置上李老师做得加密框架。有人可能会问到,用非对称加密算法传送对称加密用的密钥,不也需要客户端配置好公钥、服务端配置好私钥吗,这样通过逆向技术也动态跟踪内存,不就可以拿到对称加密用到的密钥了吗? 答案是使用前面提到的加密壳对客户端游戏加密,这样增加分析难度,甚至完全放弃。当然后续是要自己开发加密壳的,这样用起来也相对放心。
