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

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

bash
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:

bash
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.

bash
env

Frida-Informationen

bash
frida

Hochladen/Herunterladen

bash
file download <remote path> [<local path>]
file upload <local path> [<remote path>]

frida-Skript importieren

bash
import <local path frida-script>

SSLPinning

bash
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.

Root-Erkennung

bash
android root disable  #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.

Exec Command

bash
android shell_exec whoami

Bildschirmfotos

bash
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

bash
android hooking list activities

bash
android hooking list services
android hooking list receivers

Frida wird einen Fehler auslösen, wenn keine gefunden wird

Aktuelle Activity abrufen

bash
android hooking get current_activity

Klassen durchsuchen

Fangen wir an, nach Klassen in unserer Anwendung zu suchen.

bash
android hooking search classes asvid.github.io.fridaapp

Methoden einer Klasse suchen

Jetzt extrahieren wir die Methoden innerhalb der Klasse MainActivity:

bash
android hooking search methods asvid.github.io.fridaapp MainActivity

Auflisten deklarierter Methoden einer Klasse mit ihren Parametern

Schauen wir uns an, welche Parameter die Methoden der Klasse benötigen:

bash
android hooking list class_methods asvid.github.io.fridaapp.MainActivity

Klassen auflisten

Man kann auch alle Klassen auflisten, die in der aktuellen Anwendung geladen wurden:

bash
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):

bash
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return

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.

bash
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.

Ä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:

Wenn du jetzt beliebigen Text in das Textfeld für den PIN eingibst, siehst du, dass alles gültig ist:

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>

Keystore/Intents

Sie können mit dem keystore und intents wie folgt arbeiten:

bash
android keystore list
android intents launch_activity
android intent launch_service

Speicher

Dump

bash
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part

Liste

bash
memory list modules

Am unteren Ende der Liste siehst du frida:

Lass uns prüfen, was frida exportiert:

Suchen/Schreiben

Du kannst mit objection auch im Speicher suchen und schreiben:

bash
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

bash
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