Objection Tutorial
Reading time: 8 minutes
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Introduction
objection - Erkundung mobiler Anwendungen zur Laufzeit
Objection is a runtime mobile exploration toolkit, powered by Frida. It wurde entwickelt, um bei der Bewertung mobiler Anwendungen und ihrer Sicherheitslage zu helfen, ohne dass ein jailbroken oder gerootetes Gerät erforderlich ist.
Hinweis: Dies ist keine Art von Jailbreak-/Root-Bypass. Durch die Verwendung von objection bist du weiterhin durch alle Beschränkungen begrenzt, die vom jeweiligen Sandbox-Modell auferlegt werden.
Zusammenfassung
Das Ziel von objection ist es, dem Benutzer die Hauptaktionen, die Frida anbietet, aufzurufen. Andernfalls müsste der Benutzer ein einzelnes Script für jede Anwendung erstellen, die er testen möchte.
Tutorial
Für dieses Tutorial werde ich das APK verwenden, das du hier herunterladen kannst:
Oder aus dem original repository (download app-release.apk)
Installation
pip3 install objection
Connection
Stelle eine normale ADB-Verbindung her und starte den frida-Server auf dem Gerät (und prüfe, dass frida sowohl auf dem Client als auch auf dem Server funktioniert).
Wenn du ein rooted device verwendest, musst du die Anwendung auswählen, die du testen möchtest, in der Option --gadget. In diesem Fall:
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore
Grundlegende Aktionen
Nicht alle möglichen Befehle von objections werden in diesem Tutorial aufgeführt — nur jene, die ich als nützlicher empfunden habe.
Umgebung
Einige interessante Informationen (wie passwords oder paths) können in der Umgebung gefunden werden.
env
.png)
Frida-Informationen
frida
.png)
Hochladen/Herunterladen
file download <remote path> [<local path>]
file upload <local path> [<remote path>]
frida-Skript importieren
import <local path frida-script>
SSLPinning
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
Root-Erkennung
android root disable #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.
Exec Command
android shell_exec whoami
Bildschirmfotos
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false #This may enable you to take screenshots using the hardware keys
Static analysis made Dynamic
In einer realen Anwendung sollten wir dank static analysis alle Informationen aus diesem Abschnitt kennen, bevor wir objection verwenden. Trotzdem kannst du auf diese Weise vielleicht etwas Neues entdecken, da du hier nur eine vollständige Liste von Klassen, Methoden und exportierten Objekten erhältst.
Das ist auch nützlich, falls du aus irgendeinem Grund keinen lesbaren Quellcode der App erhalten kannst.
Aktivitäten, Receiver und Services auflisten
android hooking list activities
.png)
android hooking list services
android hooking list receivers
Frida wird einen Fehler auslösen, wenn keine gefunden wird
Aktuelle Activity abrufen
android hooking get current_activity
.png)
Klassen durchsuchen
Fangen wir an, nach Klassen in unserer Anwendung zu suchen.
android hooking search classes asvid.github.io.fridaapp
.png)
Methoden einer Klasse suchen
Jetzt extrahieren wir die Methoden innerhalb der Klasse MainActivity:
android hooking search methods asvid.github.io.fridaapp MainActivity
.png)
Auflisten deklarierter Methoden einer Klasse mit ihren Parametern
Schauen wir uns an, welche Parameter die Methoden der Klasse benötigen:
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
.png)
Klassen auflisten
Man kann auch alle Klassen auflisten, die in der aktuellen Anwendung geladen wurden:
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
Das ist sehr nützlich, wenn du die method of a class hooken möchtest und nur den Namen der class kennst. Du kannst diese Funktion verwenden, um zu ermitteln, welches module die class besitzt und dann die method zu hooken.
Hooking ist einfach
Hooking (watching) a method
Aus dem source code der Anwendung wissen wir, dass die function sum() from MainActivity jede Sekunde ausgeführt wird. Versuchen wir, bei jedem Aufruf der Funktion alle möglichen Informationen zu dumpen (arguments, return value and backtrace):
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
.png)
Hooking (watching) einer gesamten Klasse
Eigentlich finde ich alle Methoden der Klasse MainActivity wirklich interessant, lass uns hook them all. Sei vorsichtig, das könnte eine Anwendung abstürzen.
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
Wenn du mit der Anwendung interagierst, während die Klasse gehookt ist, siehst du, wann jede Funktion aufgerufen wird, ihre Argumente und den Rückgabewert.
.png)
Ändern des boolean-Rückgabewerts einer Funktion
Aus dem Quellcode kannst du sehen, dass die Funktion checkPin ein String als Argument erhält und einen boolean zurückgibt. Lass uns die Funktion so ändern, dass sie immer true zurückgibt:
.png)
Wenn du jetzt beliebigen Text in das Textfeld für den PIN eingibst, siehst du, dass alles gültig ist:
.png)
Klasseninstanzen
Suche nach und gib lebende Instanzen einer bestimmten Java-Klasse aus, angegeben durch einen vollqualifizierten Klassennamen. Folgendes ist das Ergebnis eines Versuchs, einen String-Wert für ein entdecktes Objekt zu erhalten, das typischerweise Eigenschaftswerte des Objekts enthält.
android heap print_instances <class>
.png)
Keystore/Intents
Sie können mit dem keystore und intents wie folgt arbeiten:
android keystore list
android intents launch_activity
android intent launch_service
Speicher
Dump
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part
Liste
memory list modules
.png)
Am unteren Ende der Liste siehst du frida:
.png)
Lass uns prüfen, was frida exportiert:
.png)
Suchen/Schreiben
Du kannst mit objection auch im Speicher suchen und schreiben:
memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)
SQLite
Sie können den Befehl sqlite verwenden, um mit sqlite-Datenbanken zu interagieren.
Beenden
exit
Was mir in Objection fehlt
- Die hooking-Methoden bringen die Anwendung manchmal zum Absturz (das liegt auch an Frida).
- Man kann vorhandene Instanzen von Klassen nicht verwenden, um deren Methoden aufzurufen, und man kann auch keine neuen Instanzen erstellen, um Methoden aufzurufen.
- Es gibt keine Abkürzung (wie die für sslpinnin), um alle gängigen crypto-Methoden, die von der Anwendung verwendet werden, zu hooken, um verschlüsselten Text, Klartext, Schlüssel, IVs und die verwendeten Algorithmen zu sehen.
Referenzen
tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks