Tutorial di Objection
Reading time: 8 minutes
tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Introduzione
objection - Esplorazione Mobile a Runtime
Objection è un toolkit per l'esplorazione mobile a runtime, alimentato da Frida. È stato sviluppato con l'obiettivo di aiutare a valutare le applicazioni mobile e la loro postura di sicurezza senza la necessità di un dispositivo mobile jailbroken o rooted.
Nota: Questo non è una forma di jailbreak / root bypass. Usando objection, sei comunque limitato da tutte le restrizioni imposte dal sandbox applicabile che stai affrontando.
Riepilogo
L'obiettivo di objection è permettere all'utente di chiamare le principali azioni offerte da Frida. Altrimenti, l'utente dovrà creare uno script separato per ogni applicazione che desidera testare.
Tutorial
Per questo tutorial userò l'APK che puoi scaricare qui:
Oppure dal suo original repository (download app-release.apk)
Installazione
pip3 install objection
Connessione
Fai una connessione ADB regolare e avvia il server frida sul dispositivo (e verifica che frida funzioni sia sul client che sul server).
Se stai usando un rooted device è necessario selezionare l'applicazione che vuoi testare nell'opzione --gadget. In questo caso:
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore
Azioni di base
Non tutti i comandi possibili di objections saranno elencati in questo tutorial; solo quelli che ho trovato più utili.
Ambiente
Alcune informazioni interessanti (come passwords o paths) possono essere trovate all'interno dell'ambiente.
env
.png)
Informazioni su Frida
frida
.png)
Caricamento/Scaricamento
file download <remote path> [<local path>]
file upload <local path> [<remote path>]
Importare lo script frida
import <local path frida-script>
SSLPinning
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
Rilevamento root
android root disable #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.
Comando Exec
android shell_exec whoami
Schermate
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false #This may enable you to take screenshots using the hardware keys
Static analysis resa dinamica
In un'applicazione reale dovremmo conoscere tutte le informazioni scoperte in questa parte prima di usare objection grazie alla static analysis. Comunque, in questo modo potresti vedere qualcosa di nuovo, dato che qui avrai solo un elenco completo di classi, metodi e oggetti esportati.
Questo è inoltre utile se, in qualche modo, non riesci a ottenere del codice sorgente leggibile dell'app.
Elenca attività, ricevitori e servizi
android hooking list activities
.png)
android hooking list services
android hooking list receivers
Frida mostrerà un errore se non ne viene trovata alcuna
Ottenere l'attività corrente
android hooking get current_activity
.png)
Cerca classi
Iniziamo a cercare le classi all'interno della nostra applicazione
android hooking search classes asvid.github.io.fridaapp
.png)
Ricerca dei metodi di una classe
Ora estraiamo i metodi all'interno della classe MainActivity:
android hooking search methods asvid.github.io.fridaapp MainActivity
.png)
Elenca i metodi dichiarati di una classe con i loro parametri
Scopriamo quali parametri richiedono i metodi della classe:
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
.png)
Elenca le classi
È inoltre possibile elencare tutte le classi caricate nell'applicazione corrente:
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
Questo è molto utile se vuoi hook the method of a class and you only know the name of the class. Puoi usare questa funzione per cercare quale modulo possiede la classe e poi hookarne il metodo.
Hooking è semplice
Hooking (watching) un metodo
Dal codice sorgente dell'applicazione sappiamo che la funzione sum() di MainActivity viene eseguita ogni secondo. Proviamo a dump all possible information ogni volta che la funzione viene chiamata (argomenti, valore di ritorno e backtrace):
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
.png)
Hooking (watching) un'intera classe
In realtà trovo tutti i metodi della classe MainActivity davvero interessanti, quindi hook them all. Fai attenzione, questo potrebbe crash un'applicazione.
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
Se interagisci con l'applicazione mentre la classe è hooked vedrai quando ogni funzione viene chiamata, i suoi argomenti e il valore di ritorno.
.png)
Cambiare il valore di ritorno booleano di una funzione
Dal codice sorgente puoi vedere che la funzione checkPin riceve una String come argomento e restituisce un boolean. Facciamo in modo che la funzione ritorni sempre true:
.png)
Ora, se scrivi qualsiasi cosa nella casella per il codice PIN vedrai che qualsiasi valore è valido:
.png)
Istanze di classi
Cerca e stampa le istanze live di una specifica classe Java, specificata tramite nome di classe completamente qualificato. Out è il risultato di un tentativo di ottenere un valore stringa per un oggetto scoperto da objection che tipicamente conterrà i valori delle proprietà dell'oggetto.
android heap print_instances <class>
.png)
Keystore/Intents
Puoi interagire con il keystore e gli intents usando:
android keystore list
android intents launch_activity
android intent launch_service
Memoria
Dump
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part
Elenco
memory list modules
.png)
In fondo alla lista puoi vedere frida:
.png)
Vediamo cosa esporta frida:
.png)
Ricerca/Scrittura
Puoi anche cercare e scrivere nella memoria con objection:
memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)
SQLite
Puoi usare il comando sqlite per interagire con i database SQLite.
Uscita
exit
Cosa mi manca in Objection
- I metodi di hooking a volte fanno crashare l'applicazione (questo è anche dovuto a Frida).
- Non puoi usare le istanze delle classi per chiamare le funzioni dell'istanza. E non puoi creare nuove istanze di classi e usarle per chiamare funzioni.
- Non esiste una scorciatoia (come quella per sslpinnin) per fare hook a tutti i comuni crypto methods usati dall'applicazione per vedere cyphered text, plain text, keys, IVs e algorithms usati.
Riferimenti
tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks