自2016年以来,手游行业迎来全面爆发。大量资本、创业者的入局,让整个手游市场越发热闹,手游红利的挖掘也越发深入,各种游戏层出不穷。但是随之而来的各种安全问题也越来越多,不仅对手游的使用体验和口碑产生了恶劣的影响,甚至还会导致生死存亡的窘境。
那么,究竟如何才能构建一体化的手游安全防护?如何才能实现手游市场的良性发展?
时下的Unity手游面临着复杂安全风险
手游通常会面临着游戏修改器、游戏加速器、模拟按键挂、游戏破解版等外挂工具风险。
游戏修改器:使用修改器能够将游戏伤害倍率从18%提升到999.9%,使得攻击伤害增强了几十倍。而且类似的原理还可以实现无敌、秒杀、无限蓝、技能无CD等效果,因此修改器对游戏平衡的危害相当大。常用修改器包括烧饼修改器、八门神器、GameGuardian(GG修改器及其各种修改版)。其中GG修改器流行于即时对战类游戏,比如热门的吃鸡游戏。
除了这些外挂工具风险外,手游安全中的破解风险同样影响严重。
一般而言,破解风险包括Unity mono脚本解密、Unity il2cpp脚本解析、Assetbundle资源篡改、存档数据被修改、协议破解等多个方面。
旅行青蛙是一个没有任何保护的Unity3d游戏,突然火了以后,搜索引擎可以搜索到大量的破解版本,QQ群上也可以搜索大量的辅助群。在其中,就藏着许多的安全风险。比如:
使用GG加速器可以使三叶草瞬间长满:
使用dnspy可以解析assets/bin/Data/Managed/Assembly-CSharp.dll:
原始代码
修改后的代码
上面列举的旅行青蛙手游风险只是其中的一个典型,但是管中窥豹可以得知,目前的手游市场面临着错综复杂的安全挑战,安全防护是所有手游厂商都必须关注的重中之重。
网易云易盾如何实现了一体化的安全防护?
针对这种情况,在今天(9月8日)的2018 RTC 实时互联网大会•社交游戏专场中,网易资深安全工程师张本梁分享了《网易Android游戏保护实践》主题内容,就当前的手游安全形势给出了分析和解答,并深度介绍了网易云易盾安全解决方案的技术要点。
在张本梁看来,如果游戏不做保护,不管是外挂工具还是破解,都可以修改游戏逻辑,这会对游戏造成很大的收入和口碑损害。而网易云易盾所提供的一体化解决方案能够很好地解决这些问题,不仅可以破解包的检测,而且能够跟破解者无感知对抗、对恶意用户进行全方位的风险评估。它还具备完善的通用保护功能,支持任意的游戏引擎,所以手游厂商们完全可以根据游戏需求自主选择:
对于潜在的破解风险,易盾安全解决方案还能够从代码层面提供详尽的功能保护。
DLL脚本加解密的原理是修改或者HOOKmono_image_open_from_data_with_name,mono_image_open_from_data_with_name是CSharp脚本的加载函数,如果CSharp
DLL脚本做了加密,需要在这个函数执行之前解密。因此只要在这个函数这里下断点或者HOOK,就可以解密出原始DLL。不需要逆向加密算法。留意一下,这里有个memcpy拷贝操作,mono会把解密后的DLL在内存中留存一份拷贝。
该方案包括三代加密方法:第一代加密:直接对DLL文件进行加密,在mono_image_open_from_data_with_name函数开始处解密。解密门槛很低,只要使用修改器就可以解密。第二代加密基于第一代加密的明显弱点,针对解密加强了防护。解密门槛比较高,需要非常强的逆向开发能力才能破解。第三代加密则针对Csharp函数做加密,也就是方法级加密,动态解密。易盾采用的是第二代加密+第三代加密组合使用的方式来确保DLL脚本加密的安全强度。
Il2cpp脚本信息以lib2cpp.so形式存在,结合global-metadata.dat文件内的符号信息,对libil2cpp.so做so加壳,即可进行解析。如下所示,原始libil2cpp.so用IDA可以看到475个导出函数,但是加固后的libil2cpp.so导出函数则为空。
Assetbundle、静态资源加密
那么手游如何进行易盾加固接入?首先需要确定游戏加固项,而且易盾技术也支持云端配置好加固项,然后获取appkey,下载加固jar包工具,根据使用说明配置好appkey即可。