hacktricks/src/mobile-pentesting/xamarin-apps.md

68 lines
5.3 KiB
Markdown

# Xamarin Apps
{{#include ../banners/hacktricks-training.md}}
## **Grundinformationen**
Xamarin ist eine **Open-Source-Plattform**, die Entwicklern ermöglicht, **Apps für iOS, Android und Windows** mit den .NET- und C#-Frameworks zu erstellen. Diese Plattform bietet Zugang zu zahlreichen Tools und Erweiterungen, um moderne Anwendungen effizient zu erstellen.
### Xamarins Architektur
- Für **Android** integriert sich Xamarin mit Android- und Java-Namensräumen über .NET-Bindungen und arbeitet innerhalb der Mono-Ausführungsumgebung zusammen mit der Android Runtime (ART). Managed Callable Wrappers (MCW) und Android Callable Wrappers (ACW) erleichtern die Kommunikation zwischen Mono und ART, die beide auf dem Linux-Kernel basieren.
- Für **iOS** laufen Anwendungen unter der Mono-Laufzeit und nutzen die vollständige Ahead of Time (AOT)-Kompilierung, um C# .NET-Code in ARM-Assemblersprache zu konvertieren. Dieser Prozess läuft neben der Objective-C Runtime auf einem UNIX-ähnlichen Kernel.
### .NET-Laufzeit und Mono-Framework
Das **.NET-Framework** umfasst Assemblies, Klassen und Namensräume für die Anwendungsentwicklung, wobei die .NET-Laufzeit die Codeausführung verwaltet. Es bietet Plattformunabhängigkeit und Abwärtskompatibilität. Das **Mono-Framework** ist eine Open-Source-Version des .NET-Frameworks, die 2005 initiiert wurde, um .NET auf Linux zu erweitern, und wird jetzt von Microsoft unterstützt und von Xamarin geleitet.
### Reverse Engineering von Xamarin-Apps
#### Dekompilierung von Xamarin-Assemblies
Die Dekompilierung verwandelt kompilierten Code zurück in Quellcode. In Windows kann das Module-Fenster in Visual Studio Module zur Dekompilierung identifizieren, was direkten Zugriff auf Drittanbieter-Code und die Extraktion von Quellcode zur Analyse ermöglicht.
#### JIT vs AOT-Kompilierung
- **Android** unterstützt Just-In-Time (JIT) und Ahead-Of-Time (AOT)-Kompilierung, mit einem Hybrid-AOT-Modus für optimale Ausführungsgeschwindigkeit. Vollständige AOT ist exklusiv für Enterprise-Lizenzen.
- **iOS** verwendet ausschließlich AOT-Kompilierung aufgrund von Apples Einschränkungen bei der dynamischen Codeausführung.
### Extrahieren von dll-Dateien aus APK/IPA
Um auf die Assemblies in einer APK/IPA zuzugreifen, entpacken Sie die Datei und erkunden das Assemblies-Verzeichnis. Für Android können Tools wie [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) und [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress) dll-Dateien dekomprimieren.
```bash
python3 xamarin-decompress.py -o /path/to/decompressed/apk
```
In Fällen, in denen nach dem Decompilieren der APK der unbekannte/assemblies/-Ordner mit den `.dll`-Dateien darin sichtbar ist, ist es möglich, [**dnSpy**](https://github.com/dnSpy/dnSpy) direkt über die `.dlls` zu verwenden, um sie zu analysieren.\
Manchmal findet man jedoch die `assemblies.blob`- und `assemblies.manifest`-Dateien im unbekannten/assemblies/-Ordner. Das Tool [pyxamstore](https://github.com/jakev/pyxamstore) kann verwendet werden, um die `assemblies.blob`-Datei in Xamarin-Apps zu entpacken, was den Zugriff auf die .NET-Assemblies für eine weitere Analyse ermöglicht:
```bash
pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
```
iOS dll-Dateien sind leicht zugänglich für die Dekompilierung, was erhebliche Teile des Anwendungscodes offenbart, der oft eine gemeinsame Basis über verschiedene Plattformen hinweg teilt.
### Statische Analyse
Sobald die `.dll`s erhalten sind, ist es möglich, den .Net-Code statisch mit Tools wie [**dnSpy**](https://github.com/dnSpy/dnSpy) **oder** [**ILSpy**](https://github.com/icsharpcode/ILSpy) **zu analysieren**, die es ermöglichen, den Code der App zu modifizieren. Dies kann sehr nützlich sein, um die Anwendung zu manipulieren, um beispielsweise Schutzmaßnahmen zu umgehen.\
Beachten Sie, dass Sie die App nach der Modifikation erneut packen und erneut signieren müssen.
### Dynamische Analyse
Die dynamische Analyse umfasst die Überprüfung auf SSL-Pinning und die Verwendung von Tools wie [Fridax](https://github.com/NorthwaveSecurity/fridax) für Laufzeitmodifikationen der .NET-Binärdatei in Xamarin-Apps. Frida-Skripte sind verfügbar, um die Root-Erkennung oder das SSL-Pinning zu umgehen und die Analysefähigkeiten zu verbessern.
Weitere interessante Frida-Skripte:
- [**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)
### Neu-Signierung
Das Tool [Uber APK Signer](https://github.com/patrickfav/uber-apk-signer) vereinfacht das Signieren mehrerer APKs mit demselben Schlüssel und kann verwendet werden, um eine App nach Änderungen erneut zu signieren.
## Weitere Informationen
- [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}}