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

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', ...) for magic, version, entry_count, index_entry_count, index_size
  • Descriptors: entry_count records of struct.unpack('<7I', ...) with data_offset / data_size and optional debug/config offsets
  • Index: skip index_size bytes
  • Names: uint32 length + UTF-8 bytes
  • Data: seek to each data_offset and write data_size bytes 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:12 as little-endian uint32
  • Decompress bytes 12: with lz4.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

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