天天移动游戏开发之反作弊篇

发表于2015-05-05
评论1 1.47w浏览

其实相对端游来讲,移动游戏的作弊和反作弊不值得一提。端游的作弊和反作弊是源远流长、历史悠久,这里就不做班门弄斧叙述这一段可歌可泣的故事了。

但是要是完全不提,这文章就没必要写了,所以还是得啰嗦啰嗦

先简单说一下移动游戏的作弊历史吧。说明一下,这里讨论的是移动游戏其实特指“手机游戏”。历史上曾经出现形形色色的各种掌机,比如广为人知的GBGBANDSPSP,大多数人未曾听说MeoGeo Pocket Sega Nomad等。随着智能手机的兴起,它们都已经或者即将消失在人们的视线中,除了目前还有NDSPSP这两个系列还在苦苦支撑,但感觉也是落日黄花。另外它们的系统基本封闭,网游也很少,作弊困难且影响不大。

从技术的角度看手机游戏大致经历了3个时代:

1) J2ME时代

手机系统非常封闭,游戏都是单机向且简单,基本上不存在作弊这回事。

2) Symbian时代

标志是SymbianS60系统的流行,出现了一些较复杂的游戏,甚至出现了一些RPG网游。并且J2ME也逐渐发展,和Symbian并驾齐驱。但手机系统还比较封闭,加上网游偏少,这一期出现的作弊行为也不多。

3) 智能手机时代

随着iOSAndroid的兴起,智能手机逐渐一统移动游戏市场,手机游戏也呈现百花齐放的景象。由于手机设备的特殊性(带有触摸屏、重力感应、陀螺仪、GPS等特殊功能),游戏类型开始变得更加多样化,出现了很多在PC上无法想象的玩法和游戏类型。游戏作弊也逐渐随着这个过程开始变得猖狂起来。

先简单列下端游的作弊和反作弊手段,它们对与移动游戏有同样的借鉴意义:

1、反编译工程:对抗手法有很多,比如加壳、混淆、不要使用明文字符串等。

2、资源文件修改:通常要做加密、完整性校验。

3、内存修改:通常内存加密存储等。

4、协议破解:协议内容当然也需要混淆、加密。

5、自动脚本:自动脚本对抗是比较麻烦的,通常需要在服务器端做行为分析和数据校验来判断。

6、等等

公司在这方面积累很多,这里我就不一一列举和分析了。下面说一下移动游戏的情况。

 

先看iOSiOS几乎是一个非常封闭的系统,早期的游戏也偏休闲单机向,作弊问题也不严重。但iOS越狱出现,开始出现了内购破解,驱使了多数的内购验证从客户端验证转向服务器验证,甚至很多单机向的游戏在内购上都采取服务器验证。再随着iOS的八门神器等工具的出现,针对游戏本身数据修改和作弊也开始多起来。

Android从最开始就是完全开放的,并且它的安全思想设计存在很大问题。比如Android设计了签名机制,但是却没有对签名所用的证书做认证。这些决定了在Android系统上一定会外挂横行。所以以下的讨论也基本上针对Android系统来讲。

目前我们依托微信/Q打造了一系列基于关系链的社交休闲游戏,比如天天爱消除/天天连萌/天天酷跑等。由于这些游戏是基于真实的社交关系链,而且不分区的。那么一旦有玩家通过作弊获取高分,并长期占据排行榜的榜首,那么会影响这个玩家的所有好友,如果扩散开来,对整个游戏的打击也是致命的。在这些游戏开发和运营的过程中,反作弊应该被摆在比较重要的位置。

两个最大困难点:

1、 游戏不能去获取Root权限,导致在对抗作弊行为中,本身就处于非常不利的位置。可以设想一个作弊工具要求获取Root权限,想安装它的用户肯定会同意;但是一个游戏要获取Root权限,普通用户肯定拒绝安装了。

2、 手机游戏的客户端的代码升级比较麻烦,不能像PC端游那样每次启动都去检查是否有新的代码版本。一是苹果对游戏使用脚本升级有一定的限制,可能会导致审核不通过;二是在移动终端上频繁的升级带来的用户体验不好。

结合天天系列游戏说一下传统的作弊手段在移动终端上的运用情况。

1、反编译工程

现在完全可以通过IDA逆向分析APK,然后重新打包安装手机上进行作弊,只是相对来说安卓逆向技术成本稍大一点。而目前要检测到客户端已经被修改比较困难。

目前来说通过这个手段进行作弊的情况还很少,暂时我们对此是监控和观察。

2、资源文件修改

在越狱的iOS设备和RootAndroid设备上,修改资源文件变得非常容易。通常需要对资源文件必须要使用加密和做完整性校验,核心的配置文件最好从服务器下发,不保存在本地。

3、内存修改

目前是天天系列游戏中遇到最常见的作弊方法。市面上流行的八门神器、烧饼大师都能够轻易的做到内存修改。玩家对分数、金币、道具数量等,只能能够获取好处的数值,都有人作弊。

这就需要对所有的关键数据进行内存加密和存储保护。一些简单的通用做法就能够很好的防止被修改,比如和一个随机数按位做运算后存储、把数值按位/字节分开存储等。

4、 协议破解

网络协议加密是必须的。目前这一块出现的问题还不多,但可以预见未来也会是重灾区。

5、 自动脚本

目前针对天天连萌和天天爱消除已经有自动脚本,它完全模拟用户行为,从这个角度看,我们无法完全区分它和正常用户在数值和行为上的差异。目前只能通过操作频率(频率太高或者频率太稳定)、得分过高来区分少部分作弊行为。这一点可以通过监测当前系统后台是否有可疑脚本运行来预防,但是前提是获取Root权限。

根据游戏类型的特点,我们也做了一些其他的反作弊工作:

1、 防止修改系统时钟。对于单局限时的游戏,很多玩家使用变速工具减慢系统时钟。可以采用累积一定帧数后判断所用时间,由于我们使用了限帧代码,时间如果小于一定值,则可能使用变速工具。

2、 各种关键数据上报,然后服务器进行校验。比如游戏时间,道具生成、使用情况,不合理的判定为作弊。

3、 限制屏幕点击频率和多点触摸的上限。主要就是为了防止自动脚本作弊行为。

4、 验证分数上限。比如爱消除我们限制了250W的上线,但是随时时间的推移,发现有玩家已经触及这个上线了。

5、 安全上报日志,由安全组后期验证。如果确认用外挂,可以清除金钱、等级、成就等。

 

还有一点经验和教训:

1、 客户端一定要尽可能上报足够多的统计数据,提供给服务器端做动态判断。

2、 对于作弊行为的判定尽可能不要放在客户端,避免误杀行为。

 

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引