开发Unity3D程序在上市前要对程序做保护,最快及安全的方式就是选择一款商业保护软件。选择时要认准以下几点。
需要具备的功能
- 保护 C# 程序集(Assembly-CSharp.dll),防止C#代码被反编译,防止 de4dot 等工具还原代码。
- 加密 global-meta-data.dat 文件,并通过多种保护技术防止 il2cppDumper 等工具 Dump .NET 元数据信息。
- 加密 AssetBundle 资源,防止 Asset Studio 等工具反编译。
- 通过平台相关技术,防止程序被动态调试。
- 防调试器附加,防注入,防内存 dump。
加密核心技术
程序集保护
对程序集中所有方法的 IL 代码加密,通过修改 Mono 引擎,运行时在 JIT 编译过程中解密,
每次仅有一个方法被解密,并解密到随机的内存地址,保证加密后的程序无法被 Dump 出整个程序集。
资源加密
加密 Unity Asset Bundle 资源,在 unity 引擎中解密,防止 Asset Bundle 资源被反编译打包。
global-meta-data 加密
加密 il2cpp 的 global-meta-data 文件,并对内部结构进行混淆处理,防止运行时在内存中直接解析。
il2cpp 保护
对 il2cpp.so 或 GameAssembly.dll 处理,去除导出函数,并对内存进行完整性校验,防止篡改。
反调试
通过平台相关API、数据结构和寄存器,检测调试器,防止动态调试。
防注入
通过双进程 ptrace 守护技术,防止其它进程对附加调试或注入。