Xamarin and .NET MAUI Decompiler

Xamarin & .NET MAUI Decompiler Online

An Android APK written in C# — unpacked from assemblies.blob and decompiled back to C#.

.apk assemblies.blob assembly store XALZ .NET MAUI
Drop your Xamarin or .NET MAUI APK here
Choose file

⚠ 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

Find the assemblies

The APK is checked for an AssemblyStore, for loose assemblies/*.dll, and for the libmonodroid.so runtime that marks a .NET Android app.

2

Unpack

The store is parsed, each entry's LZ4 XALZ compression is undone, and the individual .NET assemblies are written out as real DLL files.

3

Decompile

Every application assembly becomes a browsable C# project, next to the usual Java, resources and smali output for the Android wrapper.

Why a Xamarin APK Looks Empty

Open a Xamarin or .NET MAUI app in an ordinary APK decompiler and the result is disappointing: a couple of generated activity classes, a MonoPackageManager, some binding stubs, and nothing that resembles the app. That is not a decompilation failure. A Xamarin app is written in C#, and its Dalvik bytecode exists only to load the .NET runtime and hand control to managed code.

The actual program is stored somewhere a Java decompiler never looks. Older builds put individual .dll files in the APK's assemblies/ folder. Everything since then merges them into a single AssemblyStore — one binary container holding every assembly the app ships, each one usually LZ4-compressed. Neither layout is DEX, so JADX and its peers walk straight past it.

What You Get Back

Every Store Layout, Old and New

Xamarin has changed how it packages managed code several times, and uploads span all of it:

All of them are detected from the APK's contents rather than from file names, and the store is unpacked in-process — no Python helper, no external unpacker.

Bare XALZ DLL Files

If you have already pulled a .dll out of a Xamarin APK by hand, you can upload it on its own. Those files usually still start with the four bytes XALZ rather than MZ, and most .NET decompilers reject them with a message about missing managed metadata. Here the compression header is recognised and undone first, so the assembly decompiles normally.

Who Uses This

Xamarin and .NET MAUI are heavily used for enterprise, banking and line-of-business Android apps, which makes these APKs a common subject of security review. Recovering the C# is the difference between reading generated glue code and reading the app's actual authentication, storage and network logic.

Limits

Frequently Asked Questions

How do I know an APK is Xamarin or MAUI?

It contains lib/<abi>/libmonodroid.so, and either an assemblies/ folder or a libassemblies.*.blob.so under lib/. You do not have to check — just upload the APK and the C# folder appears if it is one.

Do I still get the Java and smali output?

Yes. The Android wrapper is decompiled exactly as any other APK; the C# is added in a separate xamarin/ folder beside it.

Can I rebuild the app from this?

No. The output is for reading and analysis. It reconstructs source from compiled assemblies, without the project files, assets pipeline or signing material of the original solution.

What about .NET MAUI apps that use Blazor?

The C# assemblies are recovered the same way. Razor components compiled into those assemblies appear as their generated C# classes.

Does decompiling run the app?

No. The APK is read as an archive and the assemblies are parsed as data in a time-limited worker. Nothing from the upload is executed.