hacktricks/mobile-pentesting/xamarin-apps.md

7.5 KiB

Xamarin Apps

{% hint style="success" %} Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

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 über .NET-Bindungen mit Android- und Java-Namensräumen 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 zusammen mit der Objective-C-Laufzeit 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, 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 ausschließlich 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 und xamarin-decompress dll-Dateien dekomprimieren.

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

In Fällen, in denen nach dem Decompilieren der APK der unbekannt/assemblies/-Ordner mit den .dll-Dateien darin sichtbar ist, ist es möglich, dnSpy direkt über die .dlls zu verwenden, um sie zu analysieren.
Manchmal findet man jedoch die assemblies.blob- und assemblies.manifest-Dateien im unbekannt/assemblies/-Ordner. Das Tool 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:

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 .dlls erhalten sind, ist es möglich, den .Net-Code statisch mit Tools wie dnSpy oder 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 für Laufzeitmodifikationen der .NET-Binärdatei in Xamarin-Apps. Frida-Skripte sind verfügbar, um Root-Erkennung oder SSL-Pinning zu umgehen und die Analysefähigkeiten zu verbessern.

Weitere interessante Frida-Skripte:

Neu-Signierung

Das Tool 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

{% hint style="success" %} Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks
{% endhint %}