mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
68 lines
5.2 KiB
Markdown
68 lines
5.2 KiB
Markdown
# 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}}
|