Exploiting a debuggeable application
Ausnutzen einer debuggebaren Anwendung
Umgehen von Root- und Debugging-Überprüfungen
Dieser Abschnitt des Beitrags ist eine Zusammenfassung des Beitrags https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Schritte, um eine Android-App debuggebar zu machen und Überprüfungen zu umgehen
Die App debuggebar machen
Inhalt basiert auf https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
APK dekompilieren:
Verwenden Sie das APK-GUI-Tool zum Dekompilieren der APK.
Fügen Sie in der android-manifest-Datei
android:debuggable=true
hinzu, um den Debugging-Modus zu aktivieren.Kompilieren Sie die modifizierte Anwendung neu, signieren Sie sie und zipalignen Sie sie.
Die modifizierte Anwendung installieren:
Verwenden Sie den Befehl:
adb install <application_name>
.
Den Paketnamen abrufen:
Führen Sie
adb shell pm list packages –3
aus, um Drittanbieteranwendungen aufzulisten und den Paketnamen zu finden.
Die App so einstellen, dass sie auf eine Debugger-Verbindung wartet:
Befehl:
adb shell am setup-debug-app –w <package_name>
.Hinweis: Dieser Befehl muss jedes Mal ausgeführt werden, bevor die Anwendung gestartet wird, um sicherzustellen, dass sie auf den Debugger wartet.
Für Persistenz verwenden Sie
adb shell am setup-debug-app –w -–persistent <package_name>
.Um alle Flags zu entfernen, verwenden Sie
adb shell am clear-debug-app <package_name>
.
Für das Debugging in Android Studio vorbereiten:
Navigieren Sie in Android Studio zu Datei -> Profil oder APK öffnen.
Öffnen Sie die neu kompilierte APK.
Breakpoints in wichtigen Java-Dateien setzen:
Setzen Sie Breakpoints in
MainActivity.java
(insbesondere in deronCreate
-Methode),b.java
undContextWrapper.java
.
Überprüfungen umgehen
Die Anwendung wird an bestimmten Punkten überprüfen, ob sie debuggebar ist, und auch nach Binärdateien suchen, die auf ein gerootetes Gerät hinweisen. Der Debugger kann verwendet werden, um Anwendungsinformationen zu ändern, das debuggebare Bit zurückzusetzen und die Namen der gesuchten Binärdateien zu ändern, um diese Überprüfungen zu umgehen.
Für die debuggebare Überprüfung:
Flag-Einstellungen ändern:
Navigieren Sie im Variablenbereich der Debugger-Konsole zu:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
.Hinweis: Die binäre Darstellung von
flags = 814267974
ist11000011100111011110
, was darauf hinweist, dass das "Flag_debuggable" aktiv ist.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A1400%2F1*-ckiSbWGSoc1beuxxpKbow.png&width=768&dpr=4&quality=100&sign=f015bdd2&sv=1)
Diese Schritte stellen gemeinsam sicher, dass die Anwendung debugged werden kann und dass bestimmte Sicherheitsüberprüfungen mithilfe des Debuggers umgangen werden können, was eine eingehendere Analyse oder Modifikation des Verhaltens der Anwendung ermöglicht.
Schritt 2 beinhaltet das Ändern eines Flag-Werts auf 814267972, der binär als 110000101101000000100010100 dargestellt wird.
Eine Schwachstelle ausnutzen
Eine Demonstration wurde mit einer verwundbaren Anwendung bereitgestellt, die einen Button und ein Textfeld enthält. Zunächst zeigt die Anwendung "Crack Me" an. Ziel ist es, die Nachricht von "Try Again" zu "Hacked" zur Laufzeit zu ändern, ohne den Quellcode zu modifizieren.
Überprüfung auf Schwachstellen
Die Anwendung wurde mit
apktool
dekompiliert, um auf dieAndroidManifest.xml
-Datei zuzugreifen.Das Vorhandensein von
android_debuggable="true"
in der AndroidManifest.xml zeigt an, dass die Anwendung debuggebar und anfällig für Ausnutzung ist.Es ist erwähnenswert, dass
apktool
ausschließlich verwendet wird, um den debuggebaren Status zu überprüfen, ohne den Code zu ändern.
Vorbereitung des Setups
Der Prozess umfasste das Starten eines Emulators, das Installieren der verwundbaren Anwendung und die Verwendung von
adb jdwp
, um die Dalvik-VM-Ports zu identifizieren, die lauschen.Das JDWP (Java Debug Wire Protocol) ermöglicht das Debuggen einer Anwendung, die in einer VM läuft, indem ein einzigartiger Port bereitgestellt wird.
Portweiterleitung war notwendig für das Remote-Debugging, gefolgt von der Anbindung von JDB an die Zielanwendung.
Code zur Laufzeit injizieren
Die Ausnutzung wurde durch das Setzen von Breakpoints und das Steuern des Anwendungsflusses durchgeführt.
Befehle wie
classes
undmethods <class_name>
wurden verwendet, um die Struktur der Anwendung aufzudecken.Ein Breakpoint wurde in der
onClick
-Methode gesetzt, und ihre Ausführung wurde kontrolliert.Die Befehle
locals
,next
undset
wurden verwendet, um lokale Variablen zu inspizieren und zu ändern, insbesondere um die Nachricht "Try Again" in "Hacked" zu ändern.Der modifizierte Code wurde mit dem Befehl
run
ausgeführt, wodurch die Ausgabe der Anwendung in Echtzeit erfolgreich geändert wurde.
Dieses Beispiel demonstrierte, wie das Verhalten einer debuggebaren Anwendung manipuliert werden kann, was das Potenzial für komplexere Ausnutzungen wie den Zugriff auf die Shell des Geräts im Kontext der Anwendung hervorhebt.
Referenzen
Last updated