menu

Unity Assetbundle 资源加密方案

一、 Assetbundle 资源被破解解密的危害

Unity 从 5.x 版本之后,Assetbundle 资源使用越来越广泛,ab 包里可以包含图片、视频或者脚本,都是游戏的知识财产,如果被破解者或者竞争对手解开,拿到里面的内容,对游戏是个很大的损失。

Ab 资源被解密抓取,除了知识财产损失外,也会对游戏运营产生很大影响。比如游戏包内的活动资源,被提前解开剧透,会大大影响活动效果。另外资源如果被修改还会产生外挂效果。

比如下图,资源材质被修改成透明,产生了透视效果。

gaitubao_image002.png

二、Ab 资源加密方案实现原理

现在很多游戏都认识到 Assetbundle 资源加密的重要性,网上也能找到相关的加密文章,比如雨松 mono 提供的方案,对整个资源做加密。这种方法的缺点非常明显,Ab 资源占到游戏很大体积的比例,如果全部这样做加密,对性能影响会非常大。

如何对 ab 资源加密同时,解密消耗还很小,这个问题成为很多游戏的痛点。

FairGuard 手游加固研发团队,花费大量时间对 unity 引擎做黑盒分析,弄清楚了 Assetbundle 的加载机理以及其文件结构。

制定了如下的加密方案

  1. 首先通过对 Assetbundle 文件进行结构解析,找到资源文件的核心文件块,对核心文件块进行加密。
  2. 然后在游戏运行时,对 unity 引擎 Assetbundle 加载时机进行埋点,在埋点处对核心文件块进行解密。

三、Ab 资源加密方案的优点

这个方案有如下优点:

  1. 只有资源被加载的时候才会解密,不会增加启动延时
  2. 加密强度很高,加解密算法进行了自定义混淆,让破解者无法分析出算法,算法流程图如下所示:
    gaitubao_image002.png
  3. 兼容性高
    通过 Android SO 加壳或 iOS 静态 hook 导入的纯 native 方案,兼容所有 32 位和 64 位指令集。
  4. 解密速度非常快
    有如下两个原因:
    1) 因为核心文件块很小,不随整个资源文件大小而变化。使用主流手机测试,300 个资源文件一次性解密,额外增加的解密时间不到 10ms。
    2) 加密算法虽然做了高强度自定义混淆,但是混淆都是经过精心设计,在增加复杂度的同时,兼顾了效率,运行开销很小。
  5. 支持资源在线更新
  6. 支持 Android/iOS/PC 三平台

三个平台 ab 资源加解密算法通用,即使在线下发三端通用的加密过的 Ab 资源,也可正常加载。

四、Unity 资源加密使用方法

使用非常简单,只要运行一个命令行即可完成对整个游戏资源的加密。

gaitubao_image004.png

这个命令行对游戏资源加密的同时,也会对游戏内的脚本做 mono dll 加密或者 il2cpp 加密。同时也可根据配置选项,增加防破解、防外挂(反修改器、加速器、虚拟机、云手机)等功能。

另外也支持对单独的 AB 包加密,也是只要一条命令行即可。

结语:

FairGuard 专注于 unity 游戏加固,深耕技术,致力于打造业界顶尖的游戏加固产品。公司开发团队都是来自于网易易盾的核心人员,创始人专注于安全领域 10 多年,前网易易盾手游保护负责人,从 0 到 1 主导了易盾手游保护项目。欢迎访问 www.fair-guard.com 了解更多内容。