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