在游戏的制作过程中,开发者都会考虑一个非常重要的问题,即如何在游戏运行过程中对资源进行动态下载和加载。为此,Unity使用了AssetBundle这一技术来满足开发者的需求。那么,什么是AssetBundle呢?
AssetBundle是Unity中的一种资源包,这种资源包可以是Unity游戏内要用到的几乎所有资源,例如:模型、贴图、纹理、预设、场景、脚本等。它是资源的一种集合,可以理解为资源的一种压缩包。开发者,通过AssetBundle的方式将游戏中所需要的各类资源打包压缩并上传到网络服务器上,当游戏运行时再从服务器下载该资源,从而实现资源的动态加载与运行。基于它的压缩(缺省)、动态加载等特征,很容易解决以下问题:
(1)实现资源的热更
(2)减少包体大小,方便游戏做分包处理
一、AssetBundle资源安全性
对于游戏开发者来说,游戏内的资源是重要的资产,保护游戏资源变得越来越重要。原始的AB文件,可以通过工具(比如:AssetStudicGUI)直接查看游戏中的资源,如下:
这样的话,游戏资源就容易被盗取,造成不可预估的损失。更重要的是,未加密的AB资源同样会被游戏外挂作者利用,给游戏带来致命性的打击,影响游戏的平衡。例如:
○修改图片资源可以达到透视的目的
○修改游戏脚本可以打出更高的伤害
○脚本暴露,遭遇外挂开发者的破解,影响游戏数值平衡等
○资源暴露,存在剧透、竟品分析风险
由此可见,AB资源让我们在获得便利的同时,也带来了一系列的安全问题,这使得针对AB资源的保护显得越来越重要。
二、AssetBundle资源保护方案
尽管AB资源的保护迫在眉睫,但是市面上的依然缺乏完美的加密方案。iOS闭源的特性,也使得iOS的AB资源保护方案难以入手,使开发难度直线上升。相比Android,iOS APP获取到的权限更低,在非越狱环境下能使用的方案十分有限。使用整体加密方案,解密性能低,影响游戏的启动速度、画面流畅感。面对开发环境和黑灰产的双重压力下,网易易盾全新一代的AB资源加密方案也应运而生。
方案整体逻辑如下:
Unity 不同的版本提供了不同的接口以供调用,在实现上也有些许差异。而且不同的开发者也有不同的使用习惯,所以需要开发通用方案来兼容各种情形。通过对底层的函数进行操作,以达到通用的目的,从而实现AB资源的动态加载和解密。
我们的资源加密方案有以下特点:
三、AssetBundle资源保护效果
AssetStudicGUI可以直接查看AssetBundle文件,通过它可以轻易获取任何脚本、图片等资源信息。如下:
但是,对AB文件加密后,我们再次打开,可以发现不仅加密了资源文件,还对目录进行了隐藏。这样就能更加有效的防止资源被窃取,最大限度的保护AB文件不被破解。
我们直接以一个图片文件为例,在AB文件中标志为:CAB-1b46b1b14dfb14fbe428b0ff40abfaca
加密前的二进制数据如下:
加密后如下:
通过二进制对比,可以看到图片里的数据已经加密:
四、总结
AB资源让开发者获得了极大的便利,但其本身存在的安全问题,也使得对AB资源的保护变得越来越重要。网易易盾AB资源加密经过长久的技术沉淀,已经能够有效的应对AB资源破解,在保证安全的前提下,几乎不影响游戏本身的启动时间以及运行效率。同时,Android和iOS做到极致兼容,同一套加密后的AB资源,可以同时热更给Android和iOS两个平台。
网易易盾通过多年技术深耕,在安全加固、手游反外挂、安全检测、设备指纹、安全组件等方面已经具有相当的优势。为了给我们的客户提供最高质量的服务,我们也将持续完善各项保护功能,为开发者保驾护航。
相关阅读: