手游面临的安全风险有哪些?

随着智能手机的普及,市场的泛娱乐化,手游行业发展迅猛。手机游戏在整个游戏市场已经占了一定的江山。手游用户的增多,手游的安全性随之受到行业的重视。目前越来越多游戏面临各种各样的安全风险,如静态修改文件,动态修改游戏逻辑,篡改协议,游戏盗号,恶意发言,工作室等等,这些风险极大影响了游戏的平衡性和游戏的体验,对游戏及用户本身造成消极的影响。

下面将分类介绍这些各种的风险形式以及一些常用的实现方式。

1.1 静态修改文件

游戏文件被静态修改再重新打包签名是很典型的一种安全风险,通过这种方式,原本可能需要购买的游戏很可能就能直接玩,甚至在里面打广告,散播色情和恶意言论等等,损害了游戏开发方的利益;而另一方面游戏本身的一些逻辑被破坏,甚至被插入恶意代码,导致游戏出现安全风险,也损害了用户的利益。同时,也存在直接修改安装后的资源文件,代码文件,配置文件等等,直接影响游戏运行逻辑。下面将着重介绍这些手法及其实现方式。

1.1.1 修改资源

修改游戏资源的方式有很多种,但最终结果都是影响游戏逻辑。游戏如果被修改了游戏资源,那么原本游戏需要引用到的资源就会缺失,这样可能会导致整个调用该资源处理逻辑的链失效,从而导致游戏出现非正常的行为。

一般来说,可以尝试在游戏的资源目录替换或者删除一下资源文件,如图片或声音资源等,通过资源的修改,影响游戏的逻辑或者在游戏中做非法宣传等行为。

例如,某飞机类游戏的游戏目录里面存在img_bullet_enemy.png这么一个文件,如果尝试把这个文件删除掉,然后开启游戏,会发现其出现敌机无子弹的情况,而玩家的子弹依然可以用,那么这样就造成了一种无敌的情况,轻易通关。再者,通过非法破解并篡改游戏中的图片、声音或者视频资源,在里面加入自己需要宣传的广告,不单影响用户的体验,如果是欺诈类信息还会间接导致用户造成财产安全的损失,也影响了游戏的健康度。

1.1.2 修改代码

修改代码最直接的影响的是游戏逻辑,影响逻辑意味着影响游戏的平衡性,这种情况对其他的游戏玩家是不公平的,容易造成玩家的流失。

就手游来说,对于Native层存放游戏逻辑的游戏,恶意用户修改得比较多的还是只读数据段和代码段,只读数据段可能存放着一些对游戏有重要作用的数据,代码段包含了整个游戏的执行逻辑,合理地修改这些会造成一定的外挂功能,如无敌,秒怪,技能无CD等等,在此不一一列举。而对于一些核心代码是在游戏运行时加载编译的游戏来说,恶意用户甚至只需要通过对影响逻辑的核心文件简单地反编译得到源码般的逻辑后,修改并打包回去就能直接对游戏造成不良的影响。严重者造成非常恶劣的外挂影响游戏。

当然,做这些事情的前提是对游戏开发环境以及代码有一定的了解,但是随着游戏社区的普及,论坛介绍相关的游戏环境和知识的文章越来越多,恶意用户就有更多的渠道去获取相关的知识和基础。

1.1.3 修改配置

修改配置文件和修改资源文件有点类似,也可以理解为配置文件其实是资源文件的一种。一般游戏的配置文件在打包发布是加密的,一些不注重安全性的游戏很容易直接把未加密的配置文件发布到外网中,这样的话恶意用户能够轻易修改配置文件。如一些xml文件的修改,bin文件的替换等等。例如某些游戏的xml会保存着一些屏幕或者地图索引等信息,直接修改里面的数据后可能会出现一些未预料到表现。

举个例子,某跑酷类游戏修改其中的xml文件的屏幕大小配置选项会影响游戏主角速度;把原本简单关卡配置的bin文件复制N份重命名覆盖原来困难关卡的bin文件就形成了游戏场景简单化的效果,获取非法收益。诸如这样修改游戏配置的情况有很多,这些很大程度影响了游戏的平衡性,对游戏造成了不良的影响。

