Skip to main content

Unity3D程序保护最佳实践

功能简介#

Virbox Protector 为 Unity3D 程序定制了专属的加密方案用于保护程序代码和资源,防止程序被反编译和篡改。

Unity 版本

Virbox Protector 支持了 Unity 引擎所支持的主流平台,支持 Unity 5.4 以上的 5.x 版本,以及 Unity 2017 以上版本,同时支持 Mono 和 il2cpp Release方式编译方式生成的应用。

编译方式WindowsLinuxmacOSAndroidiOS
Mono
il2cpp

Virbox Protector 需要对 Unity 引擎做修改,建议使用 Unity 官方发布的版本,并使用 Release 方式编译。

功能列表

详细功能支持如下:

功能WindowsLinuxmacOSAndroidiOS
程序集加密(Mono)N/A
资源加密
内存校验(il2cpp)
Unity引擎保护(il2cpp)
MetaData加密(il2cpp)
MetaData名称混淆(il2cpp)
调试器检测
签名校验
文件校验
反注入
防截屏
模拟器检测N/AN/AN/AN/A
Root 检测N/AN/AN/A
多开检测N/A

保护流程#

打开Unity程序#

Virbox Protector 保护 Unity3D 程序时,需要对生成的整个应用保护,对 Windows、Linux 直接保护编译生成的整个文件夹,对 Android 平台保护 .apk 文件,而对 macOS/iOS 平台则是保护生成的 .app 文件夹。

直接将需要保护的文件夹/.apk/.app 拖进 Virbox Protector 即可开始保护。

设置保护选项#

选择程序集(Mono)

如果保护的 Unity 应用是 Mono 编译方式生成的,核心代码一般位于 Assembly-CSharp.dll 这个程序集文件中,请在加密选项 界面的程序集中添加需要保护的程序集,建议选择自己开发生成的程序集,请勿选择 Unity 自带的程序集

其它选项

其它选项的设置,不同平台会有所差异,请以 Virbox Protector 工具界面上显示的功能为准。

注:以下表格中的 il2cpp 模块,表示 Unity 程序使用 il2cpp 方式编译生成的 libil2cpp.so、GameAssembly.dll 或 UnityFramework 模块,不同平台的模块名不同。

选项描述操作建议
反调试检测到调试器则退出建议勾选
Unity引擎保护(il2cpp)保护 il2cpp 模块,防止动态调用建议勾选
MetaData名称混淆(il2cpp)混淆 global-metadata.dat 里的方法名建议勾选
内存校验(il2cpp)校验 il2cpp 模块的内存完整性部分低版本安卓模拟器会修改 ELF 结构信息导致校验失败,存在部分兼容性问题;建议根据运行环境选择
签名校验校验开发者签名如果用于 Google Play 上架,则不勾选,否则建议勾选;该选项需要开启签名功能
文件校验校验 apk/aab 内所有文件的完整性建议勾选
反注入防 ptrace 注入、反调试建议勾选
防截屏防止应用开启状态时被截屏视应用运行环境而定
模拟器检测检测到模拟器则退出视应用运行环境而定,如果目标设备的硬件环境特殊,也不要勾选
Root 检测检测到设备被 Root 则退出视应用运行环境而定
多开检测检测是应用多开则退出视应用运行环境而定

资源加密#

Virbox Protector 支持加密 Unity3D 程序中的 Asset Bundle 资源,在 Windows/Linux 平台支持所有类型的资源。

资源加密页点击 启用 即可打开资源加密功能,再点击选择文件选择需要加密的资源文件即可。

大小优先:在Android/iOS 平台,如果开发者关心加密后的包大小,可以勾选此选项,但勾选后会降低加密的安全性。

设置密码

如果需要使用资源热更新功能,则需要设置密码,否则建议使用随机密钥。密钥与解密逻辑在保护时会链接到 Unity 引擎模块中,因此加密的资源与保护后的 Unity 模块对应。

加密外部资源

如果资源不在应用程序内,或者是通过热更新的方式下载到本地的资源,可以点击加密外部资源再单独进行加密,加密外部资源需要先设置密码并保存配置

签名#

Android 签名

Virbox Protector 的签名过程需要安装 jdk 环境,并确保将 java、jarsigner 加入 PATH 环境变量(可以打开命令行终端输入 java 或 jarsigner 测试)。

签名过程需要正确填写 KeyStore 路径、KeyStore密码、密钥别名、密钥密码。

iOS 签名

iOS 应用的签名只在 macOS 系统下保护时支持,Virbox Protector 采用的是重新签名的方式,保护前的 iOS App 也需要经过签名,并保证选择的证书一致。

保护#

设置好所有选项后,点击保护选中项目即可开始保护,保护完成后会生成到输出文件(夹)中,接下来进行测试和发布流程即可。

控制台自动保护#

在界面配置完成后,点击保存选中配置会在被保护的程序旁边生成 .ssp 文件,如果应用重新打包后,可继续使用该 .ssp文件自动化保护。

virboxprotector_con <application_path> -o <output_application_path>

注:.ssp 文件需要与 <applicaton_path> 位于同一目录下。

建议将 virboxprotector_con 加入环境变量,virboxprotector_con 的默认安装后所在目录为:

​ Windows: C:\Program Files\senseshield\Virbox Protector 2\bin

​ Linux: /usr/share/virboxprotector/bin

​ macOS: /Applications/Virbox Protector 2.app/Contents/MacOS/bin

性能与技术原理#

功能性能技术原理
程序集加密与方法数量和大小有关加密程序集中的方法和整个程序集,在程序集中的 IL 代码编译时(JIT 过程)在保护后的 Mono 中逐个方法解密
资源加密与资源数量和大小有关加密选择的资源,运行时在修改后的 Unity 引擎中解密
反调试几乎无影响使用系统层 API 或内存状态等信息检测调试器
Unity引擎保护(il2cpp)有轻微影响指令混淆结合调用者检测
MetaData名称混淆(il2cpp)无影响解析 global-metadat.dat 修改名称
内存校验(il2cpp)启动时有轻微影响扫描并校验指令是否被篡改
签名校验启动时有轻微影响校验 APK/AAB 的开发者签名
文件校验启动时有轻微影响校验 APK 内每个文件的哈希值
反注入几乎无影响使用系统层 API 防止调试附加和内存修改
模拟器检测启动时有轻微影响检测运行设备的硬件信息与否为常规设备
Root 检测启动时有轻微影响检测当前运行系统是否为 Root 环境
多开检测启动时有轻微影响检测当前运行环境是否为多开应用