新闻详情

新闻详情

首页 / 资讯中心 / 详情

Il2CppDumper-win-v6.7.46:Unity il2cpp逆向与符号还原实战

发布时间:2026/9/26 1:36:31来源:尧图网络
Il2CppDumper-win-v6.7.46:Unity il2cpp逆向与符号还原实战
简介Il2CppDumper-win-v6.7.46 是一款面向 Unity 逆向工程与安全研究人员的实用工具主要用于还原 il2cpp 编译后的 DLL 文件不含源码并提取 MonoBehaviour 与 MonoScript 等关键信息。它支持 ELF、ELF64、Mach-O、PE、NSO 和 WASM 等多种格式兼容 Unity 5.3 至 2020 版本还能生成 IDA 与 Ghidra 分析脚本、结构体头文件并支持从内存 dump 的 libil2cpp.so 绕过保护以及绕过简单的 PE 保护。资源包共 11 个文件包含 8 个 Python 脚本、2 个可执行程序与 1 个 JSON 配置文件压缩包约 10.7MB脚本分别对应 IDA、Ghidra 及 WASM 等不同分析场景。目前已有 1035 人学习下载适合需要分析 Unity 游戏逻辑、还原符号与结构的中高级逆向人员参考使用。1. Il2CppDumper-win-v6.7.46把 Unity 的 il2cpp 黑匣子撬开一条缝做 Unity 手游逆向或者安全评估的人迟早会撞上 il2cpp 这堵墙。Unity 把 C# 编译成 IL 之后再用 il2cpp 把 IL 转成 C 中间代码最后编译成各平台的机器码。结果就是你用 dnSpy 打开Assembly-CSharp.dll里面空空如也只剩一堆DummyDll方法体全被掏空。这时候 Il2CppDumper 就是那把撬棍——它读取global-metadata.dat和libil2cpp.so或GameAssembly.dll把类名、方法名、字段、方法地址、字符串字面量全部还原出来生成一份可读的dump.cs和一份能直接喂给 IDA 的脚本。win 版 v6.7.46 是当前在 Windows 上跑得最顺的一个发行版本双击 exe、拖入两个文件、回车几十秒后你就能拿到结构化的符号信息。这篇文章面向的是需要做 Unity 游戏逆向、外挂分析、协议还原或者安全审计的从业者也适合刚接触 il2cpp 想找一个能复现入口的新手。下面从文件准备讲到脚本落地把每一步的命令、参数和翻车点都摊开。2. 先搞清楚 Il2CppDumper 到底在 dump 什么2.1 il2cpp 的两份核心文件与符号丢失的根因Unity 的 il2cpp 运行时依赖两份东西一份是编译进原生库的代码Windows 上叫GameAssembly.dllAndroid 上叫libil2cpp.soiOS 上叫UnityFramework另一份是独立的元数据文件global-metadata.dat通常躺在*_Data/il2cpp_data/Metadata/目录下。元数据里存的是类型定义、方法签名、字段偏移、字符串表、方法指针表这些描述性信息而原生库里存的是真正的机器码。问题在于Unity 在打包时会把符号表剥掉方法名、类名在原生库里全变成sub_xxxxxx这种地址。Il2CppDumper 做的事情就是解析global-metadata.dat的结构拿到每个方法的元数据索引再去原生库里按照 il2cpp 的调用约定找到对应的方法指针把「元数据里的名字」和「原生库里的地址」重新对上。它输出的dump.cs是一份伪 C# 源码每个方法前面带// RVA: 0xXXXX Offset: 0xXXXX VA: 0xXXXX注释script.py则是给 IDA 用的重命名脚本跑完 IDA 里那些sub_就变成了ClassName_MethodName。理解这一点很关键因为它决定了你后面遇到问题时该往哪个方向排查。如果global-metadata.dat被加密或者被魔改过Dumper 会在解析阶段就报错如果原生库的版本和元数据不匹配方法地址会对不上dump 出来的 RVA 全是错的。常见做法是先用十六进制编辑器看一眼global-metadata.dat开头是不是AF 1B B1 FA这个魔数如果不是说明元数据被处理过得先脱壳或者解密。2.2 win 版 v6.7.46 的目录结构与运行前置条件拿到Il2CppDumper-win-v6.7.46之后解压出来一般能看到这几个东西主程序Il2CppDumper.exe、配置文件config.json、依赖的il2cppdumper相关 dll以及一个README。v6.7.46 这个版本对 .NET 运行时有一定要求Windows 上需要装 .NET Framework 4.7.2 或更高如果双击没反应或者弹窗报缺少 dll先去装运行时再回来。config.json里几个关键项值得改DumpMethod、DumpField、DumpProperty、DumpAttribute控制输出内容的粒度默认全开DumpType决定是否输出类型定义GenerateStruct控制是否生成结构体信息。如果你只关心方法地址可以把DumpField和DumpProperty关掉dump.cs会小很多加载进编辑器也快。运行方式有两种图形界面直接拖文件或者命令行传参。命令行更适合批量处理和写进脚本格式是Il2CppDumper.exe il2cpp_binary global-metadata.dat output_dir。注意第一个参数是原生库的路径Windows 上是GameAssembly.dllAndroid 上是libil2cpp.so别传反了。输出目录如果不存在程序会自动创建但父目录必须有写权限否则会静默失败——这个坑后面还会细说。3. 用 Il2CppDumper-win-v6.7.46 跑通第一次 dump3.1 准备 GameAssembly.dll 与 global-metadata.dat 的完整路径第一步是把两份文件从目标程序里抠出来。以 Windows 平台的 Unity 游戏为例安装目录下通常有GameName_Data文件夹里面il2cpp_data/Metadata/global-metadata.dat就是元数据GameAssembly.dll一般在游戏根目录和 exe 同级。如果是 Android 的 apk把 apk 当 zip 解开lib/arm64-v8a/libil2cpp.so和assets/bin/Data/Managed/Metadata/global-metadata.dat是你要的注意不同 Unity 版本路径可能略有差异有的在assets/bin/Data/Metadata/下。iOS 的 ipa 类似Payload/AppName.app/Data/Managed/Metadata/global-metadata.dat加上Frameworks/UnityFramework.framework/UnityFramework。把这两个文件复制到一个干净的工作目录路径里不要有中文和空格。血泪经验路径带中文时某些版本的 Dumper 在写输出文件时会因为编码问题崩溃报一个看不懂的IOException。我一般会建一个D:\work\dump_target\这样的纯英文短路径把文件放进去再操作。# 以 Windows 平台为例假设文件已复制到工作目录 # 查看文件是否存在、大小是否正常 dir D:\work\dump_target\ # 用 certutil 看一眼 global-metadata.dat 的头部魔数 certutil -dump D:\work\dump_target\global-metadata.dat | more上面第一条命令确认文件到位第二条命令用来验证元数据有没有被加密。正常的global-metadata.dat开头应该是AF 1B B1 FA如果你看到的是别的字节说明这个文件被处理过直接丢给 Dumper 大概率会报Invalid metadata file或者解析到一半崩掉。这种情况下需要先做脱壳或解密不在本文范围内但你要知道这个前置检查能帮你省掉大量无效尝试。3.2 命令行与图形界面两种跑法及输出文件解读图形界面最省事双击Il2CppDumper.exe第一个框选GameAssembly.dll第二个框选global-metadata.dat第三个框选输出目录点 Start。跑完之后输出目录里会出现这些文件dump.cs是主输出包含所有类型和方法定义script.py是 IDA 脚本stringliteral.json是字符串字面量il2cpp.h是给 C 逆向用的头文件。如果你用的是 IDA 7.x直接File - Script file加载script.py等它跑完IDA 的符号窗口里那些sub_就变成可读名字了。命令行方式适合写进批处理# 命令行调用三个参数依次是原生库、元数据、输出目录 Il2CppDumper.exe D:\work\dump_target\GameAssembly.dll D:\work\dump_target\global-metadata.dat D:\work\dump_output\ # 跑完后检查输出 dir D:\work\dump_output\参数说明第一个参数必须是原生库Windows 下是 PE 格式的 dllAndroid 下是 ELF 格式的 so传错格式 Dumper 会报Unsupported file format。第二个参数是元数据必须是未加密的原始文件。第三个参数是输出目录末尾的反斜杠可加可不加但目录必须可写。跑完后重点看dump.cs的大小正常一个中型 Unity 游戏大概几 MB 到几十 MB如果只有几百 KB说明解析中途出错了往上翻日志找Error或Exception。dump.cs的结构是这样的每个类前面有// Namespace: XXX和// TypeDefIndex: N类里面每个方法前面有// RVA: 0xXXXX Offset: 0xXXXX VA: 0xXXXX然后是方法签名。RVA 是相对虚拟地址Offset 是文件偏移VA 是虚拟地址。你在 IDA 里跳转的时候用 VA在十六进制编辑器里定位用 Offset。字符串字面量在stringliteral.json里格式是{value: xxx, address: 0xXXXX}做协议分析的时候这份文件往往比dump.cs还重要。3.3 用 IDA 加载 script.py 还原符号的完整流程拿到script.py之后先确认你的 IDA 版本和 Python 环境。IDA 7.0 以上自带 Python7.0 以下需要单独配。打开GameAssembly.dll或者libil2cpp.so等 IDA 完成自动分析这一步可能要几分钟到十几分钟取决于文件大小然后File - Script file选中script.py。脚本会遍历dump.cs里记录的方法地址逐个在 IDA 里重命名。跑的过程中 IDA 底部会显示进度如果卡住不动大概率是某个地址在 IDA 里不存在脚本抛异常了。这时候去看 IDA 的 Output 窗口找到报错的那一行记下地址手动跳过或者修一下脚本里的异常处理。跑完之后按ShiftF4打开 Names 窗口搜索你关心的类名应该能看到ClassName_MethodName这种格式的符号。双击跳过去就是方法的反汇编。如果符号没出现检查两件事一是script.py里的地址基址和 IDA 加载时的基址是否一致二是dump.cs里的 VA 是否有效。常见做法是先在 IDA 里Jump - Jump to address输入一个 dump 出来的 VA看能不能跳过去跳不过去说明基址对不上需要在脚本开头调整image_base。4. 参数调优与不同平台的适配差异4.1 config.json 里影响输出质量的五个关键项config.json是控制 Dumper 行为的核心改对了能省很多事。DumpMethod和DumpField默认都是true如果你只关心方法地址把DumpField设成falsedump.cs体积能小三分之一。DumpProperty和DumpAttribute对逆向帮助有限除非你要做完整的类型还原否则关掉。DumpType建议保持true因为类型定义是理解类结构的基础。GenerateStruct在你要写 C 调用代码的时候很有用它会生成结构体偏移但如果你只是做静态分析可以关掉。还有一个容易被忽略的项是DumpStringLiteral控制是否输出stringliteral.json。做协议还原的时候这个必须开因为很多关键字符串比如 URL、密钥、错误码都在里面。改完配置后重新跑一遍对比dump.cs的大小和内容找到适合你当前任务的粒度。我一般会准备两份配置一份全开用于完整分析一份精简用于快速定位方法地址。4.2 Android so 与 Windows dll 的 dump 差异Android 的libil2cpp.so和 Windows 的GameAssembly.dll在 dump 流程上基本一致但有几个差异点要注意。第一Android so 通常是按架构分目录的arm64-v8a、armeabi-v7a、x86_64各有一份你要 dump 的是目标设备实际加载的那一份选错了架构方法地址对不上。第二Android so 可能是被加固过的比如某些壳会修改 ELF 头或者加密代码段这种情况下 Dumper 能解析元数据但找不到方法指针输出里 RVA 全是 0。第三Windows dll 的 PE 结构和 Android so 的 ELF 结构不同Dumper 内部会分别处理但你在 IDA 里加载的时候要选对文件类型PE 选Portable executableELF 选ELF file。iOS 的UnityFramework是 Mach-O 格式Dumper 也支持但 iOS 的元数据路径和 Android 不一样而且 iOS 应用通常有 FairPlay 加密直接从 App Store 下载的 ipa 里的二进制是加密的需要先解密才能 dump。这个解密过程涉及设备操作不在本文展开但你要知道 iOS 的 dump 门槛比 Android 和 Windows 高。4.3 输出文件在 IDA 与 Ghidra 中的导入对比IDA 用script.pyGhidra 则需要另一套流程。Ghidra 没有直接支持 Il2CppDumper 脚本的官方方式常见做法是把dump.cs里的符号信息导出成 Ghidra 能识别的格式比如 CSV 或者 Ghidra 脚本。有人写好了转换脚本把dump.cs解析成address,name的映射然后用 Ghidra 的 Python 脚本批量重命名。这个过程比 IDA 麻烦但 Ghidra 免费预算有限的话值得折腾。对比一下IDA 的script.py是官方输出兼容性最好跑完符号直接可用Ghidra 需要额外转换但胜在免费且跨平台。如果你只是偶尔 dump 一两个文件IDA 更省事如果要做批量分析或者团队里没有 IDA 授权Ghidra 方案更实际。不管用哪个核心都是把dump.cs里的地址和名字对上工具只是载体。5. 避坑与常见问题排查5.1 报 Invalid metadata file 或解析到一半崩溃现象Dumper 启动后立刻报Invalid metadata file或者进度条走到一半弹异常退出。原因global-metadata.dat被加密、被压缩或者版本和 Dumper 不匹配。v6.7.46 支持的元数据版本有一定范围太新的 Unity 版本比如 2022 之后的某些版本可能改了元数据格式导致解析失败。解决先用十六进制编辑器确认魔数是不是AF 1B B1 FA不是的话需要先解密是的话检查 Unity 版本如果太新去 Il2CppDumper 的仓库看有没有更新版本或者用--version参数看当前 Dumper 支持的元数据版本范围。5.2 dump 出来的 RVA 全是 0 或地址明显不对现象dump.cs里方法定义都有但每个方法前面的RVA都是0x0或者地址看起来像随机数。原因原生库和元数据不匹配比如你用了 Android 的元数据配了 Windows 的 dll或者 so 被加固过导致方法指针表被破坏。解决确认两份文件来自同一个程序、同一个版本、同一个平台。如果是加固过的 so需要先脱壳脱壳后的 so 再配合原始元数据 dump。另外检查一下config.json里的DumpMethod是不是被误关了。5.3 IDA 加载 script.py 后符号没变化现象脚本跑完了Output 窗口没报错但 Names 窗口里还是sub_。原因IDA 加载时的基址和script.py里假设的基址不一致或者脚本跑在了错误的数据库上。解决在 IDA 里按CtrlS看当前数据库的基址和dump.cs里的 VA 对比。如果基址不同在script.py开头找到image_base变量改成 IDA 里的实际基址重新跑。另外确认你加载的是正确的二进制文件别把元数据当二进制加载了。5.4 输出目录没写权限导致静默失败现象命令行跑完没报错但输出目录里什么都没有。原因输出目录的父目录没有写权限或者路径里有特殊字符导致创建失败。解决换一个你有完全控制权的目录比如D:\work\下面路径里不要有中文、空格、特殊符号。用管理员权限打开命令行再试一次。这个坑很隐蔽因为 Dumper 在某些情况下不会把错误打到控制台而是写进日志文件记得去看同目录下的log.txt。5.5 大文件 dump 时内存溢出或卡死现象处理大型游戏GameAssembly.dll超过 200MB时Dumper 卡死或者报OutOfMemoryException。原因v6.7.46 在解析大文件时会把整个文件读进内存32 位进程有 2GB 内存上限。解决确认你用的是 64 位版本的 Dumper如果还是不行把config.json里的DumpField、DumpProperty、DumpAttribute全关掉只保留DumpMethod和DumpType减少内存占用。另外关掉其他占内存的程序给 Dumper 留足空间。6. 把 dump.cs 变成可用的逆向工程资产dump 只是第一步真正有价值的是怎么用这份dump.cs。我一般会做三件事第一用正则把dump.cs里的方法地址和名字提取成 CSV方便在 Excel 或者数据库里检索第二把关键类的方法地址和stringliteral.json里的字符串做关联找出哪些方法引用了敏感字符串比如登录、支付、加密相关的第三针对核心方法在 IDA 里结合重命名后的符号做动态调试验证参数和返回值。# 从 dump.cs 提取方法地址和名字的简单脚本 import re pattern re.compile(r// RVA: (0x[0-9A-Fa-f]) Offset: (0x[0-9A-Fa-f]) VA: (0x[0-9A-Fa-f])\s*\n\s*(?:public|private|protected|internal)?\s*(?:static)?\s*[\w\[\],\s]\s(\w)\s*\() with open(dump.cs, r, encodingutf-8) as f: content f.read() results [] for match in pattern.finditer(content): rva, offset, va, name match.groups() results.append((va, name)) # 按地址排序后输出 results.sort(keylambda x: int(x[0], 16)) for va, name in results: print(f{va}\t{name})这段脚本的逻辑是用正则匹配dump.cs里方法注释行和方法签名行提取 VA 和方法名按地址排序后输出成制表符分隔的文本。参数说明pattern里的正则可以根据你的dump.cs实际格式微调比如有的版本方法签名跨多行需要把\s*\n\s*改成更宽松的匹配。跑出来的结果可以直接导入 IDA 的 Names 窗口做批量重命名或者导入 Ghidra 做符号恢复。进阶用法是结合stringliteral.json做交叉引用。比如你想找所有引用了https://api.example.com的方法先在stringliteral.json里找到这个字符串的地址然后在dump.cs里搜索这个地址找到引用它的方法再在 IDA 里跳过去看调用链。这个流程能把协议还原的效率提高好几倍。我自己的习惯是每次 dump 完先跑一遍提取脚本把方法列表存成 CSV后面分析的时候直接查表比在几十 MB 的dump.cs里翻快得多。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