1.2 动态篡改逻辑

游戏除了被静态修改而面临风险外,还可能在运行时被动态修改,这种情况很常见。一般来说,常规的动态篡改逻辑都会伴随着注入和挂钩的操作。注入的方式大体分为两种,一种是通过注入zygote进程渗透到目标游戏进程中,另一种是直接注入到目标游戏进程中;而挂钩操作也有不同的种类,如GOT表Hook,inline Hook等,其目的是拦截游戏逻辑。另外,在一些系统中如安卓系统存在不注入程序而达到修改程序数据的效果,虽然这种方式比较简单,但却是目前影响游戏安全最大的一个因素之一。

下面分修改代码和修改数据两类简单介绍。

1.2.1 修改代码

手游中游戏与恶意外挂权限的不对等就很容易出现恶意外挂在已root的手机里面对游戏为所欲为,注入程序,挂钩代码,直接影响游戏的运行逻辑。

比如一个游戏在主角在玩副本打怪的过程中如果打怪的伤害计算函数在本地的客户端内,那么每一次主角打怪物就必定会调用伤害计算函数去处理怪物最终的减血量,如果这个时候一些恶意外挂程序注入到了游戏中,然后挂钩这个伤害的处理函数,在主角对怪物造成伤害的时候拦截住了伤害处理逻辑,感知当前伤害,并对这个伤害值放大数倍就会达到秒怪的效果。

除了上面描述的外,还存在另一种修改代码的方式,原理大同小异,就是注入后直接修改代码,这种方式和静态修改代码差不多,只不过这种方式是以动态的形式修改的,对于静态修改代码来说只不过是在内存动刀而已。

再拿伤害处理逻辑来说,如果游戏的实时pvp对战的伤害处理逻辑是在对方的客户端运算的,通俗来说就是你能不能打伤我,我说了算这种情况。恶意用户会想到直接不处理对方对自己造成伤害时的逻辑,这个时候如果逻辑模块用的是thumb指令且函数自身无返回值且调用该函数时保存了调用现场的话则只需在处理函数的头两个字节写上0x46F7即可(Arm指令的话则是0xE1A0F00E),因为这是一条返回指令。

1.2.2 修改数据

破坏游戏正常运行常见于通用修改器,如市场上出现的烧饼修改器,葫芦侠修改器等等,其修改数据主要是修改堆栈和全局变量等。因为游戏中可能存在未加密的类成员变量或者全局变量等等,所以如果通过内存的变化去定位出某个数据的具体位置还是很容易的。

这种修改可以是注入式的修改,也可以是非注入式的修改。在IOS系统里面目前都会先注入到程序然后修改里面数据,而在android系统中则可以根据/proc//maps文件遍历具有r标识的感兴趣的模块通过/proc//mem达到和注入式修改一样的效果。

1.3 游戏协议

游戏协议是游戏客户端和服务器交互的管道,是具体游戏协定的通信格式。通过协议,服务器可以知道客户端的游戏此刻处于什么状态,发送和请求什么数据等等。如果协议遭到分析破解,篡改和恶意重发,会给游戏甚至整个游戏服务器带来严重影响。游戏协议的修改可以从两方面来阐述,分别是篡改游戏协议和重发游戏协议,只要在网络层或者传输层拦截协议即可。所以游戏厂商至少会从两方面保护游戏协议,一个是做好协议字段的加密和哈希校验;另一个是对每条协议都要增加序号字段防止协议重发。

1.3.1 篡改游戏协议

篡改游戏协议的影响和游戏本身的设计方式相关性很大。因为一些游戏尽管篡改了协议对游戏的影响并不恶劣,主要是因为游戏初期设计的时候就设计成不信任客户端的数据。而一些重客户端逻辑的游戏因为服务器极度依赖客户端数据,服务器接收处理不得当或不经任何处理就直接转发协议到另一个客户端都会对游戏造成很大的影响。

这里有个真实案例,某游戏在副本结算协议里面存在一个字段,这个字段通过分析只有0和1两种状态,正常玩游戏结束如果失败了,这个字段会是0;如果游戏结束时是闯关成功的,那么这个字段则是1,。那这里我们可以简单的理解这个字段的意义为是否胜利。后面做的操作是在通关失败时拦截协议,篡改这个字段为1,会发现是有胜利收益的。这种情况篡改游戏协议是可行的,但更多是游戏本身的设计问题。

