hacktricks/mobile-pentesting/xamarin-apps.md

7.3 KiB

Xamarin Apps

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

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 una compilazione completa Ahead of Time (AOT) 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 Runtime .NET 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 e l'estrazione del 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 compilazione completa AOT è esclusiva per le licenze Enterprise.
  • iOS utilizza 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 e xamarin-decompress possono decomprimere i file dll.

python3 xamarin-decompress.py -o /path/to/decompressed/apk

In casi in cui, dopo aver decompilato l'APK, è possibile vedere la cartella unknown/assemblies/ con i file .dll al suo interno, è possibile utilizzare direttamente dnSpy 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 può essere utilizzato per estrarre il file assemblies.blob nelle app Xamarin, consentendo l'accesso alle assembly .NET per ulteriori analisi:

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 in modo statico utilizzando strumenti come dnSpy o 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 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:

Ri-firma

Lo strumento Uber APK Signer semplifica la firma di più APK con la stessa chiave e può essere utilizzato per ri-firmare un'app dopo che sono state apportate modifiche.

Ulteriori informazioni

{% hint style="success" %} Impara e pratica il Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks
{% endhint %}