记录Unity项目解包(资源加代码)
前言:本文主要记录Unity拆包获取项目未加密资源及代码过程。

一、判断是否判断Unity3D游戏使用的打包方式
- Mono打包特征:在游戏目录的
\assets\bin\Data\Managed\路径下,若存在大量.dll文件(如Assembly-CSharp.dll),则表明该游戏采用Mono打包方式。这些DLL文件是Mono运行时直接加载的托管代码库。 - IL2CPP打包特征:若发现
global-metadata.dat文件,则可确认游戏使用IL2CPP打包。该文件存储了IL2CPP转换后的元数据信息,是IL2CPP编译流程的核心产物
二、获取代码
1.MONO打包
1.1如果代码未加密的话,比较简单,只需要将:Assembly-CSharp.dll 拖入Dnspy中就可以查看代码了。

1.2 导出工程到文件夹
2.IL2CPP打包方式
需要重点关注IL2CPP打包后的两个核心文件:GameAssembly.dll和global-metadata.dat。
global-metadata.dat存储所有代码元数据信息包含类、接口、结构体、方法名及参数等关键数据Unity运行时加载该文件以获取类型和方法定义
GameAssembly.dll包含IL2CPP转换后的原生代码将C#托管代码转换为C++原生代码以动态链接库形式存在Unity通过元数据索引调用其中的方法实现
2.1 工具Il2CppDumper文件目录下创建输入目录和输出文件,将游戏目录中的GameAssembly.dll和global-metadata.dat文件导入到输入目录中,添加一个文本添加如下代码并转为bat文件
..\Il2CppDumper.exe GameAssembly.dll global-metadata.dat ..\output

运行bat文件
可以在输出文件夹中看到以下文件

- DummyDll : 文件夹内是通过解析 global-metadata.dat 元数据生成的一组dll文件,相当于伪 C# 程序集,方便加载到反编译工具dnSpy、ILSpy等中查看类结构、方法签名和字段定义
- dump.cs : 完整的 C# 源代码文件,类似于 DummyDll 文件夹中的 .dll 的文本形式,当然也不包含具体的方法实现
- il2cpp.h : c++头文件包含数据结构定义,辅助后续分析 GameAssembly.dll 中的实现
- script.json : 包含游戏的类、方法、字段等元数据的详细信息,以及这些数据在 GameAssembly.dll 中的内存地址
- stringliteral.json : 包含所有从 global-metadata.dat 中提取的字符串常量

如果代码未加密的话,只需要将:Assembly-CSharp.dll 拖入Dnspy中就可以查看代码了。
2.1IL2CPP打包方式之apk包
将在游戏目录中找到libil2cpp.so与global-metadata.dat拷贝到input目录中,
创建文本写入一下代码并转换为bat文件
..\Il2CppDumper.exe libil2cpp.so global-metadata.dat ..\output
余下步骤照旧
三.资源获取
使用AssetStudio提取
打开工具,直接导入游戏文件


等待资源读取,查看资源并导出
得到资源

参考
手把手教你软件逆向工程-一般Unity解包与反编译_哔哩哔哩_bilibili
【游戏开发进阶】教你使用IL2CppDumper从Unity il2cpp的二进制文件中获取类型、方法、字段等(反编译)-CSDN博客
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐










所有评论(0)