Unity APK Decompiler

Unity Asset & APK Decompiler Online

Export assets from Unity bundles, serialized files or Android builds. Unity APKs also include Mono C# or IL2CPP metadata recovery.

.apk .unity3d .assets .assetbundle / Unity .bundle Companion ZIP Mono IL2CPP
Drop your Unity container, companion ZIP or APK here

⚠ Drag-and-drop upload could not load — an ad blocker is most likely blocking it. Please disable your ad blocker and reload the page to upload a file.

How It Works

1

Upload

Upload a Unity container or APK. If assets have sibling .resS or .resource files, include them together in a ZIP with their original relative paths.

2

Extract & Decompile

Validated assets are exported; APK scripts are handled per backend — C# for Mono, a metadata dump for IL2CPP.

3

Browse

Read the results in your browser, or download the whole tree as a ZIP.

For editor exports with GUID directories, use the Unity package extractor to restore supplied Assets/ paths and .meta files.

Standalone Unity Assets and Bundles

Upload .unity3d, .assets, .assetbundle or Unity .bundle files directly. Container headers are validated, so renamed valid files work too. A .bundle suffix alone does not mean Unity: React Native Hermes bundles use a different extractor.

For streamed textures and audio, ZIP the container together with its sibling .resS and .resource files, keeping their names and folder structure. Missing companions leave the available exports and serialized data intact; DECOMPILATION-NOTES.txt and the report explain which resource is absent. Unrelated ZIP files are not imported.

Standalone output is grouped under unity/textures/, unity/audio/, unity/meshes/, unity/text/ and other asset categories. unity/_report.json lists engine versions, object counts, export counts and individual failures. These containers hold assets and metadata; they do not supply C# method bodies or an editable Unity project.

A Unity APK Is Two Applications in One

An ordinary APK decompiler reads Dalvik bytecode and Android resources. In a Unity game that gets you the launcher activity, the ad and analytics SDKs, and a class called UnityPlayerActivity — and nothing whatsoever of the game. The game lives in a second payload the Android toolchain never touches: serialized Unity assets under assets/bin/Data/, and script code in either managed .NET assemblies or a native IL2CPP binary.

Upload an APK here and both halves are handled. You still get the usual sources/, resources/ and smali/ folders; a detected Unity build adds a unity/ folder next to them.

What Ends Up in an APK's unity/ Folder

Mono vs. IL2CPP: What You Can Actually Recover

This is the single question that decides how much of a Unity game you get back, and it was settled by whoever built the game, years before you downloaded it.

Mono builds ship C# compiled to .NET IL in Assembly-CSharp.dll. IL keeps the full type system and the instruction stream maps cleanly back to C#, so decompilation returns method bodies, control flow, string constants and usually field and parameter names. This is the good case: the output reads like source. Mono was Unity's original backend and is still used by plenty of Android games, especially smaller ones and older builds.

IL2CPP builds converted that same IL to C++ and then to native ARM machine code, shipped as libil2cpp.so. The C# method bodies do not exist in the APK in any form a decompiler can read — they are compiled machine instructions. What does survive is global-metadata.dat, the file the runtime uses to reflect over its own types, and it is remarkably informative: class and struct declarations, inheritance, field types, method signatures, attributes, every string literal in the program, and the native address of each method body. Il2CppDumper turns that into dump.cs and a set of dummy assemblies, which ILSpy then renders as browsable C# stubs.

So on an IL2CPP game you can see the entire architecture of the code — every class, every method name, every constant string, and where each method lives in the binary — but not the statements inside the methods. Recovering those means reading the native code at the addresses in the dump with a disassembler.

Why Unity Assets Need a Different Extractor

Unity does not ship PNG or WAV files. At build time everything is packed into serialized files — data.unity3d, globalgamemanagers, level* and asset bundles — where each object is a binary record laid out according to a type tree that is itself embedded in the file, and textures are stored in GPU-native compressed formats such as ETC2, ASTC or DXT rather than any format an image viewer knows. Reading them means implementing Unity's serialization format and its texture codecs. That is what runs here, per object, so that one unreadable asset costs you that asset and nothing else.

Objects that cannot be parsed are still written out as raw bytes under assets/unparsed/, and MonoBehaviour records are always saved as raw .bin alongside a JSON type tree when one can be read — IL2CPP builds frequently lack the type information needed to deserialize custom behaviour fields, and the raw bytes remain useful.

Limits

What It Is Used For

Recovering your own game's content after losing the project, auditing an SDK a game embeds, checking whether a shipped build leaks API keys in its string literals, investigating asset theft, modding and translation work, and studying how a technique was implemented. Decompiling software you do not own may be restricted by its licence and by local law; that is your call to make before you upload.

Frequently Asked Questions

Can you get the C# source code out of a Unity game?

With a Mono build, yes — Assembly-CSharp.dll is .NET IL and decompiles back to C# with method bodies intact. With IL2CPP, no: the C# was compiled to native code, and only declarations, signatures, string literals and native addresses can be recovered.

What is IL2CPP?

Unity's ahead-of-time pipeline. It converts compiled C# IL to C++ and then to native machine code, shipped as libil2cpp.so. The type system survives separately in global-metadata.dat, which is what makes any recovery possible.

How do I know whether a game is Mono or IL2CPP?

Upload it and read unity/README.txt. By hand: lib/*/libil2cpp.so plus assets/bin/Data/Managed/Metadata/global-metadata.dat means IL2CPP; DLLs under assets/bin/Data/Managed/ mean Mono.

What about XAPK, APKS and AAB bundles?

Upload them as usual — see the bundle decompiler. The Unity payload lives in the base APK inside the bundle, so open that inner APK from the file listing to get its unity/ folder.

Does this recover the original Unity project?

No. Unity builds are one-way. You get exported assets in ordinary formats plus serialized behaviour data and script metadata — not .unity scenes, prefabs or an openable project.

Does Unity analysis run the uploaded game?

No. The APK is read as an archive and parsed. No code from it is executed, and every analysis stage runs in an isolated, time-limited worker process.

Can I decompile a standalone Assembly-CSharp.dll?

Yes — upload it to the DLL decompiler, which decompiles .NET assemblies to C# on their own.