尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

4步跑通Unity IL2CPP逆向:Il2CppDumper从入门到实战

4步跑通Unity IL2CPP逆向:Il2CppDumper从入门到实战 4步跑通Unity IL2CPP逆向Il2CppDumper从入门到实战【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper当你翻遍游戏安装包却找不到熟悉的Assembly-CSharp.dll用常规反编译工具打开libil2cpp.so只看到一片机器码而global-metadata.dat又甩给你一句Metadata file supplied is not valid——恭喜你撞上了Unity IL2CPP逆向的两层黑盒。Il2CppDumper正是为拆解这个黑盒而生它解析原生二进制与元数据文件重建出可读的类结构、方法签名和字段偏移让后续的IDA、Ghidra分析从猜谜变成照图施工。出发前检查清单开始之前先把工具箱备齐。下表按使用频率排序前三项是本教程的主干工具。工具核心用途适用场景上手难度获取方式Il2CppDumper解析IL2CPP二进制与metadata生成Dummy DLL和脚本所有IL2CPP逆向场景★★★☆☆git clone https://gitcode.com/gh_mirrors/il/Il2CppDumper后编译或直接下载Release版dnSpy.NET程序集浏览与反编译查看生成的Dummy DLL结构★★★★★官网下载即用IDA Pro / Ghidra原生代码反汇编与反编译深入函数逻辑、验证偏移★★☆☆☆Ghidra免费开源IDA需授权7-Zip解压APK、提取文件所有APK样本★★★★★官网安装ADB / Android NDK连接设备、dump内存、分析soAndroid平台进阶调试★★☆☆☆Android官方SDK 环境提示Il2CppDumper是.NET程序Windows上直接运行exeLinux/macOS可使用mono或dotnet运行。执行文件与metadata文件建议放在无中文、无空格的路径下避免解析阶段出幺蛾子。分级实战以下三个场景按难度递进每个都遵循问题→工具→操作→原理的节奏建议你从场景一完整跑通后再进入下一关。场景一基础如何提取并解析APK中的IL2CPP文件问题你拿到一个Unity手游APK解压后发现没有Assembly-CSharp.dll只有libil2cpp.so和global-metadata.dat两个文件。直接双击打开so文件全是乱码和汇编指令完全无从下手。工具匹配Il2CppDumper 7-Zip dnSpy。这一关的目标是把二进制黑盒转成能看懂的类结构图。操作验证步骤1提取关键文件用7-Zip打开APK找到两个目标文件# 7-Zip解压APK到extracted_apk目录 7z x game.apk -oextracted_apk # 定位原生库 cd extracted_apk/lib/arm64-v8a/ ls -l libil2cpp.so # 定位元数据文件 cd ../../assets/bin/Data/ ls -l global-metadata.dat⚠️ 注意部分APK把metadata放在assets/bin/Data/Managed/Metadata/位置不对就全局搜索文件名。步骤2确认Il2CppDumper版本与文件格式先核对本机Il2CppDumper的Release版本支持的Unity范围README.md中标注支持Unity 5.3到2022.2再确认so的架构file libil2cpp.so可看到ELF/AArch64等信息。Il2CppDumper对ELF、ELF64、Mach-O、PE、NSO、WASM格式均有支持架构与格式不匹配是新手最常见的翻车点。步骤3运行解析把libil2cpp.so和global-metadata.dat放进同一目录执行Il2CppDumper.exe libil2cpp.so global-metadata.dat output交互模式下程序会先询问文件路径再提示输入Unity版本或直接回车自动检测。命令行模式下三个参数依次是执行文件、metadata文件、输出目录。步骤4检查输出产物解析成功后output目录下会生成DummyDll/文件夹重建出的全部程序集DLL伪文件仅含类型与方法签名不含函数体ida.py、ghidra.py供反汇编工具导入的脚本il2cpp.h结构体信息头文件script.json类、方法、字段与地址的完整映射表步骤5用dnSpy浏览Dummy DLL启动dnSpy打开output/DummyDll/Assembly-CSharp.dll。左侧导航树会列出命名空间和类右键类名可查看字段、属性和方法签名。用搜索功能直接定位PlayerController之类的关键类你会看到完整的成员列表——虽然方法体是空的但签名、参数、返回类型、字段偏移一应俱全。 核心操作分析时优先用script.json对照类名查函数地址再用IDA跳转到对应地址看真实汇编这是类型信息机器码配合的标准姿势。原理点睛IL2CPP把C#源码先编译成C中间代码再转成原生机器码同时把类型信息完整保留在global-metadata.dat中。Il2CppDumper同时解析这两个文件so提供函数地址和内存布局metadata提供类型名称与签名两者按版本规则对位缝合就还原出一份没有灵魂但有骨架的Dummy DLL。场景二进阶如何排查Metadata file supplied is not valid报错问题运行Il2CppDumper时提示Metadata file supplied is not valid或者解析成功但生成的DummyDll里全是乱码类名。你反复重试错误依旧。工具匹配Il2CppDumper x64dbgWindows/ FridaAndroid 内存dump工具。核心思路绕过加密拿到解密后的运行时数据。操作验证步骤1判断metadata是否被加密先看文件大小和文件头# 检查文件大小是否异常正常应在几百KB到几MB ls -l global-metadata.dat # 用十六进制工具查看文件头正常metadata以特定魔数开头 xxd global-metadata.dat | head -5如果文件头不是预期的魔数或大小与同版本Unity的典型值差异悬殊基本可以断定被加密或压缩处理过。步骤2确认IL2CPP版本再强推Il2CppDumper依赖版本号来匹配结构体布局。先用项目中的Il2Cpp/Metadata.cs版本检测逻辑运行时日志会打印检测到的Unity版本确认目标版本若版本偏新或自动检测失败打开配置文件Il2CppDumper/config.json手动指定{ ForceIl2CppVersion: true, ForceVersion: 24.3, ForceDump: true }⚠️ 注意ForceVersion的值要与目标游戏的真实IL2CPP版本对齐填错会导致结构错位、输出垃圾数据。版本检测逻辑可查阅Il2CppDumper/Il2Cpp/Metadata.cs源码理解判定规则。步骤3从内存dump真实metadata加密只作用于磁盘文件游戏运行时必然在内存中持有解密后的完整metadata。以Android为例用Frida附加游戏进程hookil2cpp::vm::MetadataLoader::LoadMetadataFile或直接在libil2cpp.so初始化完成点读取内存中的metadata区域找到后把该内存区域整体dump成文件得到dumped_metadata.dat用dump结果替换原文件重新解析Il2CppDumper.exe libil2cpp.so dumped_metadata.dat output_decrypted步骤4验证输出检查生成的DummyDll里类名是否恢复正常。若类名仍乱码优先怀疑so文件本身被加壳回到步骤2重新核对版本。 核心操作dump出的内存metadata大小通常比磁盘文件更大包含运行时补齐的数据这是正常的不要据此怀疑出错。原理点睛所谓加密大多只是对磁盘上的metadata做变换运行时仍会还原为原始结构。内存dump拿到的就是这份原始结构配合ForceIl2CppVersion强制版本号就能绕过大部分基于格式校验的保护。此方法依赖游戏版本与dump时机仅适用于你能正常启动游戏并附加调试器的场景。场景三高阶如何让IDA与Ghidra自动识别类型信息问题你在IDA里打开了libil2cpp.so函数列表全是sub_1234AB这种匿名命名参数类型一概未知。想在几千个函数里找到目标逻辑无异于大海捞针。工具匹配Il2CppDumper IDA Pro或Ghidra。Il2CppDumper的输出脚本就是为这一步准备的。操作验证步骤1确认脚本文件解析成功后确认输出目录中存在ida_with_struct.pyIDA专用带结构体和ghidra.pyGhidra专用。步骤2在IDA中导入脚本打开IDA加载so文件等待自动分析完成so较大耐心等待File - Script file... - 选择 ida_with_struct.py脚本运行时会读取同目录的il2cpp.h结构信息自动完成函数重命名、参数类型标注和结构体定义。导入完成后原本的sub_xxx会变成类似PlayerController_Update的可读名称。步骤3在Ghidra中导入脚本Ghidra打开so并完成自动分析后通过Window - Script Manager加载ghidra.py执行。同样会应用函数名和结构信息。步骤4用script.json做二次校准若脚本只重命名了一部分函数打开script.json按地址查漏补缺。script.json中的Address字段对应IDA中的函数起始地址手动导航过去核对即可。 核心操作脚本导入后务必重新执行一次自动分析IDA中Options - General - Analysis重新分析让新名字和结构体彻底应用到反编译视图。原理点睛IDA/Ghidra本身只认汇编不知道每个函数对应哪个C#方法。Il2CppDumper输出的脚本本质上是一份地址→方法名→签名的映射表通过IDC/API批量重写函数名与类型。导入后你看到的不是反编译出的C#而是被标注过的汇编——但有了名字和结构追踪关键逻辑的效率会翻倍。效率倍增器跑通单一样本后把重复劳动交给脚本和命令行。批量命令行解析Il2CppDumper支持纯命令行调用适合批量处理多个APKfor f in apk_list/*.apk; do # 先解包、提取两个关键文件 Il2CppDumper.exe $f/libil2cpp.so $f/global-metadata.dat out_$(basename $f) done结合Python脚本做解包→解析→整理script.json→导出类清单的全流程就能搭起一条半自动逆向流水线。程序化调用项目中的Il2CppDumper/Il2CppDumper/Utils/Il2CppExecutor.cs封装了解析主流程.NET开发者可以直接引用它把读metadata→构造Il2Cpp对象→输出DummyDll与脚本串进自己的工具链例如批量生成结构体头文件后喂给自定义分析程序。多工具协同工作流推荐一条已被验证的组合拳Il2CppDumper生成DummyDll和脚本 → dnSpy浏览类结构、定位目标类 → IDA导入脚本、跳转到目标函数地址 → 结合script.json核对字段偏移 → 动态调试器验证关键逻辑。每一步的输出都是下一步的输入比单工具硬啃高效得多。常见误区速查⚠️误区一把Dummy DLL当成完整反编译结果正确做法DummyDll只含类型信息与签名方法体是空的。它的价值是提供地图真实逻辑必须在IDA/Ghidra的反汇编里读。⚠️误区二忽略平台与架构差异正确做法Android是ELFiOS是Mach-OWindows是PE。务必先确认so架构和Unity版本再决定解析参数否则输出必然错乱。⚠️误区三不核对IL2CPP版本就直接强推正确做法先让程序自动检测并打印版本号检测失败再手动指定ForceVersion。盲目填版本号是乱码类名的头号来源。⚠️误区四直接分析加壳的so文件正确做法商业游戏普遍对so加壳Il2CppDumper只能解析原始so。遇到壳先脱壳或从内存dump出干净镜像再交给Il2CppDumper。⚠️误区五认为ForceDump能解决一切正确做法ForceDump只对特定的内存dump场景有效它不改变metadata本身。别把配置项当成万能开关先定位问题根源。升华收尾跑完这三个场景你会发现Il2CppDumper只是整个逆向链的起点真正决定你能走多远的是三个底层概念元数据结构global-metadata.dat采用固定二进制布局存放类型信息理解其结构见Il2CppDumper/Il2Cpp/Metadata.cs才能应对加密与版本漂移。函数映射机制C#方法如何映射到原生函数地址掌握这一点你就能从DummyDll的签名反推出so里的目标逻辑。跨平台差异ELF/Mach-O/PE的加载方式不同逆向流程必然不同别用一套参数打天下。工具会过时但方法不会。当你面对新的保护机制时把解析失败拆解成文件是否被处理、版本是否匹配、镜像是否干净三个问题逐个排查比更换工具更有效。合规提示本文所有操作仅面向你拥有合法权限的样本如自研游戏、已授权分析的软件。逆向分析必须符合软件使用条款、开源许可与所在地区的法律法规请勿将技术用于未授权软件的分析与破解。【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表