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

资讯详情

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

Il2CppDumper入门到进阶:3个阶段拆解Unity IL2CPP逆向黑盒

Il2CppDumper入门到进阶:3个阶段拆解Unity IL2CPP逆向黑盒 Il2CppDumper入门到进阶3个阶段拆解Unity IL2CPP逆向黑盒【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper先把问题摆到桌面上很多做Unity游戏分析的朋友都遇到过同一种困惑安装包里翻来翻去就是找不到熟悉的Assembly-CSharp.dll把libil2cpp.so拖进反编译工具满屏都是看不懂的机器码好不容易拿到global-metadata.dat解析时又被一句文件无效直接劝退。这些症状其实指向同一个病根Unity的IL2CPP编译模式。你可以把它想象成一次翻译打包的过程——C#代码先被翻译成C再被编译成原生机器码而所有类型信息被单独塞进了一个叫global-metadata.dat的档案袋里。于是你手里只剩下一堆代码二进制和一份目录元数据两者缺一不可却都不直接可读。本篇文章不打算堆砌术语而是用三个阶段带你把整个流程走通先搞懂要准备什么再亲手跑通第一次解析最后学会排查报错和进阶玩法。读完你就能用Il2CppDumper把黑盒拆成一份看得懂的图纸。阶段一开工前的两样必需品为什么要凑齐两个文件Il2CppDumper的工作原理可以概括成一句话一个负责给代码对上号一个负责给名字补齐。单靠任何一个文件都无法还原出完整的类型结构。libil2cpp.so或其他平台的等价物这是IL2CPP编译出的原生二进制包含实际逻辑但函数名、类型名都被抹掉了。global-metadata.dat这是元数据文件相当于整座建筑的结构图纸里面记录了类名、方法签名、字段布局等信息。你可能会问把两个文件放在一起工具怎么知道谁是谁答案在文件头部——Il2CppDumper会先检查元数据文件头部的特殊标记确认这确实是我们要找的档案袋再去二进制里找对应的数据结构。这个检查逻辑就写在项目的Il2Cpp/Metadata.cs中感兴趣的话可以翻源码看看那个熟悉的0xFAB11BAF标记。不同平台的等价物要认清注意可执行文件的名字会因为平台不同而变化千万别找错Android平台通常位于APK解包后的lib/arm64-v8a/目录下文件名是libil2cpp.soWindows平台不是.so而是GameAssembly.dll或*Assembly.dlliOS平台对应Mach-O格式的二进制部分游戏机或特殊场景还可能是NSO或WASM格式元数据文件的名字倒是比较统一多数叫global-metadata.dat通常放在assets目录下。如果你解包APK时发现它不见了很可能被藏进了其他路径或做了混淆。获取Il2CppDumper获取工具很简单直接克隆项目仓库即可git clone https://gitcode.com/gh_mirrors/il/Il2CppDumper克隆下来后项目里包含了完整源码、示例脚本和配置文件。如果你只是想要现成的可执行文件也可以关注项目的持续集成产物或者用Visual Studio等工具自行编译Il2CppDumper.csproj。另外别忘了看一眼README.zh-CN.md里面有官方给出的功能清单和使用说明遇到疑问先查这里。阶段二跑通你的第一次解析第一步解包拿到原始文件假设你手头有一个Android平台的APK需要先用压缩工具解开它7-Zip、WinRAR都行# 解压APK文件 7z x game.apk -oextracted_apk解压完成后定位两个关键文件cd extracted_apk/lib/arm64-v8a/ ls libil2cpp.so cd ../../assets/bin/Data/ ls global-metadata.dat把这两个文件复制到一个独立的目录里方便后面操作。顺带提醒一句如果APK本身被加固解压出来的libil2cpp.so可能是壳文件真正的代码要到后面进阶章节再处理。第二步两种启动方式任选Il2CppDumper支持两种用法新手建议先从图形界面入手图形界面模式直接运行程序会弹出文件选择对话框依次选中libil2cpp.so和global-metadata.dat按提示操作即可。整个过程不需要记任何命令。命令行模式适合脚本化和批量处理格式非常固定Il2CppDumper.exe 可执行文件 元数据文件 输出目录例如Il2CppDumper.exe libil2cpp.so global-metadata.dat output程序跑完后所有结果会生成到你指定的输出目录里。第三步理解输出目录里有什么我第一次跑完程序时看着满屏文件也有点懵。别急输出内容其实可以分成四类DummyDll文件夹这是最直观的成果里面是一堆还原出来的DLL文件。注意它们只是骨架只包含类型信息、方法签名和字段定义没有方法体逻辑。用dnSpy或ILSpy打开就能像浏览普通C#项目一样在左侧导航树里查看命名空间、类和成员。想找某个关键类比如控制角色逻辑的PlayerController直接用搜索功能即可。dump.cs一份纯文本的类结构清单适合快速检索类型名、字段偏移量和方法地址。script.json这是给IDA和Ghidra准备的翻译对照表把每个方法地址和它的原始名字一一对应起来。il2cpp.h包含结构体定义的头文件配合IDA的脚本使用能让反汇编代码瞬间有名字。另外还有stringliteral.json包含所有字符串字面量信息和给BinaryNinja准备的脚本等按需使用即可。第四步学会调整config.json程序目录下有一个config.json配置文件它决定了输出内容的瘦身程度。几个常用开关GenerateDummyDll是否生成DummyDll文件夹默认开启DumpMethod、DumpField、DumpProperty、DumpAttribute控制dump.cs中要输出哪些内容DummyDllAddToken是否在DummyDll中附加token信息RequireAnyKey程序结束时是否需要按任意键退出批量运行时建议关掉我自己的习惯是日常分析保持默认配置只有遇到超大项目、输出文件过多时才考虑关闭部分开关。完整的配置项说明都在README.zh-CN.md的关于config.json一节里。阶段三高频报错逐个击破跑通一次不难难的是面对各种报错不慌。这里把我见过的最高频的几个问题整理出来你遇到时直接对号入座。报错一Metadata file supplied is not valid metadata file这是出镜率最高的一条。它的意思是Il2CppDumper读文件头部时没找到预期的标记也就是说这个global-metadata.dat被加密或修改过了。遇到这种情况先别急着跟它死磕。几个方向供参考确认文件来源是否完整是不是解包时出了问题如果确定被加密那就需要从运行时的内存中抢救真实数据——用调试器或内存dump工具在游戏运行时把解密后的元数据抓出来抓到内存dump后把config.json里的ForceDump改为true强制把文件当作dump处理你可能会问dump出来的文件就能直接解析吗大部分情况下可以但要注意个别设备dump出的文件指针状态特殊如果解析仍有异常试试把NoRedirectedPointer改为true。报错二This file may be protected这条提示说明可执行文件本身被加壳保护了直接从安装包里拿到的libil2cpp.so是空的壳真正的代码在运行后才被加载进内存。对付加壳的思路核心就四个字内存dump。用调试器附加到游戏进程等壳解完、真实代码加载进内存之后把内存里的libil2cpp.so整个dump出来再用Il2CppDumper分析这份热乎的文件。这个技巧能绕过大多数保护方案。报错三Cant use auto mode to process file自动模式解析失败时程序会提示这条信息。最常见的原因是你给错了文件——比如在Windows平台上传了.so文件而实际应该用GameAssembly.dll。先检查文件格式是否与平台匹配再考虑换用手动模式。版本相关的坑IL2CPP版本不一致Unity版本跨度大IL2CPP的内部格式也在不断变化。Il2CppDumper本身支持较广的版本范围但如果你拿到的文件来自很老的Unity版本可以尝试在config.json中启用ForceIl2CppVersion并指定ForceVersion强制按某个版本解析。判断版本的一个简单方法是看元数据文件头部记录的版本号——想知道具体判断逻辑可以去源码Il2Cpp/Metadata.cs里翻翻版本校验那段。进阶玩法让反汇编工具看懂代码给IDA/Ghidra灌入类型信息前面提到的script.json和il2cpp.h到这里终于派上用场了。项目仓库里已经准备好了现成的脚本ida.py把方法名、字符串等信息导入IDAida_with_struct.py在导入信息的同时把il2cpp.h里的结构体定义也应用进去ghidra.py对应Ghidra的导入脚本以IDA为例大致流程是先用IDA加载libil2cpp.so然后在脚本窗口运行ida_with_struct.py选择输出目录里的script.json。导入完成后你会发现原本满屏的无名函数全部变成了带有可读名称的调用结构体成员也有了名字。这个体验上的变化用从黑屏到白天来形容都不夸张。用Il2CppExecutor做程序化集成如果你需要批量分析多个游戏或者想把解析流程嵌入自己的工具链可以看看项目里的Utils/Il2CppExecutor.cs。它把读取元数据→解析二进制→生成结果的核心流程封装成了可调用的类相当于给开发者留了一扇编程入口。配合Python脚本实现APK自动解包、批量调用命令行、再用dnSpy脚本导出关键类信息一条自动化逆向流水线就成型了。当然自动化属于进阶话题新手阶段先把单个游戏的流程跑顺再考虑规模化也不迟。三个容易踩的思维误区误区一以为DummyDll里有完整逻辑。DummyDll只有类型信息没有方法实现。想要看逻辑得结合原生二进制的反汇编结果一起分析。它更像一张地图而不是实景。误区二忽视平台差异。同样的流程换一个平台就要换对应的可执行文件格式ELF、Mach-O、PE各有各的规矩。配置文件里相关的架构参数也要对得上否则解析会失败。误区三直接解析加壳文件。加壳是商业游戏最常见的保护手段跳过脱壳直接解析报错几乎是必然的。先确认文件是否干净再动手。写在最后能力越大责任越大到这里你已经具备了处理大多数IL2CPP逆向场景的完整能力认文件、跑解析、看结果、排报错、上脚本。如果哪一步卡住了优先回到项目的README.zh-CN.md、config.json说明和源码尤其是Il2Cpp/Metadata.cs与Il2Cpp/MetadataClass.cs里找答案它们比任何教程都权威。最后提醒一句逆向分析工具本身是中性的但使用场景必须合规。请确保你的分析行为符合软件的使用条款和相关法律法规只对你有权分析的目标下手。技术是用来探索和学习的别让它变成麻烦的源头。【免费下载链接】Il2CppDumperUnity il2cpp reverse engineer项目地址: https://gitcode.com/gh_mirrors/il/Il2CppDumper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表