Unity il2cpp global-metadata.dat 加密方案

2023-10-18 19:30

本文主要是介绍Unity il2cpp global-metadata.dat 加密方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

     在 mono 模式下,游戏 C# 代码被编译为 IL(中间代码) 并生成 dll 文件,然后 dll 被打包进最后的游戏包文件。由于 IL 非常容易被 ILSpy / .NET Reflector 等专业反编译软件分析逆向,所以在无保护情况下,游戏的安全性极差。如下图,.NET Reflector 几乎可以还原出 C# 文件,外挂开发者可以凭此迅速制作出强大的外挂:

1.png      

      对于 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 两个文件路径为输入:

2.png

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

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

3.jpg

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

4.jpg

     2. 加密 libil2cpp.so 文件。

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

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

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

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

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

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

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

效果如下:

5.png

这篇关于Unity il2cpp global-metadata.dat 加密方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/234698

相关文章

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

MySQL容灾备份的实现方案

《MySQL容灾备份的实现方案》进行MySQL的容灾备份是确保数据安全和业务连续性的关键步骤,容灾备份可以分为本地备份和远程备份,主要包括逻辑备份和物理备份两种方式,下面就来具体介绍一下... 目录一、逻辑备份1. 使用mysqldump进行逻辑备份1.1 全库备份1.2 单库备份1.3 单表备份2. 恢复

redis中session会话共享的三种方案

《redis中session会话共享的三种方案》本文探讨了分布式系统中Session共享的三种解决方案,包括粘性会话、Session复制以及基于Redis的集中存储,具有一定的参考价值,感兴趣的可以了... 目录三种解决方案粘性会话(Sticky Sessions)Session复制Redis统一存储Spr

SpringBoot实现虚拟线程的方案

《SpringBoot实现虚拟线程的方案》Java19引入虚拟线程,本文就来介绍一下SpringBoot实现虚拟线程的方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录什么是虚拟线程虚拟线程和普通线程的区别SpringBoot使用虚拟线程配置@Async性能对比H

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4