Unity手游开发有哪些风险?如何提升Unity手游安全性?

Unity手游开发可能会面临破解风险、外挂工具等风险,对于开发者而言,破除Unity手游风险十分重要。本文介绍了如何提升Unity手游安全性,有效解决Unity手游可能遇到的破解和外挂等问题。

一、Unity手游面临的风险

据统计,2017年国内活跃移动游戏APP应用约有9000款,其多数存在被破解、恶意代码插入、广告插入、外挂、二次打包等安全问题。而这些安全问题为企业带来隐患是,研发难度增加,研发成本的提高、玩家付费意愿减低、游戏失去公平性,玩家流失,直接损失收入——因此,破除Unity手游风险对于开发者来说十分重要。

常见的Unity手游风险主要包括破解风险、外挂工具这两类。

1.破解风险

攻击者破解手段有很多,主要是包括如下两种逻辑: 直面破解、迂回破解。

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


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

常见的破解风险主要有Unity mono脚本解密、Unity il2cpp脚本解析、Assetbundle资源篡改这三项。

2.外挂工具风险

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

2.1 游戏修改器

常用的修改器有烧饼修改器、八门神器和GameGuardian(GG修改器及其各种修改版),其中的GG修改器(GameGuardian)流行于即时对战类游戏(比如吃鸡游戏)。使用修改器能够将伤害倍率从18%改成999.9%,使得攻击伤害提升了几十倍。类似的原理也可以实现无敌、秒杀、无限蓝、技能无CD等效果,因此修改器对游戏平衡的危害相当大。


2.2 免ROOT修改器

免ROOT修改器是指通过第三方软件获得Root权限,可以访问和修改手机游戏中几乎所有的文件,但这样操作有可能影响游戏的稳定性,出现死机、卡顿、重启等人为性故障。

2.3 游戏加速器

加速器分2种类型,一种是手机加速器,例如烧饼加速器、GG加速器;另一种是模拟器加速器,例如天天加速器。加速器除了可以加速,还可以减速。

2.4 游戏破解版

破解版提供了很多变态的功能来吸引玩家。下图是某个站专门破解游戏售卖进行盈利,他们除了有售卖网站,还开了淘宝店。只要月付150元,就已经超过很多游戏的ARPU值了。这样破解版的存在会严重影响普通玩家体验,给游戏收入和口碑都造成很大的损失。


2.5 模拟按键挂

模拟按键挂,虽然只是模拟点击,但是可以做到自动游戏,可以刷各种金币、积分,对游戏平衡也会有比较大的影响。常见的模拟按键挂包括有触动精灵、触摸精灵、按键精灵、叉叉助手、游戏蜂窝等等。

二、如何提升Unity手游安全性

网易易盾能够提供Unity mono DLL脚本加密、IL2CPP 加密、Assetbundle加密等加密解决方案,以及反修改器、反加速、反模拟器、反调试等手游通用保护功能和手游风险感知。 

1.Unity mono DLL脚本加密

通过修改或者HOOK mono_image_open_from_data_with_name能够对DLL脚本加解密。mono_image_open_from_data_with_name是CSharp 脚本的加载函数,如果CSharpDLL脚本做了加密,需要在这个函数执行之前解密。因此只要在这个函数这里下断点或者HOOK,就可以解密出原始DLL,而不需要逆向加密算法。需要注意的是,这里有个memcpy拷贝操作,mono会把解密后的DLL在内存中留存一份拷贝。

该方案包括三代加密方法:第一代加密:直接对DLL文件进行加密,在mono_image_open_from_data_with_name函数开始处解密。解密门槛很低,只要使用修改器就可以解密。第二代加密基于第一代加密的明显弱点,针对解密加强了防护。解密门槛比较高,需要非常强的逆向开发能力才能破解。第三代加密则针对Csharp函数做加密,也就是方法级加密,动态解密。易盾采用的是第二代加密+第三代加密组合使用的方式来确保DLL脚本加密的安全强度。 

2.IL2CPP 加密

Il2cpp脚本信息以lib2cpp.so形式存在,结合global-metadata.dat文件内的符号信息,对libil2cpp.so做so加壳,即可进行解析。如下所示,原始libil2cpp.so用IDA可以看到475个导出函数,但是加固后的libil2cpp.so导出函数则为空。

3.Assetbundle、静态资源加密

对Assetbundle加密后,Unity Studio就无法解析了: 

4.手游通用保护功能

除去Unity mono DLL脚本加密、IL2CPP 加密、Assetbundle加密等加密解决方案外,网易易盾也能够提供通用的手游保护功能,包括反修改器、反加速、反模拟器、反调试、反模拟点击、文件校验、防二次打包、存档加密、引擎SO定制化加壳等。一般而言,这些通用功能任何游戏引擎都支持,可以根据游戏需求选择一个或多个。目前,网易易盾支持的游戏主要包含Unity3d、COCOS、NEOX和UE4。

4.1 反修改器

修改器可以实现很多功能,如无限蓝、技能无CD、无敌、秒杀、倍攻等,是工具党的最爱,也是专业破解者常用的工具之一。GG修改器是做的最专业的修改器之一,专门做了反检测措施(随机化包名、子进程使用系统进程名等),因此常规的进程检测对GG无效。但是易盾手游保护采用修改行为检测,可以通杀所有修改器,包括所有已知和未知的修改器。

4.2 反加速

易盾手游保护对Android系统内的加速器、模拟器进程加速的加速器都有检测方案,同样都是针对行为的检测方案,不针对特定的某些加速器,通用性更好。对于有些加速器的进程加速器,即使只加速0.1倍也可以检测到。


上图是一个加固过的跑酷游戏,用天天加速器加速生效后,过了一秒钟左右,即会闪退。

4.3 反模拟点击

模拟点击严格上来说不属于非法外挂,处于灰色地带,因此模拟点击器都是公司化动作,应用很广泛。易盾手游保护使用了进程+行为检测相结合的方式,能够对模拟点击器进行检测。如下图所示,触动精灵启动后,再启动游戏,保护检测到模拟点击器的存在即会闪退:


以上介绍的这些手游通用保护功能各有其特点,开发者可以按实际需求进行选择:


5.手游风险感知

易盾手游风险感知主要包括包含破解包的检测、跟破解者无感知对抗、恶意用户风险评估以及支持私有化部署。

三、易盾手游保护方案特点

易盾手游保护方案具有纯Native保护、对引擎SO做加壳、兼容性和稳定性高、性能影响小、支持Windows、Linux、Mac三平台加固等性能特点。

1.纯Native保护

游戏dex内部都是第三方SDK以及游戏内部不涉及到游戏逻辑的SDK。如果对Dex加壳的话,一方面容易造成Android碎片化,导致Dex加壳会降低app的兼容性;另外Android存在Dalvik和Art两种虚拟机,所以Dex加壳会为了兼容2种虚拟机而增加处理成本,从而导致启动耗时增加比较厉害。阿里和腾讯都有Dex加壳服务,但是支付宝、微信都没做Dex加壳。支付宝和微信的安全问题应该是所有APP中间最严重的,他们都没做Dex加壳,这很能说明问题,此外所有腾讯的游戏都没有做Dex加壳。所以如果手游保护需要依赖于Dex加壳的话,兼容性和安全性都是很难保证的。因此建议游戏不要使用Dex加壳。

网易易盾可以提供纯Native保护,使游戏保护不依赖Dex加壳。Dex加壳和纯Native保护优缺点比较如下:  


2.对引擎SO做加壳

基本上所有的破解都依赖于对引擎so的逆向分析,如果对so进行了加壳保护,会大大增加游戏被破解的门槛。除了对引擎SO加壳,网易易盾还会对敏感函数代码做校验。

3.兼容性和稳定性高

兼容强的原理在于所有保护都在SO层,不会对DEX进行修改,有效避免了Android碎片化导致的兼容问题。网易易盾的兼容性极高,可以兼容几乎所有版本系统、所有模拟器以及所有游戏引擎使用的指令集。

手游保护的稳定性,需要遵循如下发布流程:

○ QA测试:在200台手机上以及各种模拟器上测试;

○ 预线上测试:将安全模块集成到日活1000的APP上线测试2周;

○ 版本发布:前面2轮都测试稳定后,正式发布;

○ 线上回归:先在内部比较小的游戏上线测试,确保稳定性。

4.性能影响小

易盾保护方案还具有性能影响小的特点,无论是CPU占用、内存占用、启动时间、电量消耗等方面的影响几乎都可忽略不计。


5.支持Windows、Linux、Mac三平台加固

易盾保护方案还支持Windows、Linux、Mac三平台加固,加固工具以jar包形式提供,不仅自带极速签名功能,而且对加固做了全面优化,速度更快。

易盾的手游保护方案可以有效提升Unity手游安全等级,有效解决Unity手游可能遇到的破解和外挂等问题。

相关阅读:

如何提升手游APK加固强度?

移动APP开发如何规避安全隐患?

防不胜防 这些游戏被外挂活生生地毁了

iOS游戏的破解及防护