# Xamarin Apps {{#include ../banners/hacktricks-training.md}} ## **Informazioni di Base** Xamarin è una **piattaforma open-source** progettata per gli sviluppatori per **creare app per iOS, Android e Windows** utilizzando i framework .NET e C#. Questa piattaforma offre accesso a numerosi strumenti ed estensioni per creare applicazioni moderne in modo efficiente. ### Architettura di Xamarin - Per **Android**, Xamarin si integra con i namespace Android e Java tramite binding .NET, operando all'interno dell'ambiente di esecuzione Mono insieme all'Android Runtime (ART). Managed Callable Wrappers (MCW) e Android Callable Wrappers (ACW) facilitano la comunicazione tra Mono e ART, entrambi costruiti sul kernel Linux. - Per **iOS**, le applicazioni vengono eseguite sotto il runtime Mono, utilizzando la compilazione Ahead of Time (AOT) completa per convertire il codice C# .NET in linguaggio assembly ARM. Questo processo si svolge insieme all'Objective-C Runtime su un kernel simile a UNIX. ### Runtime .NET e Framework Mono Il **framework .NET** include assembly, classi e namespace per lo sviluppo di applicazioni, con il .NET Runtime che gestisce l'esecuzione del codice. Offre indipendenza dalla piattaforma e compatibilità retroattiva. Il **Framework Mono** è una versione open-source del framework .NET, avviato nel 2005 per estendere .NET a Linux, ora supportato da Microsoft e guidato da Xamarin. ### Ingegneria Inversa delle App Xamarin #### Decompilazione delle Assemblies Xamarin La decompilazione trasforma il codice compilato di nuovo in codice sorgente. In Windows, la finestra Moduli in Visual Studio può identificare i moduli per la decompilazione, consentendo l'accesso diretto al codice di terze parti ed estraendo il codice sorgente per l'analisi. #### Compilazione JIT vs AOT - **Android** supporta la compilazione Just-In-Time (JIT) e Ahead-Of-Time (AOT), con una modalità ibrida AOT per una velocità di esecuzione ottimale. La AOT completa è esclusiva per le licenze Enterprise. - **iOS** impiega esclusivamente la compilazione AOT a causa delle restrizioni di Apple sull'esecuzione di codice dinamico. ### Estrazione di file dll da APK/IPA Per accedere alle assembly in un APK/IPA, decomprimi il file ed esplora la directory delle assembly. Per Android, strumenti come [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) e [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress) possono decomprimere i file dll. ```bash python3 xamarin-decompress.py -o /path/to/decompressed/apk ``` Nei casi in cui, dopo aver decompilato l'APK, è possibile vedere la cartella unknown/assemblies/ con i file `.dll` al suo interno, è possibile utilizzare [**dnSpy**](https://github.com/dnSpy/dnSpy) direttamente sui `.dll` per analizzarli.\ Tuttavia, a volte si trovano i file `assemblies.blob` e `assemblies.manifest` all'interno della cartella unknown/assemblies/. Lo strumento [pyxamstore](https://github.com/jakev/pyxamstore) può essere utilizzato per estrarre il file `assemblies.blob` nelle app Xamarin, consentendo l'accesso agli assembly .NET per ulteriori analisi: ```bash pyxamstore unpack -d /path/to/decompressed/apk/assemblies/ ``` I file .dll di iOS sono facilmente accessibili per la decompilazione, rivelando porzioni significative del codice dell'applicazione, che spesso condivide una base comune tra diverse piattaforme. ### Analisi Statica Una volta ottenuti i `.dll`, è possibile analizzare il codice .Net staticamente utilizzando strumenti come [**dnSpy**](https://github.com/dnSpy/dnSpy) **o** [**ILSpy**](https://github.com/icsharpcode/ILSpy) **che** permetteranno di modificare il codice dell'app. Questo può essere molto utile per manomettere l'applicazione per bypassare le protezioni, ad esempio.\ Nota che dopo aver modificato l'app dovrai impacchettarla di nuovo e firmarla nuovamente. ### Analisi Dinamica L'analisi dinamica comporta il controllo del SSL pinning e l'uso di strumenti come [Fridax](https://github.com/NorthwaveSecurity/fridax) per modifiche in tempo reale del binario .NET nelle app Xamarin. Gli script Frida sono disponibili per bypassare il rilevamento del root o il SSL pinning, migliorando le capacità di analisi. Altri interessanti script 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) ### Re-firma Lo strumento [Uber APK Signer](https://github.com/patrickfav/uber-apk-signer) semplifica la firma di più APK con la stessa chiave e può essere utilizzato per rifirmare un'app dopo che sono state apportate modifiche. ## Ulteriori informazioni - [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}}