Loading...
Loading...
Dump Unity IL2CPP symbols from iOS/Android builds. Extract method names, addresses, and type info from IL2CPP binaries and global-metadata.dat, then generate IDA/Ghidra import scripts.
npx skill4agent add p4nda0s/reverse-skills rev-u3d-dumpglobal-metadata.dat| File | Location | Purpose |
|---|---|---|
| Native binary | iOS: | Compiled C# code (Mach-O / ELF) |
| Metadata | | All type/method/string info |
https://github.com/roytu/Il2CppDumperv39script.jsonhttps://github.com/Perfare/Il2CppDumperhttps://github.com/SamboyCoding/Cpp2IL[Address]# Unzip IPA
unzip -o app.ipa -d .
# Binary
BINARY="Payload/<AppName>.app/Frameworks/UnityFramework.framework/UnityFramework"
# Metadata
METADATA="Payload/<AppName>.app/Data/Managed/Metadata/global-metadata.dat"# Unzip APK
unzip -o app.apk -d .
# Binary (pick target arch)
BINARY="lib/arm64-v8a/libil2cpp.so"
# Metadata
METADATA="assets/bin/Data/Managed/Metadata/global-metadata.dat"# First 8 bytes: magic (4) + version (4), little-endian
xxd -l 8 "$METADATA"
# Expected: af1b b1fa 2700 0000 → magic OK, version = 0x27 = 39| Version | Unity | Tool |
|---|---|---|
| ≤ 29 | Unity 2021 and earlier | Original Il2CppDumper |
| 31 | Unity 2022 | Original Il2CppDumper (partial) |
| 39 | Unity 6 (6000.x) | roytu/Il2CppDumper v39 fork |
# Clone v39 fork
git clone -b v39 https://github.com/roytu/Il2CppDumper.git
# Build
cd Il2CppDumper
DOTNET_ROLL_FORWARD=LatestMajor dotnet build -c Release
# Run (use net8.0 framework)
DOTNET_ROLL_FORWARD=LatestMajor dotnet run \
--project Il2CppDumper/Il2CppDumper.csproj \
-c Release --framework net8.0 \
-- "$BINARY" "$METADATA" output_dirDOTNET_ROLL_FORWARD=LatestMajorConsole.ReadKey()codesign -s - <binary>| File | Size (typical) | Purpose |
|---|---|---|
| 50–100 MB | Function addresses + names + signatures (IDA/Ghidra import) |
| 10–30 MB | C# class dump with RVA/VA addresses |
| 50–100 MB | C struct definitions for type import |
| ~2 KB | IDA Python import script |
script.json{
"ScriptMethod": [
{
"Address": 40865744,
"Name": "ClassName$$MethodName",
"Signature": "ReturnType ClassName__MethodName (args...);",
"TypeSignature": "viii"
}
]
}dump.cs// RVA: 0x1A2B3C4 Offset: 0x1A2B3C4 VA: 0x1A2B3C4
public void MethodName() { }script.jsonida_py3.pyFile → Script file...ida_py3.pyscript.jsonFile → Load file → Parse C header file...il2cpp.hghidra.pyghidra_with_struct.pyWindow → Script Manager → Runscript.json| Error | Cause | Fix |
|---|---|---|
| Using original Il2CppDumper | Switch to roytu/Il2CppDumper v39 fork |
| Exit code 137 (SIGKILL) | macOS unsigned binary | |
| Non-interactive console | Ignore — dump completed successfully |
| .NET version mismatch | Set |
| Empty output | Wrong binary/metadata pair | Verify both files are from the same build |
dump.csscript.jsonhex(40865744)0x26F8FD0dump.cs// 0x20