腾讯游戏如何防止外挂?
(以下内容主要从后台角度出发,实际上在预防外挂方面,产品设计策略以及客户端安全防范都扮演着十分重要的角色。Tygerli在这方面经验不多,还请有经验的同事协助补充。另外不同的业务逻辑在处理外挂方面会有一些独特的方法,这里仅是部分总结。)
据说没有外挂的游戏就不是好游戏,但是太多的外挂也是一款游戏走下坡路的重要原因。那么在手机游戏中我们是如何应对外挂的呢?这要先从外挂的危害说起。
1. 外挂的危害
1、游戏货币贬值。导致游戏世界里货币超发,物价上涨,损害时长玩家的利益。值得一提的是,和现实世界类似,在游戏里,物价上涨容易,但是即使在严厉打击外挂控制银两产出时,物价的回落仍然十分缓慢。所以严格控制物价上涨的速度是十分必要的。
2、正常玩家无法登录。特别是在开新区或者有新的活动上线时,外挂使用自动化脚本不停的登录,并长时间的挂在游戏里头,正常玩家无法登录游戏。
3、影响收入。通过两方面影响收入,一方面它通过比官方价格低的方式出售游戏币,争夺收入份额;另一方面货币贬值/物品泛滥以及无法登陆等原因导致玩家流失,进而影响游戏收入和游戏周期。
2. 外挂类型
外挂也分不同的手段和目的,有的是玩家自娱自乐用几个小号帮主账号打钱,有的是在游戏里坑蒙拐骗,成规模的则是通过专门的脱机外挂使用数百上千账号同时登陆获取游戏币,分类如下。具体检测及应对方式在后面详细讨论。
1、钓鱼类。在游戏里发送钓鱼邮件,进行交易欺骗,无偿或以很低的价格骗取其他玩家的金钱、装备。
2、加速类。使用模拟器帧加速,或者修改代码提高帧率。目的是在较短时间内获取较高收益。
3、按键精灵挂机类。按键精灵辅助或文字识别,然后破解客户端协议进行自动操作,实现快速获得收益。
4、脱机外挂。破解协议,脱离客户端,同时挂成千上万的角色刷银两,也是对我们游戏货币产出危害最大的一类。
5、入侵攻击类。破解协议,短时间内发送大量请求。目的在于攻击服务器或者为自己的外挂服务。
应对外挂主要处理两个问题,首要的就是识别外挂。
3. 识别
针对外挂千变万化的操作,有一个原则在识别外挂时比较有效,那就是“检测出非正常情况”。从微观上看,一款设计的好的游戏,一个角色每天的登录次数、在游戏里头的移动速度、每天能够升级到多少级、参加多少次活动、赚取多少游戏币都是有一个正常范围的;而从宏观上一个服务器或者全服来看,每天的留存率、各个时段的同时在线数量、游戏货币产出量也都会有个正常的区间。
那么这些实时的、或者经过事后统计的数据发生了异常和突变,必定是有原因的——虽然不会一定是外挂导致的。比如,如果游戏的某个区当天做了推广,那么同时在线也有可能会增加不少;再或者运营商网络出现问题,也会导致在线下降。这些时候,需要具体情况,具体对待。
典型的,我们用来检测外挂的一些异常情况可以分成实时的、事后统计得到的以及一些辅助的方式。
一、实时检测:
1、同一帐号登录过于频繁;
2、角色在游戏里移动过快、操作过于频繁;
3、针对不同版本的协议进行不同的加密和回复;
4、耗费资源的协议频率异常;
二、统计分析检测:
1、同一IP同时登录的人数过多;
2、每天通过邮件邮寄出(入)以及(被)赠与银两的次数过多;
3、拥有的游戏币数量与等级严重不符的角色;
4、某些物品在市场上的交易价格严重偏离正常价格;
三、辅助分析方式:
1、在线激增;
2、服务器间流量激增,出现告警;
3、角色名称异常;
很多时候这里并不是某一条单一出现的,而是同时出现的,比如我们找出来的符合第一条的往往也符合第六条,很多名字是A100、A101等等;
4、在拍拍和淘宝上找到游戏币卖家的QQ号以及与其关联的号码;
5、游戏里头广播的商人帐号;
识别出外挂之后,我们要做的就是防范和处理,给与外挂一定的惩罚。
4. 防范
知道了外挂的类型、操作原理,以及通常的手段之后,我们就针对性的设计一些防范的手段。简单的可以分成产品及运营侧以及技术侧两方面。
一、产品和运营侧
游戏中任务和活动的设计,最好是玩家友好而对外挂不友好甚至是外挂无法完成(或者起码现有的技术无法完成、抑或无法低成本的完成)的。对于一些提高了玩家操作门槛的操作,比如验证码,可以合理的使用奖惩手段,比如双倍奖励等来补偿玩家。
1、 要求玩家输入验证码;
2、 不允许低等级玩家在游戏中进行银两和物品转移;
3、通过法律手段解决。从游戏中取得详细的外挂数据,提供给法务部,通过法律手段禁止工作室非法销售游戏币。
二、技术侧
1、频率、数量、速度限制:
i) 同一帐号登录频率限制;
ii) 对于一些比较消耗资源的协议处理,做时间限制,比如查询、5键搜索、IOS支付等等;
iii) 同一帐号所有服务器同时在线人数限制;
iv) 角色移动速度限制、心跳协议发送频率限制
2、弹验证码:
在外挂容易得手的地方加入验证码;另外,一种类似验证码的方式是弹出简单的数字题目。
3、 动态协议:每次使用不同的内容代表相同的语义;
4、 菜单混淆:因为简单的外挂每次总会固定选择菜单的某一项,通过变化的菜单破坏外挂的固有程序。
5、 关键字过滤:主要针对钓鱼类外挂;
6、 协议加密:不同的客户端使用不同的加密方式和返回值,判断出外挂后,缓冲一段时间踢下线;或者记录日志统一处理;
7、 强制客户端校验失效:外挂一次登录后可以永远切换不同的服务器,后来把sid的有效性时长缩短;外挂发现后,为保证sid有效,会持续不断的登录服务器,每秒很多次,为防止这种情况,做了登录时间限制;
以上是一些游戏里实时的处理方式,另外根据日志,我们可以检测到外挂的一些行为,总结如下:
8、 通过登录日志分析同一IP同一秒钟登录次数超过M个帐号的、每天通过转移游戏币超过N次的,有极大的概率可以判断为刷子;
9、 刷子一般为工作室所有,他们会把银两集中到某几个帐号上,并反复的进行转移,跟踪打击这些节点帐号可以得到4两拨千斤的效果;
10、 使用机器学习算法分析日志识别外挂(以后的方向,尽量跟游戏形成闭环);
另外,与我们知道的外挂手段相比,危害更大的可能是那些我们还不了解的方法。所以,除了以上一些处理方式之外,我们在服务端开发时还需要遵守“防御式编程”规则,以防止外挂利用游戏里的漏洞。
1、服务器不信任客户端,后台充分进行校验;
2、需要扣除然后给予的操作,永远保证先扣除,后给予,向着对作弊者不利的方向开发代码;
5. 处罚
在检查出玩家使用了外挂之后,游戏会给予一定的惩罚。惩罚的原则是:力度与其对游戏的破坏成正比。目前游戏里使用了比较简单的方式对外挂账号进行处理,接下来还需要完善。
1、 关小黑屋;
2、 登录时或者通过邮件警告;
3、 封号一段时间内或者永久无法登录;
4、 如果有非法获得,则没收非法所得游戏币。
一些注意事项:
1、 判断出外挂玩家后不立即踢掉,每天集中时间段踢,防止外挂判断出检测思路;
2、 (一段时间内)冲过值的玩家以及高于一定等级的玩家在惩罚时需要谨慎;
3、每天处理的帐号需要备案,并注明原因;
6. 案例
以下是之前一段时期两个跟外挂斗争的案例,可以发现,跟外挂的斗争是个长期的过程;外挂变化相当快,任何固有的方式可能会很快失效。
一、应对外挂通过押镖(一种时长玩家可以获取游戏币的方法)刷钱
因为客户端对验证码的支持需要一个比较长的周期,所以在所有的客户端支持验证码之前,需要进行不断的斗争。
1、随机菜单。我们发现押镖外挂在处理菜单时,只会选择第一项,我们就随机在押镖选项前后加上捐献100银两,外挂稍不注意就扣光钱了;
2、外挂聪明后,就对准“押镖”字眼,我们后来改成动态的“开始""执行押镖"“立刻押镖”等很多文字组合随机弹,代表押镖的操作;
3、然后外挂破解了协议,可以直接选择押镖,我们又把押镖的协议做成动态的,协议的内容会变动;
4、后才检查出来模拟器之后,专门给模拟器弹验证码;
5、外挂发现之后,破解了我们识别模拟器协议,模拟正常玩家。然后我们全部改成弹验证码。
二、应对外挂数百帐号集中刷钱
外挂工作室的运作方式大致雷同,如前文所述。这些工作室产出的银两在游戏里头占相当的比例,也对游戏造成了危害。
1、发现月底用户没有太大增长的情况下,游戏里每天的银两产出不断增加,汇率不断创下新高;
2、通过分析日志,发现每天凌晨有不少同时登录的帐号,进一步发现每天的这些帐号集中来自3-4个IP;
3、排除孤立点,选择来自这些IP的同一秒钟登录次数超过20次的号码;检查发现,几乎所有区都有角色,均为同一门派、同一性别、同一等级(一般为22-36之间),角色名称类似AB01、AB02,可以判定为外挂。
4、每天封停类似帐号1k-2k个,4天之后,游戏里货币产出降低40%-50%。如下图所示,红线和蓝线分别为打击外挂前后游戏币产出的对比。