hacktricks/mobile-pentesting/xamarin-apps.md

93 lines
7.3 KiB
Markdown

# Xamarin Apps
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% 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](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
```
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**](https://github.com/dnSpy/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](https://github.com/jakev/pyxamstore) può essere utilizzato per estrarre il file `assemblies.blob` nelle app Xamarin, consentendo l'accesso alle 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 in modo statico 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)
### Ri-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 ri-firmare 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)
{% hint style="success" %}
Impara e pratica il Hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Impara e pratica il Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Supporta HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
</details>
{% endhint %}