对于一个要上线的游戏,防外挂是必须的,历史上因为外挂而造成大量玩家流失的游戏数不胜数。随着游戏研发技术的发展,对外挂的预防业内其实做的已经越来越好了。下面总结一下防外挂的基础知识,以及我们的移动模块为防外挂做了哪些工作。
1预防外挂的基础知识
在做外挂预防工作之前,我们要先了解外挂有哪些。根据我的了解,市面上常见的外挂主要有以下几种:
修改客户端的内存信息
这类外挂通过分析游戏所使用的内存,找到内存中的变量去分析猜测变量是代表的什么含义。由于客户端本身保存着很多游戏信息,比如技能cd、移动速度等。由于我们游戏技能的管理和发起是由客户端控制的,若外挂能去把技能cd改为了0,客户端就可以无限放此技能。
常见外挂工具:葫芦侠、八门神器
加速齿轮
加速齿轮可以加速某一个进程的时间流逝速度,通过加速齿轮,可以让游戏客户端进程的时间加速N倍。真实时间可能只过了1s,而客户端进程的时间已经过了Ns。通过加速齿轮,可以让人物移动速度加快、技能cd加速等。
常见外挂工具:加速齿轮
重发、篡改同步消息
此类外挂可以截获客户端发送给服务器的消息,然后进行篡改或者重发。比如可以截获一个释放技能消息,然后再无限重发给服务器,服务器若没有验证,就会无限执行技能。
常见外挂工具:WPE三件套(eg+wpe+ccp)
脚本自动模拟点击
这类外挂对游戏破坏相对较小,但是也最常见。这种外挂比较普遍,对游戏的影响主要是看游戏机制。比如我一个哥们弄了20多台手机,用按键精灵刷传奇世界手游的金币,然后卖给其他玩家。但是对于不能自由交易的游戏,就不会出现这种问题,最多是导致玩家自己使用,从而可以24小时在线,缩短了游戏寿命。
常见外挂工具:按键精灵(我感觉这东西都已经产生了一条产业链...
防外挂是一个系统工程,需要不同的模块配合实现。而且,对于不同的游戏对外挂的预防要求也是不同的,具体游戏需要具体分析。
常见的外挂预防手段有以下几种:
进程检测
游戏开始时检测手机正在执行的进程,若发现某个进程在黑名单上,则不能进入游戏。这种方式可以预防市面上常见的外挂,对于不常见的或者新开发的外挂则束手无策。若游戏不火没人玩,这个手段就够了。希望大家都能遇到针对自己游戏专门开发的外挂,哈哈。
行为统计分析
把玩家的行为(常常是点击行为)记录下来并进行分析。这种方式可以辅助检测玩家是否使用按键精灵这种工具。
内存、通信加密
之前介绍了外挂可能修改内存或者篡改同步消息以达到他们的目的,若我们对客户端的内存信息和通信信息加密,外挂拿到了信息也不能分析,从而也就无从下手了。
举报
moba游戏或者fps这种对抗性的游戏中,玩家使用外挂对手能明显感知到。对于这种游戏,举报机制是一个很有用的防外挂手段。
验证码
梦幻就有这个模式。
以上介绍的通用方法并不能解决所有的外挂问题,因此我们在游戏的逻辑实现过程中要需要做对应的防外挂机制。
在游戏逻辑实现中进行防外挂的基本方法是:
服务端保存验证信息
收到客户端发来的消息后,对消息的合法性进行验算。
在具体的游戏执行逻辑中增加防外挂机制的时候需要秉持一些原则:
保证外挂收益不抵支出
这个有两层含义,一层含义是要让外挂使用者无法获得收益;另一层含义是,若外挂使用者只能通过非常麻烦复杂的工作才获得一些小小收益,那么这种情况我们可以放过,也就是说不需要对所有的情况都需要增加防外挂逻辑。
不影响游戏性能
在增加防外挂逻辑的时候,需要考虑为了防外挂增加的性能开销。若因为防外挂增加了巨大的性能开销,那么往往是不值得的。这种情况可以考虑不要在逻辑里面放外挂,而且是通过其他方式。
区分什么是不可信的,什么是可信的。
可信的不需要验证,不可信的选择性验证。在我们游戏里面,所有客户端发送的消息都认为是不可信的,所有服务端发起的调用都是可信的。比如在下面介绍的移动模块防外挂机制,当服务端的其他模块比如机关模块通知我的移动模块瞬移,这种情况我不考虑机关模块是否可能是被外挂操作了,我认为都是可信的。当然这个机关可能是被客户端操作,那么这时候客户端是不是用了外挂应该是由机关模块来判断和验证
首先我们科普一下外挂的定义(自己总结非官方):能够修改目标程序原有的行为或数据的第三方程序。其中最常见的目标程序就是网络游戏客户端。一直以来,网络游戏开发商以及运营商与外挂开发者之间的对抗,从未停止过。正所谓,八仙过海各显神通。在对抗的过程当中,双方都有一定的收益,在利益的驱使下,双方都竭尽所能使用更高端的技术完成攻与防的内容。
正所谓,知己知彼百战百胜。我们作为专业的反外挂开发商,非常有必要了解各种常见游戏外挂所采用的技术。只有知道了他们的原理,我们才能想出对抗外挂的技术方法。下面列出我们在十数载反外挂研究中发现的外挂技术种类(不全之处,还望补充)。
一.脱机类外挂
在游戏开发过程中,每款游戏的客户端与服务端都会有固定的通信格式,大部分游戏通信协议位于TCP层之上,自定义的数据结构,外挂开发者们称此为封包。下面简单列举一个简单的打斗封包,以方便说明脱机类外挂原理。
0000ABCD 0000DCBA 00001234 00001000
例如玩家1在与玩家2打斗过程中,发送到服务器这样一个16字节的数据包,其中游戏开发者定义此数据包含义如下:
0000ABCD:玩家1的ID。
0000DCBA:玩家2的ID。
00001234:玩家1所使用的技能编号。
00001000:玩家1对玩家2造成的伤害,转换为十进制为:4096。
当服务器接收到此数据包时,则会将玩家2的血量减少4096点,如果玩家血量减少后小于等于0,则判定为玩家2已经阵亡。这时服务器会返回给玩家2的客户端一个数据包,玩家2的客户端则播放一个玩家2已经死亡的动画。
以上逻辑,其实存在着大量的漏洞,比如说,服务器应该判定玩家上一次释放00001234号技能是否在冷却时间内,再比如说,服务器应该判定玩家战斗过程中所造成的伤害是否与其装备、法力值、攻击力、暴击等相吻合,是否超过了游戏本身限制的最大伤害。类似这种漏洞,每一款游戏都会存在,只不过不会这么明显。一些老游戏在这方面做的相对较弱,所以漏洞更多。
另外,在游戏开发过程中,数据通信的格式在游戏开发商的公司中都有相关文档明确定义的。而这些文档非常机密。一些游戏开发商公司的安全做的不够好的情况下,可能会造成游戏代码以及文档的泄露。这些资料,一旦流入外挂开发者手中,那么这款游戏就极有可能会出现脱机式外挂。
脱机外挂定义:在不开启游戏客户端的情况下,第三方程序直接与游戏服务器进行通信,模拟账号登陆验证、选择角色、进入游戏、进入场景、开始战斗、对怪物造成伤害等操作时的合法数据包,发送给服务器,而服务器是没有能力判断出这些包是否是客户端发来的,即便有验证手段,由于源码已经泄露,外挂开发者可以轻而易举的模拟出服务端的各种验证机制。即便数据包传送过程中是加密的,由于源码外漏,外挂开发者一样可以正确模拟出数据包的加密方式。
对于这种类型的外挂,常见的屏蔽手段就是修改加密方式,使得脱机外挂发送过来的数据包,服务端无法解析,或者解析出的结果是错误的,而服务端发现客户端发送错误的数据包时,则断开连接。此方法,需要客户端与服务端同步更新。改动较大。
还有一种常见方法,是在客户端中嵌入一些验证性代码,与另外一个专门负责验证的服务端通信,客户端必须正确作答后,服务端方可认为是合法客户端发来的数据包。此类反外挂方式,我们也会经常见到,比如一些游戏中为防止挂机行为而加入的答题机制。
采用腾讯游戏安全服务,座位反外挂措施的游戏方比较多。在外挂对抗时效和技术更新上,也没有令人失望。
外挂(wài guà),又叫开挂、开外挂、辅助、第三方辅助软件,综合某些修改器的功能进行编程出的游戏修改器。
一般指通过修改游戏数据而为玩家谋取利益的作弊程序或软件,即利用电脑技术针对一个或多个软件进行非原设操作,篡改游戏原本正常的设定和规则,大幅增强游戏角色的技能和超越常规的能力,从而达到轻松获取胜利、奖励和快感的好处,通过改变软件的部分程序制作而成的作弊程序。
主要应用原理是在游戏中用封包和抓包工具对游戏本身或游戏服务器提交假参数从而改变游戏中的人物能力。使用外挂具有一定风险,特别是在非单机游戏中使用破坏游戏公平性的外挂,可能还会被封禁账号。
外挂也指单位形的作战武器系统在其原本的作战单位上添加附加的用于辅助作战单位作战的工具、器具。
外挂会造成网络游戏的极度不公平,同时造成服务器端的垃圾数据增多(这通常是因为外挂软件开发者没有掌握服务器端的技术而造成的),而且由于使用外挂者大多不用在电脑前加以控制,而令玩家长期处于“挂机”状态,服务器需要使用更多资源来处理这些并非由人控制的角色。
令到服务器端的工作量激增,网络游戏运营商需要打开更多服务器来处理这批角色,而使成本增加。(都有可能令其他玩家游戏画面或速度减慢)
一些受欢迎网络游戏就会有“专业”的外挂。一些比较少玩家的网络游戏通常都没有“专业”的外挂,因此,外挂的多少可以作为一个网络游戏受欢迎程度的指针。