Unity Mono加密解决方案

Unity Mono 是 Unity 引擎默认的脚本运行时环境,在游戏开发中扮演着重要的角色。Mono 由跨平台的开源 .NET 框架实现,它允许开发者使用 C# 等编程语言编写游戏逻辑。凭借简单易用的开发环境和高效的脚本编译速度,得到了众多游戏的青睐。

在 Mono 模式下,游戏 C# 代码被编译为 IL (中间代码) 并生成 DLL 文件,然后将 DLL 打进游戏包文件。

Mono模式下脚本的编译运行


但由于 IL 非常容易被 ILSpy / .NET Reflector 等专业反编译软件分析逆向,所以在无保护情况下,破解者改包和竞品分析的难度非常低,游戏的安全性极差,如何有效对 Unity Mono 加密成了行业痛点。

使用工具 .NET Reflector 几乎可以还原出 C# 文件


针对DLL的加密方案经历了三代技术演进,首先是第一代加密方式—— DLL整体加密。

其原理是修改 Mono 源码中的 mono_image_open_from_data_with_name 函数,从而对DLL脚本进行整体加密。

这种加密方式缺点比较明显,会在加载前进行一次性解密,游戏运行过程中,内存中存在解密后完整的DLL,使用一些工具就可以从内存中获取DLL文件。

如使用 GameGuardian 修改器搜索 9460301 ,即PE文件Dos头的特征码 (0x4D 5A 90 00) 的十进制表示方式,即可获取DLL信息。

使用修改器搜索DLL的魔法字


第二代DLL加密方式—— DLL函数加密,这种加密方式的优点在于只有使用方法才会进行解密,而一般游戏运行过程中不会用到所有方法,这样内存中就不会存在一个完整的DLL。方法解密的效果如下图所示:

原始未加密dnspy函数解析结果


函数加密后dnspy函数解析报错


而第二代DLL加固方案仍有缺点,使用解析工具可以看到函数名及部分函数,存在一定的安全隐患。

FairGuard研发了第三代DLL加固方案—— DLL结构虚拟化。可对DLL的文件结构进行自定义重构,并对文件结构数据进行高强度加密。

处理完后,所有的工具都无法再解析出任何数据,哪怕是专业的破解分析人员,要解密出里面的结构数据难度也是非常大。

DLL脚本使用的数据结构跟 Windows 下的可执行文件一样,都是PE结构,DLL未做结构虚拟化时,使用 010Editor 可以解析出正常的PE结构。而使用DLL结构虚拟化后,010Editor 无法正常解析,效果如下图:

虚拟化后的DLL结构010 Editor无法正常解析


FairGuard游戏加固研发了一套成熟完善的对抗方案,可针对 Unity 引擎中的 mono DLL / global-metadata.dat / libil2cpp.so 等文件进行高强度加密,还研发了三端通用的 Unity Assetbundle 资源加密方案。

此外,FairGuard游戏加固还提供通用的手游保护功能,包括反内存修改、反变速、反调试、文件完整性校验等多项功能,可有效解决游戏面临的各项安全问题。

相关推荐

  1. rsa加密登录解决方案

    2023-12-19 07:34:03       44 阅读
  2. springboot全面加密方案

    2023-12-19 07:34:03       48 阅读
  3. 接口加密方案

    2023-12-19 07:34:03       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-19 07:34:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-19 07:34:03       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-19 07:34:03       82 阅读
  4. Python语言-面向对象

    2023-12-19 07:34:03       91 阅读

热门阅读

  1. View UI(iView) Upload 自定义多图上传列表提交

    2023-12-19 07:34:03       53 阅读