Unity3D程序代码及资源的保护技术

679 阅读1分钟

开发Unity3D程序在上市前要对程序做保护,最快及安全的方式就是选择一款商业保护软件。选择时要认准以下几点。

需要具备的功能

  1. 保护 C# 程序集(Assembly-CSharp.dll),防止C#代码被反编译,防止 de4dot 等工具还原代码。
  2. 加密 global-meta-data.dat 文件,并通过多种保护技术防止 il2cppDumper 等工具 Dump .NET 元数据信息。
  3. 加密 AssetBundle 资源,防止 Asset Studio 等工具反编译。
  4. 通过平台相关技术,防止程序被动态调试。
  5. 防调试器附加,防注入,防内存 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 守护技术,防止其它进程对附加调试或注入。