Xamarin Programu
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Taarifa za Msingi
Xamarin ni jukwaa la chanzo wazi linalotengenezwa kwa watengenezaji ili kujenga programu za iOS, Android, na Windows kwa kutumia mifumo ya .NET na C#. Jukwaa hili linatoa ufikiaji wa zana na nyongeza nyingi ili kuunda programu za kisasa kwa ufanisi.
Usanifu wa Xamarin
- Kwa Android, Xamarin inaunganisha na namespaces za Android na Java kupitia bindings za .NET, ikifanya kazi ndani ya mazingira ya utekelezaji ya Mono pamoja na Android Runtime (ART). Managed Callable Wrappers (MCW) na Android Callable Wrappers (ACW) zinarahisisha mawasiliano kati ya Mono na ART, zote mbili zimetengenezwa juu ya kernel ya Linux.
- Kwa iOS, programu zinaendesha chini ya runtime ya Mono, zikitumia Ahead of Time (AOT) compilation kamili kubadilisha msimbo wa C# .NET kuwa lugha ya assembly ya ARM. Mchakato huu unaendesha kando na Objective-C Runtime kwenye kernel inayofanana na UNIX.
.NET Runtime na Mono Framework
.NET framework inajumuisha assemblies, classes, na namespaces kwa ajili ya maendeleo ya programu, na .NET Runtime inasimamia utekelezaji wa msimbo. Inatoa uhuru wa jukwaa na utangamano wa nyuma. Mono Framework ni toleo la chanzo wazi la .NET framework, lililoanzishwa mwaka 2005 ili kueneza .NET kwa Linux, sasa linasaidiwa na Microsoft na linaloongozwa na Xamarin.
Uhandisi wa nyuma wa Programu za Xamarin
Decompilation ya Xamarin Assemblies
Decompilation hubadilisha msimbo uliokusanywa kurudi kwenye msimbo wa asili. Kwenye Windows, dirisha la Modules ndani ya Visual Studio linaweza kutambua modules kwa ajili ya decompilation, kuruhusu upatikanaji wa moja kwa moja wa msimbo wa wahusika wa tatu na uondoaji wa msimbo wa asili kwa uchambuzi.
JIT vs AOT Compilation
- Android inaunga mkono Just-In-Time (JIT) na Ahead-Of-Time (AOT) compilation, pamoja na mode ya Hybrid AOT kwa kasi bora ya utekelezaji. Full AOT ni kwa kipekee kwa leseni za Enterprise.
- iOS inatumia tu AOT compilation kutokana na vikwazo vya Apple juu ya utekelezaji wa msimbo wa dynamic.
Kutoa faili za dll kutoka APK/IPA
Ili kupata assemblies ndani ya APK/IPA, unzip faili na chunguza saraka ya assemblies. Kwa Android, zana kama XamAsmUnZ na xamarin-decompress zinaweza kuifungua faili za dll.
python3 xamarin-decompress.py -o /path/to/decompressed/apk
Katika kesi ambapo, baada ya decompiling APK, inawezekana kuona folda unknown/assemblies/ yenye faili za .dll ndani yake, inawezekana kutumia dnSpy moja kwa moja juu ya .dlls ili kuziangalia. Hata hivyo, wakati mwingine faili assemblies.blob na assemblies.manifest ziko ndani ya folda unknown/assemblies/. Zana pyxamstore inaweza kufungua faili assemblies.blob katika Xamarin apps, ikiruhusu upatikanaji wa .NET assemblies kwa uchambuzi zaidi:
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
Mijengo ya hivi karibuni ya Android MAUI 9 hayana tena assemblies.blob inayoonekana moja kwa moja. Badala yake, kila ABI inasafirisha kontena la ELF kama lib/arm64-v8a/libassemblies.arm64-v8a.blob.so. Hii ni maktaba inayoshirikiwa halali yenye sehemu maalum ya payload inayohifadhi hifadhi ya managed assembly.
Mtiririko mfupi:
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
Ikiwa llvm-readelf inaonyesha sehemu ya payload, dump it na uhakikishe blob iliyotolewa inaanza na XABA (0x41424158). Hiyo payload ni assembly store iliyoelezewa na .NET kwa Android, si DLL moja.
Muundo wa store ni muhimu unapohitaji kuchonga assemblies kwa mkono au kuthibitisha extractor:
- Header:
struct.unpack('<5I', ...)formagic,version,entry_count,index_entry_count,index_size - Descriptors:
entry_countrecords ofstruct.unpack('<7I', ...)withdata_offset/data_sizeand optional debug/config offsets - Index: skip
index_sizebytes - Names:
uint32 length+ UTF-8 bytes - Data: seek to each
data_offsetand writedata_sizebytes as<name>.dll
Baadhi ya entries zilizotolewa bado hazitafunguka moja kwa moja katika dnSpy/ILSpy/dotPeek kwa sababu zimefungwa zaidi na XALZ. Katika kesi hiyo:
- Check the first 4 bytes of each extracted file for
XALZ - Read the uncompressed size from bytes
8:12as little-endianuint32 - Decompress bytes
12:withlz4.block.decompress(...)
Mantiki ya msingi ya decompression:
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)
Ikiwa hautaki kuchambua store kwa mkono, pymauistore inaotomatisha uondoaji wa payload za ELF, uchambuzi wa store wa XABA, na kuondoa ukandishaji wa XALZ kwa MAUI 9 APKs.
Baadhi ya builds za zamani za Xamarin/MAUI huweka assemblies zilizobanwa zikitumia muundo wa XALZ ndani ya /assemblies.blob au /resources/assemblies. Unaweza kuondoa ukandishaji wao kwa haraka kwa kutumia maktaba ya xamarout:
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 files zinaweza kupatikana kwa urahisi kwa ajili ya decompilation, zikifichua sehemu kubwa za msimbo wa programu, ambao mara nyingi unashiriki msingi sawa kwenye majukwaa tofauti.
AOT on iOS: managed IL imekompilishwa kuwa native
*.aotdata.*files. Kurekebisha DLL pekee haitabadilisha mantiki; unahitaji ku-hook native stubs (mfano, kwa Frida) kwa sababu IL bodies ni empty placeholders.
Uchambuzi wa Statiki
Mara .dlls zinapopatikana inawezekana kuchambua msimbo wa .Net statically kwa kutumia zana kama dnSpy au ILSpy ambazo zitaruhusu kubadilisha msimbo wa app. Hii inaweza kuwa ya msaada mkubwa kubadilisha programu ili ku-bypass protections, kwa mfano.
Kumbuka kwamba baada ya kubadilisha app utahitajika kuipakia tena na kui-sign tena.
dnSpy ime-archive; forks zinazosimamiwa kama dnSpyEx zinaendelea kufanya kazi na .NET 8/MAUI assemblies na zinaweka debug symbols wakati wa ku-re-save.
Uchambuzi wa Dinamiki
Uchambuzi wa dinamiki unahusisha kukagua SSL pinning na kutumia zana kama Fridax kwa runtime modifications ya binary ya .NET katika apps za Xamarin. Frida scripts zinapatikana ku-bypass root detection au SSL pinning, zikiongeza uwezo wa uchambuzi.
Other interesting Frida scripts:
Updated Frida-xamarin-unpin (Mono >=6) ina-hook System.Net.Http.HttpClient.SendAsync na inabadili handler kuwa permissive, hivyo bado inafanya kazi hata wakati pinning imetekelezwa katika custom handlers. Run it after the app starts:
frida -U -l dist/xamarin-unpin.js com.target.app --no-pause
Kiolezo kifupi cha ku-hook managed methods kwa kutumia frida-mono-api iliyojumuishwa:
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()); } });
Kusaini tena
Zana Uber APK Signer inarahisisha kusaini APK nyingi kwa ufunguo mmoja, na inaweza kutumika kusaini tena app baada ya kufanyiwa mabadiliko.
Marejeo
- 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
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.