而如果服务器对介绍的数据没有处理好直接转发给另一个客户端,这样很容易让恶意用户在协议中构造特殊数据令其他客户端崩溃。比如某些游戏的pvp对战,如果可以令对方的客户端崩溃,那么恶意用户就可以直接获得胜利,赚取收益。

所以在游戏协议设计得当的基础上,服务器不要轻信客户端传过来的数据才能保证游戏的安全性。

1.3.2 重发游戏协议

重发游戏协议数据往往不是因为游戏侧协议内逻辑校验不够完善,而是由于协议内容字段不够丰富以及协议间耦合度不高而形成的。举一个比较易于理解的例子,某枪战类游戏在实时pvp对战中造成伤害时会发送伤害协议,恶意用户通过篡改游戏的伤害值这个方式试图改变对敌方的伤害,发现这个方法并没有效果。因为游戏开发侧在服务器里面就设定了不信任客户端的伤害值,所以这种修改方式没什么作用。但是如果恶意用户在拦截到这种伤害协议时,复制该协议几份一并发送过去,那这个时候服务器就认为确实是造成了这么多次伤害,这样恶意用户就可以秒杀敌方玩家了。如果游戏侧增加一些时间,子弹数,命中源和目标位置等等字段,并且每次这种伤害协议的发送前会在前后有一些附带该协议信息的标识就不能简单地重发协议了。

1.4 游戏盗号

盗号的情况在游戏生存周期中是无法避免的问题,因为游戏账号是由人来托管的,游戏侧只能尽量减少盗号的发生。但是可能因为手游起步较晚以及手机大部分游戏的登陆都是直接授权登陆,手游盗号的情况与端游相比较少。出现盗号的情况可能是由于玩家通用的账号在其他地方泄露了,恶意使用者通过这个账号登陆进手游转移财产,这个是目前手游中盗号可能性最大的一种情景。另一方面,也因为手游中能够进行财产转移的游戏也是很少的,这也是游戏盗号在手游中不常见的原因之一。

而一旦手游发生盗号,游戏平台的安全性也容易受到质疑,很可能会导致用户流失,这也是游戏开发方需要重视的问题。

1.5 恶意发言

现在越来越多的游戏系统中存在大厅或者游戏内聊天的功能。这个时候就会出现一些恶意用户进行恶意发言,比如散播广告,谣言,诈骗,黄赌毒等信息,利用用户的心理诱导正常用户,极大影响了游戏的健康度,对用户和游戏造成不良影响。

据不完全统计,恶意发言影响的群体大多数是刚刚入门玩游戏的用户,这些用户更容易受到游戏中恶意发言的吸引,比如一些低价购买钻石的信息,如“1元购买100w钻,联系方式XXXX”等诈骗信息。随着游戏的活跃量上涨,一些看起来微不足道不足以让人相信的信息也会影响一大部分用户的,保障这部分用户的利益,也是游戏开发方所需要考虑的问题。

1.6 工作室

与端游一样,手游中工作室建立的目的也是为了从游戏中赚取非法收益。一般工作室会购置大量的机器,并且通过辅助插件,外挂等工具以及多开的方式刷取高品质账号出售;如果手游中有转移财产的手段,也有的工作室会把众多小号的财产批量集中转移到某个账号上面出售。工作室这些行为不仅非法赚取利益,而且很容易扰乱游戏的经济系统,对游戏经济平衡性造成了较大危害。一旦经济系统失衡,用户在游戏投入金钱获得的物品就容易贬值,所以对工作室的打击无论用户自身还是游戏开发方也是有好处的。

1.7 小结

本文介绍了手游面临的安全风险,每种风险的利用方式以及这些风险产生的危害,旨在让读者了解手游当前手游面临的安全问题及其严重性,并倡导大家共同维系健康的游戏环境。

转载请注明来自游戏安全实验室(GSLAB.QQ.COM)
原文链接:https://gslab.qq.com/portal.php?mod=view&aid=95

推荐阅读