十大耐玩手机单机游戏跑酷游戏b?


作者:黄耀华(QA)
  笔者在过去的一年里,负责或协助进行若干款手游项目的安全性测试,积累了不少经验,也发现了不少安全性问题。本文把自己的一些经验与想法记录了一下,主要是想进行一个手游安全性测试的扫盲,更深一层是想要激发大家对手游安全性测试的重视。
一、手游为什么要做安全性测试?
  近年正是手机游戏兴起之时,公司也开了很多手游的项目。与当前端游刚兴起的时候类似,游戏的安全性问题在逐渐暴露出来。市面上不少游戏由于各种安全性问题,营收受到不同程度的打击。
  手游安全性问题带来的危害主要分两方面:
  一是被抄袭;如果美术资源或者代码被破解了,那么游戏可能会被抄袭,尤其是一些以画面为优点的2D手游。
  二是进行游戏内非法获利,轻则玩家自己修改爽一把,吊打一下大R玩家,重则制造外挂贩卖,游戏内外挂满天飞。
1、安全性问题举例
游戏A战斗过程加速:
  扫荡卷,应该很多人都知道,玩家用来快速完成一场战斗并获得战斗奖励,游戏又能从售卖扫荡券中获利。
  游戏A刚推出扫荡卷时,预计能引发一轮提升,但似乎并没有什么作用。
  因为玩家发现,使用烧饼加速器等等可以对游戏战斗进行加速,例如加速个5倍10倍,然后开着自动战斗,一场战斗也就3、4秒钟,比播放扫荡的动画时间长不了多少,于是相当于拥有了免费的扫荡卷。
  为了解决这个问题,游戏A做了一个措施。
  由于服务器是知道玩家一场战斗的开始时间和结束时间的,于是当一场战斗所需的时间比预计的时间少时,服务器就认为玩家进行了作弊,然后判玩家战斗失败。为了减少误杀,这个预计的时间一般是跟战斗和副本难度相关的一个值。
游戏B修改内存秒杀BOSS:
  游戏B的外挂和作弊手段一搜一大堆。其中比较常见和容易的就是内存修改。
  通过使用烧饼修改器、八门神器、葫芦侠等等内存修改器,查找游戏战斗中的各项数值,就能对其进行修改。从而屌丝瞬间变成高富帅,各种免费玩家竞技场吊打大R。
2、手游对比端游存在的问题
  (1)手游开发主要使用cocos2dx,Unity3d等第三方引擎,如果没有进行特殊处理,那么引擎通用的安全性问题自然也会出现;
  (2)手游的游戏过程由于受到网络流量与速度制约,都会对游戏联网要求进行削弱,不像端游那样全实时联网校验,而是只有数值变化的时候才会请求,并且一般战斗过程都只在客户端进行计算;
  (3)手游存在多种支付方式,包括第三方支付和短信支付,而这些支付渠道都不在公司控制下,无法保证其安全性。尤其短信支付,模拟个短信收发那是相当简单的事情。
  (4)手游开发周期短,一个好的项目一旦被破解资源、代码,那么被抄袭的速度可以非常快,甚至能比原版还要快上线;
几种常见外挂:
  (1)内存修改器
  (2)游戏加速器
  (3)脱机外挂
  (4)山寨客户端
  (5)内存注入插件
  (6)内购破解
  看到这么多种类的外挂,是不是觉得江湖险恶?所以要带上两把刷子!
二、手游安全性问题有哪些?
  笔者把做过的安全性测试和平时爱好对其他游戏的安全性研究总结出经验,归纳为下面这些安全性问题,并分为四个部分进行,分别是:静态、动态、网络、支付。
1、静态
  静态,其实就是游戏未运行的时候。
  静态时,游戏相关文件包括两个地方:一个是安装包;一个是安装目录;
安装包:
  无论是apk还是ipa,本质都是一个zip压缩包。所以都可以通过普通的解压缩软件打开。例如:
安装目录:
  为了得到最完整的文件内容,最好是安装游戏后,进入游戏并且下载完所有patch,再进行安装目录的测试。对于安卓平台,可以各种文件管理器软件,或者adb shell查看,一般是存放在/data/data 或者SDCARD0/Android/data,推荐是所有地方都查看。
静态资源泄露问题:
  静态资源包括美术资源和音乐资源
  美术资源包括界面图片,3D模型,角色贴图等;
  音乐资源包括游戏的场景音乐和音效等;
  一旦静态资源被完整泄露,就非常容易被抄袭和盗用。
具体的问题举例一:
  对于用unity3d引擎开发的游戏来说,存在一个通用性的静态资源安全性问题。例如下两图(建议放大查看)是我用工具提取的某个游戏的游戏资源的一部分,包括各种界面资源和模型贴图(一坨坨五颜六色的就是了),另外还有各种音效资源没截图。
具体的问题举例二:
  对于用cocos2dx引擎开发的游戏,根据版本和制作资源的方法不同,加密程度也不一样,例如某款单机游戏的资源安全性就比较弱,解开安装包,就随便可以找到各种界面图片资源、音乐音效资源:
静态数值问题:
  静态数值包括数据表和本地存档。
  数据表主要指游戏的各种配置表,包括游戏的策划数值表,客户端的配置表等。
  本地存档主要指游戏存在本地用以记录游戏进度和数值的文件。主要是单机游戏类容易出问题。
具体的问题举例:
  例如,某个游戏就把数据表存成sqlite文件的形式,里面包括了角色升级所需经验,水晶抽卡和金币抽卡的牌库等。
  策划数据表的泄露严不严重,主要是看策划是否愿意让玩家知道这些信息。对于一些通过客户端就能知道的数值,例如升级等级、成就条件,那么即使被玩家知道也无妨;但是对于抽卡的牌库、概率之类的数据泄露了,可能就容易引起不良影响了。
静态代码问题:
  静态代码指的就是游戏未运行时的代码文件。除了对于不同引擎有不同的游戏逻辑代码文件(例如unity3d的DLL文件,例如cocos2dx的脚本文件)外,还有平台专属的代码文件(安卓平台的dex文件)。
具体的问题举例一:
  例如某款unity3D的游戏,其游戏逻辑的dll文件并没有进行任何安全措施,于是能通过修改命中率、暴击率、暴击倍数,从而达到一击秒杀敌人的效果。(目前已修复)
具体的问题举例二:
  还是某款cocos引擎手游,在安装包里存这大量的lua明文脚本。不过至于游戏有没有用到,能不能修改生效,笔者并未进行尝试。
具体的问题举例三:
  QA部有同事通过修改安卓的dex文件里的smali代码,从而白富美作伴,走向人生巅峰,同时也能修改sdk支付代码从而免费获得晶钻。
问题可能带来的危害:
  如果静态代码可以被修改,那么可能会出现最严重的问题,就是出现修改版的客户端。这些修改版的客户端问题不仅仅是大量小白玩家都能轻易进行游戏作弊,更可怕的是可能植入病毒,伪装官方游戏安装包分发出去,导致玩家利益受损,并把矛头指向公司。
2、动态
  动态就是游戏正在运行的时候。广义来讲,网络、支付都属于动态。但是由于这两个方面比较重要,所以分开来说。这里的动态主要指动态数值和动态代码两方面。
动态数值问题:
  动态数值其实就是最常见的内存修改。主要是通过内存修改器例如烧饼修改器,八门神器等。游戏加速器也属于此类。例如角色身上的金币,元宝之类的数值,由于有服务器校验,一般是不会有问题的。问题主要出在结算是给服务器发送的数值,和战斗过程中的数值。
具体的问题举例一:
  对于一些单机类尤其是跑酷类游戏,奔跑的过程中,可以通过烧饼修改器,查找并锁定血量,或者修改获得的金币数量,从而无往而不利。
具体的问题举例二:
  一般进行内存数值,都只是搜索具体的表现数值,例如金币是1000,那么就搜索1000。但不要想当然的,把游戏内所有的数值都多加1234这个值,即1000就变成了2234,玩家就搜不到这个值了。但玩家是非常聪明的,作弊方法也是层出不穷的。
  例如某款游戏,虽然开发商已经对内存数值做了类似的处理,但是依然可以通过模糊搜索找到战斗数值,例如攻击力,从而暴打BOSS,走向人生巅峰。
问题可能带来的危害:
  如果战斗过程中,没有与服务器进行通信,也就是说服务器完全不知道客户端信息,那么这个战斗的结果是完全靠客户端计算的。
  那么如果内存中战斗中的相关数值可以被修改,那么战斗的结果就是随玩家为所欲为了。如果内存数值的地址也是固定或者容易被计算出来的,那么甚至会被开发出专门的外挂。
  务必记住的是,即使对内存数值进行了加密处理,但是只要战斗过程中服务器无法获知客户端的战斗数值信息,那么就有可能被作弊,只是在于难度的高低而已。
动态代码注入问题:
  动态代码注入是个相对比较高端的技术。主要是靠linux或unix的工具和原理,因为安卓的本质是一个精简版linux系统,而IOS得本质则是一个特殊版unix。
具体的问题举例一:
  QA部有大牛研究出了COCOS2DX的内存注入技术,原理大概是通过钩子把自己的so库加入到app中,然后注入修改脚本函数入口,从而控制客户端。
具体的问题举例二:
  类似的技术,在IOS上面有个工具,叫FLEX,可以实现修改app的函数返回值。
3、网络
  网络安全问题主要包括通信的加密和服务器安全。
通信加密问题:
  理论上来说,通信加密似乎是理所当然的,但是却不是每个游戏都有做,或者只是部分加密而已,甚至加密的方法只是掩耳盗铃,完全没有效果。
具体的问题举例:
  例如某款卡牌战略手游,由于使用http方式进行通讯,同时通讯数据并没有进行加密,所以出现了脱机挂。简单而言就是通过一个python脚本就能完成登录,战斗,刷塔,竞技场,抽卡,等几乎所有的操作,无需安装客户端。可以做到例如开200个小号加入自己公会每天做任务并捐钱的程度。网络上也有类似的现成外挂。
服务器问题:
  服务器问题包括端口安全、GM工具安全、周边服务器系统安全问题等。例如与GM工具的通信没有加密,并且外网可用;资源服务器有漏洞被入侵等。
具体的问题举例:
  笔者负责的游戏的登陆服,经常收到外部的无效链接。估计是一些黑客尝试对该端口进行入侵。通过报错的反馈,是有人用工具遍历各种网站的漏洞入口,例如xxx/admin.php 或者xxx/login.asp。一旦被试出漏洞,那么整个服务器都可能被入侵。
4.支付
安卓支付问题:
  安卓有幸运破解器破解内购,还有LBE安全大师可以屏蔽支付短信。例如笔者上个月玩的“某款游戏”,可以通过幸运破解器破解内购项,也可以用LBE安全性大师屏蔽支付短信,从而支付成功。
IOS支付问题:
  越狱的IOS有许多IAP插件,大概的功能是伪造一个假的苹果订单,如果是单机游戏,那么客户端直接解析这个订单就会认为付款成功而发货了。如果是联网游戏,那么需要先去苹果服务器确认这个订单的有效性,否则就亏大发了。
三、注意事项与建议
  对于通用的安全性,给出下面几个建议:
  (1)保证重要操作服务端都有校验:
  包括货币、商品的购买与消耗;玩法的各种限制等等;
  (2)保证所有通信都有加密,玩家无法破解通信协议。
  (3)Log尽量详细,从而能根据log找出作弊者。
  技术一直在进步,现在没有发现的安全性问题,不一定就一直没问题,我们QA要与时俱进,多关注最新的外挂与技术,同时推进项目安全性措施,才能让我们的游戏在复杂的游戏环境中激流勇进。
}

我要回帖

更多关于 十大耐玩手机单机游戏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信