中文站

手游安全真正应该关注什么?

一、手游安全应该关注什么?

之前接到客户某款游戏第三方安全测试机构的报告,报告显示游戏存在高危,客户有点纳闷:用了第三方专业(易盾)的保护,怎么还存在高危?接下来,让我们一起分析一下这些“高危”,是不是真正对手游构成了严重的威胁?

第三方的安全测试机构会对手游APP进行安全测试,包括客户端的静态安全、客户端数据安全和客户端运行时安全等,接下来我们一一分析下:

1.客户端静态安全

1.1反编译安全

某第三方测试机构通过apktool 和dex2jar 工具对APK进行反编译,如下图1-1所示,得到该APK不安全的结论:APP可以被反编译看到java的源码。


由于目前在众多的手游架构中,绝大多数的核心逻辑是:

U3D引擎:mono中的dll文件,和il2cpp形式中的libil2cpp.so文件和global-metadata.dat文件;

NX引擎:npk文件;

coscos引擎:lua文件;

layaair:js文件等

核心是上面的这些,而不是游戏包中的dex文件,因此这种粗粒度的检测不具有参考价值,更构不成高危信息。

1.2完整性校验:

该第三方机构通过对该APK替换一个文件,重新打包能运行——粗粒度得到该APK存在高危的安全问题。


由于手游发布到各个渠道的时,渠道会对APK文件中嵌入些渠道信息,因此母包一般情况下不会加入完整性校验,并且对于游戏包中的资源文件等核心文件的保护和校验处理,易盾有对应的资源文件加密和强文件校验,进一步针对性的保护游戏中的核心文件,因此上面那种粗粒度的检测到高危是不具有参考价值。

2.客户端数据安全

第三方测试机构首先运行目标APP,使用MemSpcetor查看目标APP进程中的内存段,然后寻找对应的登录的敏感信息。


这里先不谈论这个工具运行所需要的环境,以及这样的内存数据是不是手游的核心内存数据,而是先来认知一个关键点——对于手游来说,最重要的是什么?实际上,最重要的是游戏运行过程中游戏业务逻辑所展现出来的内存数据安全。比如以GG修改器以及变种代表的一类的攻击工具;比如通过加速/减速这一类的变速工具以及模拟点击类工具,通过这一类的工具来实现自动打怪升级、做任务、血量无限、金币自设置、游戏速度加减等(内存数据的保护,易盾有对应的修改器检测和内存数据检测等)。

3.客户端运行安全

对于手游运行安全,第三方测试机构只是仅仅测试了对于root的环境;


实际上,手游很多是需要支持模拟器运行的,我们知道模拟器大部分是root的形式存在的,因此直接粗粒度的提示用户风险是不符合业务逻辑的。

并且随着Android系统的不断升级,通过寻找系统本身的漏洞会越来越难,因而陆续出现了magsik和多开助手之类的软件达到相同的root的功能,因此重点应该关注这些运行环境。易盾除了对于运行时上述安全检查以外,还有其他所有能够被攻击者所利用的各种隐患安全环境检查。

第三方测试机构在运行安全检查时,除了检查上面的root安全,还应检查客户端输入记录保护和劫持保护等。尤其是成功的Activity劫持将会替换客户端的启动界面,对用户产生很大的诱骗作用。

这些是另一个层面的安全,对于真正的手游安全我们更应该关注另外两个层面:反破解和反外挂。

二、手游外挂的侵略

寓攻于守,方能破敌,因此作为防守人,首先要知道攻击者是怎么进行入侵的?知彼知己,方能百战不殆。

1.破解

攻击者破解手段有很多,主要是包括如下两种逻辑:

1.1直面破解

攻击者通过去反编译分析游戏中的核心文件,比如代码逻辑或者是资源文件。典型的就是通过U3D mono中的dll文件,找到对应的游戏逻辑进行篡改,达到自己的破解目的,或者去分析il2cpp中的libil2cpp.so文件,分析其中的关键游戏逻辑进行篡改,进而进行二次打包。面对这些破解手段,重要文件的各种加固加壳的保护应运而生,进而阻挡攻击者的分析。


1.2迂回破解

部分攻击者不是直接通过正面的角度去破解,而是通过研究加载重要逻辑文件的流程,通过hook或者注入的操作来达到自己的目的,如下图所示,为某攻击者通过注入一个so文件达到自己的目的。


也有些攻击者,重点放在对于libunity.so文件上,如下图所示,通过修改libunity.so文件的关键输出逻辑达到作弊的效果。


这些攻击者在面对保护方案的时候,通过HOOK来对一些创建线程或者退出逻辑来成功且巧妙的绕过一些保护,进而达到自己的目的,以下就是某攻击手段通过对退出逻辑进行HOOK的操作。


2.外挂

手游外挂指通过破坏游戏运行的正常数据和逻辑的各种工具,或者伪造客户端玩家“正常”操作的一切手段。

目前手游外挂的表现形式多种多样,一类包括以模拟点击类、加速器、修改器以及对应所产生的各种变种,或者是通过修改内存数据的原理结合andlua或者c4droid等框架来达到对应的各种辅助效果,再配合一些外挂所需要的运行环境,比如云真机,各类各端模拟器,以及多开等环境,进而达到自己的目的。

当然随着移动游戏的市场的快速发展,也出现了一些不修改客户端的逻辑,伪造玩家来达到自己的手段,比如脚本精灵和一些脱机挂等等,还有一些诸如打金工作室,想更高效地刷取获取游戏币,从而实现自己的利益化。

2.1 直接挂

直接挂主要指的是通过修改客户端的执行逻辑,进行修改作弊,大多数情况下是通用的,有一对多的属性。比如GG修改器,烧饼和葫芦侠等以及衍生的这类的变种,原理是利用修改器搜索相应数值,再根据数值变化规律定位到在内存中的位置,然后直接进行修改达到对应的效果。

也有各类的加速/减速器,比如光环助手,叉叉变速器等代表。原理上通过HOOK一些关于时间相关的函数,影响游戏帧更新频率,实现加速过关、减速躲闪技能等功能。

由于直接挂比较多且成熟,这里就不举例说明了。

2.2 间接挂

间接挂在不修改客户端逻辑的情况下进行自动模拟升级,比较有代表性的是模拟点击类的挂,一般情况下是一对一。

以下是一个通过借助于PC端的Android模拟器的模拟挂的实例,通过在/data/local/tmp释放一些重要文件,然后强求adb连接以后,通过传递一些功能标志来对游戏的libil2cpp文件进行操作,来达到自动模拟点击的效果。




三、手游安全的防护

手游安全问题主要包括反外挂和反破解两个方面,在不断与各类破解、外挂的攻防对战中,网易易盾通过总结不同新型外挂的属性,持续对手游加固和反外挂模块进行迭代,完善功能、加强防御,做到了疾如风、徐如林,不动如山。

最后,再提一句,如果需要对游戏进行专业性的安全检测,也可以找我们网易易盾。点击免费试用手游智能反外挂服务