首页 > Unity3D频道 > 【Unity杂文】 > 【转发】FairGuard游戏加固方案
2020
07-14

【转发】FairGuard游戏加固方案

Unity(iOS)AssetBundle资源内存动态分块加密方案  

一、背景
AssetBunlde资源包是unity引擎游戏对资源(声音、图片、脚本等)的压缩包,那我们为啥要保护AssetBunlde(以下简称AB包)?对于一般技术人员都清楚, 游戏逆向者(游戏外挂制作者)一般通过游戏资源修改工具(AssetStudio、UABE)修改之后重打包实现某种程度正常游戏达不到的功能,例如射击类修改资源后可以透视,等等,下面是某作者技术文章就说的很明白怎么破解AB包。

【转发】FairGuard游戏加固方案 - 雨松MOMO程序研究院 - 1
【转发】FairGuard游戏加固方案 - 雨松MOMO程序研究院 - 2
那市面上iOS端有没有比较好的加解密方案呢?通过调研,发现有些是Unity源码级别的,但是第一、这对开发者的技术要求比较高,第二、这种加解密只能做到整体加解密(会在内存中某个时间断暴露解密后资源),所以说目前还没发现针对iOS端的“AB包内存动态分块加解密技术”,在此背景下,fariguard研发出了针对iOS端AB包资源独家内存动态分块加解密方案(此方案在不影响游戏的运行效率下极大程度保护了AB资源安全,且支持在线更新)
二、iOS侧技术难度
有些同学就会问,为啥iOS端相比安卓端就难实现呢?有如下几点原因:

1、 iOS整个系统是闭源状态,APP运行时权限限制严格,代码段只能执行、数据段只能读取

2、 iOS APP唯一上架渠APP Store,所有APP上架到APP Store之前都会受到苹果的严格审核。
那么FairGuard通过独家静态HOOK技术,通过解析AssetBundle文件格式进行Patch关键位置实现了内存动态分块加解密方案,这样就避开了由于苹果闭源导致App运行时权限不足以及上架问题。

三、具体实现方案

3.1 内存动态加解密方案

3.2.1、 概述-寻找最佳Patch函数

【转发】FairGuard游戏加固方案 - 雨松MOMO程序研究院 - 3
通过寻找最终定位在libiPhone-lib.a里面的ArchiveStorage类,所有的上层加载AB资源的接口都会调用这个函数并把ab资源加载到内存。
3.2.2、 实现思维图导图如下
【转发】FairGuard游戏加固方案 - 雨松MOMO程序研究院 - 4

3.2.3、 方案优点

【转发】FairGuard游戏加固方案 - 雨松MOMO程序研究院 - 5
四、加密前后对比

4.1、 加密前后AssetBundle资源效果

【转发】FairGuard游戏加固方案 - 雨松MOMO程序研究院 - 6
4.2、 加密后APP启动效果
【转发】FairGuard游戏加固方案 - 雨松MOMO程序研究院 - 7

 

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

留下一个回复

你的email不会被公开。