# Xamarin Apps {{#include ../banners/hacktricks-training.md}} ## **Taarifa za Msingi** Xamarin ni **jukwaa la chanzo wazi** lililoundwa kwa ajili ya waendelezaji **kuunda programu za iOS, Android, na Windows** kwa kutumia mifumo ya .NET na C#. Jukwaa hili linatoa ufikiaji wa zana nyingi na nyongeza za kuunda programu za kisasa kwa ufanisi. ### Muktadha wa Xamarin - Kwa **Android**, Xamarin inajumuisha na Android na Java namespaces kupitia .NET bindings, ikifanya kazi ndani ya mazingira ya utekelezaji ya Mono pamoja na Android Runtime (ART). Managed Callable Wrappers (MCW) na Android Callable Wrappers (ACW) husaidia mawasiliano kati ya Mono na ART, zote zikiwa zimejengwa kwenye kernel ya Linux. - Kwa **iOS**, programu zinafanya kazi chini ya mazingira ya utekelezaji ya Mono, zikitumika kwa uundaji wa Ahead of Time (AOT) kamili kubadilisha C# .NET code kuwa lugha ya mkusanyiko wa ARM. Mchakato huu unafanya kazi pamoja na Objective-C Runtime kwenye kernel inayofanana na UNIX. ### .NET Runtime na Mono Framework **.NET framework** inajumuisha makusanyo, madarasa, na namespaces kwa ajili ya maendeleo ya programu, huku .NET Runtime ikisimamia utekelezaji wa msimbo. Inatoa uhuru wa jukwaa na ulinganifu wa nyuma. **Mono Framework** ni toleo la chanzo wazi la .NET framework, lililoanzishwa mwaka 2005 ili kupanua .NET kwa Linux, sasa likisaidiwa na Microsoft na kuongozwa na Xamarin. ### Uhandisi wa Nyuma wa Programu za Xamarin #### Ukombozi wa Makusanyo ya Xamarin Ukombozi hubadilisha msimbo ulioandikwa kuwa msimbo wa chanzo. Katika Windows, dirisha la Modules katika Visual Studio linaweza kutambua moduli za ukombozi, kuruhusu ufikiaji wa moja kwa moja wa msimbo wa wahusika wengine na kutoa msimbo wa chanzo kwa ajili ya uchambuzi. #### JIT vs AOT Ukompaji - **Android** inasaidia Just-In-Time (JIT) na Ahead-Of-Time (AOT) ukompaji, ikiwa na hali ya Hybrid AOT kwa kasi bora ya utekelezaji. AOT kamili ni ya leseni za Enterprise pekee. - **iOS** inatumia tu AOT ukompaji kutokana na vizuizi vya Apple juu ya utekelezaji wa msimbo wa dinamik. ### Kutolewa kwa faili za dll kutoka APK/IPA Ili kufikia makusanyo katika APK/IPA, fungua faili na uchunguze saraka ya makusanyo. Kwa Android, zana kama [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) na [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress) zinaweza kufungua faili za dll. ```bash python3 xamarin-decompress.py -o /path/to/decompressed/apk ``` Katika hali ambapo baada ya decompiling APK inawezekana kuona folda ya unknown/assemblies/ yenye faili za `.dll` ndani yake, hivyo inawezekana kutumia [**dnSpy**](https://github.com/dnSpy/dnSpy) moja kwa moja juu ya `.dlls` ili kuzichambua.\ Hata hivyo, wakati mwingine, inapatikana faili za `assemblies.blob` na `assemblies.manifest` ndani ya folda ya unknown/assemblies/. Zana [pyxamstore](https://github.com/jakev/pyxamstore) inaweza kutumika kwa kufungua faili ya `assemblies.blob` katika programu za Xamarin, ikiruhusu ufikiaji wa .NET assemblies kwa uchambuzi zaidi: ```bash pyxamstore unpack -d /path/to/decompressed/apk/assemblies/ ``` Faili za iOS dll zinapatikana kwa urahisi kwa ajili ya decompilation, zikifunua sehemu kubwa za msimbo wa programu, ambayo mara nyingi inashiriki msingi wa kawaida kati ya majukwaa tofauti. ### Uchambuzi wa Kijamii Mara tu `.dll`s zinapopatikana, inawezekana kuchambua msimbo wa .Net kwa njia ya statiki kwa kutumia zana kama [**dnSpy**](https://github.com/dnSpy/dnSpy) **au** [**ILSpy**](https://github.com/icsharpcode/ILSpy) **ambazo** zitakuruhusu kubadilisha msimbo wa programu. Hii inaweza kuwa ya manufaa sana kubadilisha programu ili kupita ulinzi kwa mfano.\ Kumbuka kwamba baada ya kubadilisha programu, utahitaji kuipakia tena na kuisaini tena. ### Uchambuzi wa Kijamii Uchambuzi wa kijamii unahusisha kuangalia SSL pinning na kutumia zana kama [Fridax](https://github.com/NorthwaveSecurity/fridax) kwa mabadiliko ya wakati wa kukimbia ya binary ya .NET katika programu za Xamarin. Mifano ya Frida inapatikana ili kupita ugunduzi wa root au SSL pinning, ikiongeza uwezo wa uchambuzi. Mifano mingine ya kuvutia ya Frida: - [**xamarin-antiroot**](https://codeshare.frida.re/@Gand3lf/xamarin-antiroot/) - [**xamarin-root-detect-bypass**](https://codeshare.frida.re/@nuschpl/xamarin-root-detect-bypass/) - [**Frida-xamarin-unpin**](https://github.com/GoSecure/frida-xamarin-unpin) ### Kusaini Tena Zana [Uber APK Signer](https://github.com/patrickfav/uber-apk-signer) inarahisisha kusaini APK nyingi kwa kutumia funguo sawa, na inaweza kutumika kusaini tena programu baada ya mabadiliko kufanywa kwake. ## Taarifa Zaidi - [https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers](https://www.appknox.com/security/xamarin-reverse-engineering-a-guide-for-penetration-testers) - [https://thecobraden.com/posts/unpacking_xamarin_assembly_stores/](https://thecobraden.com/posts/unpacking_xamarin_assembly_stores/) - [https://medium.com/@justmobilesec/introduction-to-the-exploitation-of-xamarin-apps-fde4619a51bf](https://medium.com/@justmobilesec/introduction-to-the-exploitation-of-xamarin-apps-fde4619a51bf) {{#include ../banners/hacktricks-training.md}}