储运部经理绩效考核指标量表与物流优化 2026/9/26 2:14:16

储运部经理绩效考核指标量表与物流优化

本考核表主要用于衡量储运部经理在一定考核期内的各项工作绩效。绩效考核指标涵盖了多个方面,涉及仓储、库存管理、运输、部门费用控制等关键领域。每个指标都有明确的绩效目标,并通过相应的指标权重来反映其对整体考核结果的重要性。通过这些细化的指标,可以全面评估储运部…

阅读更多 →
采购部绩效考核关键指标与成本控制 2026/9/26 2:14:16

采购部绩效考核关键指标与成本控制

采购部的绩效考核指标旨在衡量采购活动的各个环节的表现,从订单的完成率到供应商交货的及时性,所有指标的目的都是为了确保采购过程顺利、高效,并且能够满足公司的生产需求。每个考核指标都有明确的周期、计算公式以及对应的评分标准,确保对采购工作进行全面且准确的评价。…

阅读更多 →
生产部绩效考核关键指标与生产流程优化 2026/9/26 2:14:15

生产部绩效考核关键指标与生产流程优化

生产部的关键绩效考核指标是用于衡量生产效率、质量、安全以及成本控制等方面的表现。这些指标不仅能够反映生产过程中的各项任务完成情况,还能为管理层提供决策支持,帮助其优化生产流程和提升整体业绩。通过对这些KPI的评估,企业能够及时发现潜在的瓶颈和不足,并采取相应措…

阅读更多 →
技术部绩效考核关键指标与技术研发 2026/9/26 2:14:15

技术部绩效考核关键指标与技术研发

绩效考核表通过设定一系列关键绩效指标(KPI),衡量技术部门的工作效果与目标达成情况。每个KPI都反映了不同的工作领域,包括开发计划、项目申请、技术成果转化、工艺改进等多个方面。通过这些具体的指标,绩效考核不仅帮助管理层了解各项任务的执行进度,也能为部门员工提供…

阅读更多 →
企微H5应用白屏404根源:五环权限链路详解 2026/9/26 2:14:15

企微H5应用白屏404根源:五环权限链路详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
荧光寿命成像FLIM系统搭建:光学架构与硬件设计避坑指南 2026/9/26 2:14:09

荧光寿命成像FLIM系统搭建:光学架构与硬件设计避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