rev-u3d-dump - Unity IL2CPP Symbol Dumper Extract C# method names, addresses, and type definitions from Unity IL2CPP builds for IDA/Ghidra analysis. Overview Unity IL2CPP compiles C# to native code. The original class/method names are stripped from the binary but preserved in global-metadata.dat . This skill recovers the mapping between native function addresses and their original C# names. Key Files in Unity Build File Location Purpose Native binary iOS: Frameworks/UnityFramework.framework/UnityFramework Android: lib/{arch}/libil2cpp.so Compiled C# code (Mach-O / ELF) Metadata Data/Managed/Metadata/global-metadata.dat All type/method/string info Tool Selection Il2CppDumper (recommended for metadata v39+) Use the v39 fork for Unity 6+ builds: Repo: https://github.com/roytu/Il2CppDumper (branch: v39 ) Supports metadata v24–v39 Outputs script.json with function addresses — ready for IDA/Ghidra import The original Il2CppDumper ( https://github.com/Perfare/Il2CppDumper ) only supports up to v29. Cpp2IL (alternative) Repo: https://github.com/SamboyCoding/Cpp2IL Supports metadata v39, but dummy DLLs lack [Address] attributes Useful for C# source reconstruction, not ideal for IDA import Step-by-Step Workflow Step 1: Locate IL2CPP Files iOS (IPA):
Unzip IPA
unzip -o app.ipa -d .
Binary
BINARY
"Payload/
Metadata
METADATA
"Payload/
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" Step 2: Check Metadata Version
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 Step 3: Build & Run 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_dir
Notes:
DOTNET_ROLL_FORWARD=LatestMajor
allows running on .NET 9/10 even though the project targets .NET 6/8
Exit code 134 is normal in non-interactive mode (caused by
Console.ReadKey()
at the end)
On macOS, if the binary gets SIGKILL'd, ad-hoc sign it:
codesign -s -