Xamarin Apps
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Basiese Inligting
Xamarin is ’n open-source platform ontwerp vir ontwikkelaars om apps vir iOS, Android, en Windows te bou met die .NET- en C#-raamwerke. Hierdie platform bied toegang tot talle gereedskap en uitbreidings om moderne toepassings doeltreffend te skep.
Xamarin se Argitektuur
- Vir Android, integreer Xamarin met Android- en Java-namespaces deur .NET bindings, en werk binne die Mono-uitvoeringsomgewing langs die Android Runtime (ART). Managed Callable Wrappers (MCW) en Android Callable Wrappers (ACW) fasiliteer kommunikasie tussen Mono en ART, wat albei op die Linux-kern gebou is.
- Vir iOS, hardloop toepassings onder die Mono runtime en gebruik volledige Ahead of Time (AOT) compilatie om C# .NET-kode na ARM-assemblytaal om te skakel. Hierdie proses loop langs die Objective-C Runtime op ’n UNIX-agtige kern.
.NET Runtime en Mono Framework
Die .NET framework sluit assemblies, classes en namespaces in vir toepassingontwikkeling, met die .NET Runtime wat kode-uitvoering bestuur. Dit bied platformonafhanklikheid en agterwaartse verenigbaarheid. Die Mono Framework is ’n open-source weergawe van die .NET framework, begin in 2005 om .NET na Linux uit te brei, en word nou deur Microsoft ondersteun en deur Xamarin gelei.
Reverse Engineering Xamarin Apps
Decompilation of Xamarin Assemblies
Decompilation transformeer saamgestelde kode terug in bronkode. In Windows kan die Modules window in Visual Studio modules identifiseer vir decompilation, wat direkte toegang tot third-party code en die onttrekking van bronkode vir analise moontlik maak.
JIT vs AOT Compilation
- Android ondersteun Just-In-Time (JIT) en Ahead-Of-Time (AOT) compilatie, met ’n Hybrid AOT-modus vir optimale uitvoersnelheid. Volledige AOT is uitsluitlik beskikbaar vir Enterprise-lisensies.
- iOS gebruik uitsluitlik AOT-compilatie as gevolg van Apple’s beperkings op dinamiese kode-uitvoering.
Extracting dll Files from APK/IPA
Om toegang tot die assemblies in ’n APK/IPA te kry, pak die lêer uit en verken die assemblies-direktorie. Vir Android kan gereedskap soos XamAsmUnZ en xamarin-decompress dll-lêers uitpak.
python3 xamarin-decompress.py -o /path/to/decompressed/apk
In gevalle waar, nadat die APK gedecompileer is, dit moontlik is om die unknown/assemblies/ gids met die .dll-lêers daarin te sien, is dit moontlik om dnSpy direk oor die .dlls te gebruik om hulle te analiseer. Soms is egter die assemblies.blob en assemblies.manifest lêers binne die unknown/assemblies/ gids. Die hulpmiddel pyxamstore kan die assemblies.blob lêer in Xamarin apps uitpak, wat toegang tot die .NET assemblies vir verdere analise moontlik maak:
pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
# After patching DLLs, rebuild the store
pyxamstore pack
.NET MAUI 9 / .NET for Android assembly stores inside ELF .so
Onlangse Android MAUI 9-boue openbaar nie meer assemblies.blob direk nie. In plaas daarvan lewer elke ABI ’n ELF-behouer soos lib/arm64-v8a/libassemblies.arm64-v8a.blob.so. Dit is ’n geldige gedeelde biblioteek met ’n aangepaste payload-afdeling wat die beheerde assembly store bevat.
Vinnige werkvloeistroom:
unzip app.apk -d app_unpacked
llvm-readelf --section-headers app_unpacked/lib/arm64-v8a/libassemblies.arm64-v8a.blob.so
llvm-objcopy --dump-section=payload=payload.bin \
app_unpacked/lib/arm64-v8a/libassemblies.arm64-v8a.blob.so
hexdump -c -n 4 payload.bin # XABA
As llvm-readelf payload-afdeling wys, dump dit en verifieer dat die uitgehaalde blob begin met XABA (0x41424158). Daardie payload is die assembly store gedokumenteer deur .NET for Android, nie ’n enkele DLL nie.
Die store-layout is nuttig wanneer jy assemblies handmatig moet uitkrap of ’n extractor moet valideer:
- Opskrif:
struct.unpack('<5I', ...)virmagic,version,entry_count,index_entry_count,index_size - Beskrywers:
entry_countrekords vanstruct.unpack('<7I', ...)metdata_offset/data_sizeen opsionele debug/config offsets - Indeks: slaan
index_sizebytes oor - Name:
uint32 length+ UTF-8 bytes - Data: gaan na elke
data_offseten skryfdata_sizebytes as<name>.dll
Sommige uitgehaalde inskrywings sal steeds nie direk in dnSpy/ILSpy/dotPeek oopmaak nie omdat hulle addisioneel met XALZ toegedraai is. In daardie geval:
- Kontroleer die eerste 4 bytes van elke uitgehaalde lêer vir
XALZ - Lees die ongekomprimeerde grootte uit bytes
8:12as little-endianuint32 - Dekomprimeer bytes
12:metlz4.block.decompress(...)
Minimale dekompressielogika:
import struct
import lz4.block
def decompress_xalz(data):
size = struct.unpack('<I', data[8:12])[0]
return lz4.block.decompress(data[12:], uncompressed_size=size)
As jy nie die store handmatig wil ontleed nie, pymauistore automatiseer ELF payload extraction, XABA store parsing, en XALZ dekompressie vir MAUI 9 APKs.
Sommige ouer Xamarin/MAUI builds bewaar saamgeperste assemblies in die XALZ-formaat binne /assemblies.blob of /resources/assemblies. Jy kan hulle vinnig dekomprimeer met die xamarout biblioteek:
from xamarout import xalz
import os
for root, _, files in os.walk("."):
for f in files:
if open(os.path.join(root, f), 'rb').read(4) == b"XALZ":
xa = xalz.XamarinCompressedAssembly(os.path.join(root, f))
xa.write("decompressed/" + f)
iOS dll-lêers is maklik beskikbaar vir dekompilasie, wat groot dele van die application code openbaar, wat dikwels ’n gemeenskaplike basis oor verskillende platforms deel.
AOT on iOS: managed IL word saamgestel in native
*.aotdata.*files. Om net die DLL te patch sal nie die logika verander nie; jy moet native stubs hook (bv. met Frida) omdat die IL bodies leë plekhouers is.
Static Analysis
Sodra die .dll-lêers bekom is, is dit moontlik om die .Net code staties te ontleed met gereedskap soos dnSpy of ILSpy wat dit toelaat om die code van die app te wysig. Dit kan uiters nuttig wees om die application te manipuleer om byvoorbeeld beskermings te omseil.
Let wel: nadat jy die app gewysig het, sal jy dit weer moet inpakk en weer moet onderteken.
dnSpy is gearchiveer; maintained forks soos dnSpyEx werk steeds met .NET 8/MAUI assemblies en bewaar debug symbols wanneer dit herbewaar word.
Dynamic Analysis
Dynamic analysis behels die nagaan van SSL pinning en die gebruik van gereedskap soos Fridax vir runtime-wysigings van die .NET binary in Xamarin apps. Frida scripts is beskikbaar om root detection of SSL pinning te bypass, wat die analisevermoëns verbeter.
Other interesting Frida scripts:
Updated Frida-xamarin-unpin (Mono >=6) hooks System.Net.Http.HttpClient.SendAsync and swaps the handler to a permissive one, so it still works even when pinning is implemented in custom handlers. Run it after the app starts:
frida -U -l dist/xamarin-unpin.js com.target.app --no-pause
Vinnige sjabloon om managed methods te hook met die ingeslote frida-mono-api:
const mono = require('frida-mono-api');
Mono.ensureInitialized();
Mono.enumerateLoadedImages().forEach(i => console.log(i.name));
const klass = Mono.classFromName("Namespace", "Class");
const m = Mono.methodFromName(klass, "Method", 2);
Mono.intercept(m, { onEnter(args){ console.log(args[1].toInt32()); } });
Herondertekening
Die hulpmiddel Uber APK Signer vereenvoudig die ondertekening van verskeie APK’s met dieselfde sleutel, en kan gebruik word om ’n app weer te onderteken nadat daar veranderinge daaraan aangebring is.
Verwysings
- https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers
- https://thecobraden.com/posts/unpacking_xamarin_assembly_stores/
- https://medium.com/@justmobilesec/introduction-to-the-exploitation-of-xamarin-apps-fde4619a51bf
- https://github.com/jakev/pyxamstore
- https://pypi.org/project/xamarout/
- https://github.com/GoSecure/frida-xamarin-unpin
- https://gist.github.com/Diefunction/e26fce039efcab57aac342a4b2d48ff6
- https://reverseengineering.stackexchange.com/questions/31716/deobfuscating-ios-dll-file-i-think-arm64
- https://mwalkowski.com/post/decompiling-an-android-application-written-in-net-maui-9-xamarin/
- https://github.com/dotnet/android/blob/main/Documentation/project-docs/AssemblyStores.md
- https://github.com/dotnet/android/blob/main/Documentation/project-docs/ApkSharedLibraries.md
- https://github.com/mwalkowski/pymauistore/tree/main
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


