Unity il2cpp global-metadata.dat 加密方案

Unity il2cpp global-metadata.dat 加密方案

来源:fairguard 发布时间:2021-03-23 15:47:37 点击数:

众所周知,Unity 游戏有两种打包方式 mono 与 il2cpp。

在 mono 模式下,游戏 C# 代码被编译为 IL(中间代码) 并生成 dll 文件,然后 dll 被打包进最后的游戏包文件。由于 IL 非常容易被 ILSpy / .NET Reflector 等专业反编译软件分析逆向,所以在无保护情况下,游戏的安全性极差。

如下图,.NET Reflector 几乎可以还原出 C# 文件,外挂开发者可以凭此迅速制作出强大的外挂:

.NET Reflector 几乎可以还原出 C# 文件

对于 mono, il2cpp 将游戏 C# 代码转换为 C++ 代码,然后编译为各平台 Native 代码。由于 Native 代码的逆向/反编译难度大大增加,可以有效提高外挂开发/游戏破解的门槛。另外,il2cpp 具有执行效率高/平台兼容性好等原因,所以 il2cpp 已经逐步被绝大多数游戏采用。

在 il2cpp 模式下,虽然游戏逻辑是以 Native 代码运行, 但依然要实现 C# 某些语言特性(如GC), il2cpp 将所有的 C# 中的类名/属性名/字符串等信息记录在 global-metadata.dat 文件。il2cpp 启动时会从这个文件读取所需要的类名/属性名等信息。

正是这一机制为外挂制作/游戏破解带来了便利,使用 IL2cppDumper 可以解析 global-metadata.dat 文件,并将文件里的类名等字符串信息对应到 Native 代码中去,极大地方便了逆向分析。IL2cppDumper 接收 libil2cpp.so / global-metadata.dat 两个文件路径为输入:

IL2cppDumper 接收 libil2cpp.so / global-metadata.dat 两个文件路径为输入

基于这种情况,FairGuard 开发了 global-metadata.dat 加密方案(同时支持 Android / iOS / Windows),防止 global-metadata.dat 被 IL2cppDumper 解析。该方案主要包括两个部分:

1. 加密 global-metadata.dat 文件,同时做到对开发者透明。开发者只需要上传游戏包文件,就可以实现加密,不需要上传额外文件。加密前 globa-metadata.dat 文件:

加密前 globa-metadata.dat 文件

加密后的 global-metadata.dat 文件:

加密后的 global-metadata.dat 文件

2. 加密 libil2cpp.so 文件。由于 IL2cppDumper 需要依赖 libil2cpp.so 对应 global-metadata.dat 文件中的字符串地址,所以对 libil2cpp.so 做深度加密非常有必要。

FairGuard独创的无导出/无导入函数SO加壳方案,对il2cpp进行加壳。效果如下所示:

原始未加壳il2cpp.so有多个导出函数

原始未加壳il2cpp.so有多个导出函数

原始未加壳il2cpp.so有多个导入函数

原始未加壳il2cpp.so有多个导入函数

FairGuard

FairGuard加壳后il2cpp.so,无导入/导出函数

使用这个方案加壳后,即使从内存中 dump 出来 libil2cpp.so , 依然不会被 IL2cppDumper 正常识别。

效果如下:

效果演示

丨结语

FairGuard 专注于游戏加固与反外挂,为 Unity / Cocos / UE 等引擎的游戏提供深度一体化加密保护方案。

目前产品已经被FunPlus、Garena、三七互娱、游族等多家头部公司采用。TapTap排行榜以及买量排行榜上亦有多个游戏使用。

产品咨询联系方式:

QQ:2079128588

微信:fairguard01

技术交流QQ群:1105310296

即刻体验FairGuard

即刻体验FairGuard

免费试用游戏游戏安全保护, 对接专业技术服务!

免费体验
首 页
产 品
方 案
客 服
帮助