Objection Tutorial
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripci贸n!
- 脷nete al 馃挰 grupo de Discord o al grupo de telegram o s铆guenos en Twitter 馃惁 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Introducci贸n
objection - Exploraci贸n m贸vil en tiempo de ejecuci贸n
Objection es un conjunto de herramientas para exploraci贸n m贸vil en tiempo de ejecuci贸n, potenciado por Frida. Fue creado con el objetivo de ayudar a evaluar aplicaciones m贸viles y su postura de seguridad sin la necesidad de un dispositivo m贸vil jailbroken o rooted.
Nota: Esto no es una forma de jailbreak / root bypass. Al usar objection, a煤n est谩s limitado por todas las restricciones impuestas por el sandbox aplicable al que te enfrentas.
Resumen
El objetivo de objection es permitir al usuario invocar las principales acciones que ofrece Frida. De lo contrario, el usuario tendr谩 que crear un script 煤nico para cada aplicaci贸n que quiera probar.
Tutorial
Para este tutorial voy a usar el APK que puedes descargar aqu铆:
O desde su original repository (descargar app-release.apk)
Instalaci贸n
pip3 install objection
Conexi贸n
Haz una conexi贸n ADB regular y inicia el frida server en el dispositivo (y comprueba que frida est谩 funcionando tanto en el cliente como en el server).
Si est谩s usando un rooted device es necesario seleccionar la aplicaci贸n que quieres probar dentro de la opci贸n 鈥揼adget. en este caso:
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore
Acciones b谩sicas
No todos los comandos posibles de objections ser谩n listados en este tutorial; solo aquellos que he encontrado m谩s 煤tiles.
Entorno
Puede haber informaci贸n interesante (como passwords o paths) dentro del entorno.
env
.png)
Informaci贸n de Frida
frida
.png)
Subir/Descargar
file download <remote path> [<local path>]
file upload <local path> [<remote path>]
Importar script de frida
import <local path frida-script>
SSLPinning
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
Detecci贸n de root
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
Capturas de pantalla
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
En una aplicaci贸n real deber铆amos conocer toda la informaci贸n descubierta en esta parte antes de usar objection gracias al static analysis. De todas formas, as铆 quiz谩 puedas ver algo nuevo, ya que aqu铆 solo tendr谩s una lista completa de clases, m茅todos y objetos exportados.
Esto tambi茅n es 煤til si de alg煤n modo eres incapaz de obtener c贸digo fuente legible de la app.
List activities, receivers and services
android hooking list activities
.png)
android hooking list services
android hooking list receivers
Frida lanzar谩 un error si no se encuentra ninguna
Obteniendo la actividad actual
android hooking get current_activity
.png)
Buscar clases
Empecemos a buscar clases dentro de nuestra aplicaci贸n
android hooking search classes asvid.github.io.fridaapp
.png)
Buscar m茅todos de una clase
Ahora extraigamos los m茅todos dentro de la clase MainActivity:
android hooking search methods asvid.github.io.fridaapp MainActivity
.png)
Listar Methods declarados de una clase con sus parameters
Veamos qu茅 parameters necesitan los methods de la clase:
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
.png)
Listar clases
Tambi茅n puedes listar todas las clases que se cargaron dentro de la aplicaci贸n actual:
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
Esto es muy 煤til si quieres hacer hook al m茅todo de una clase y solo conoces el nombre de la clase. Puedes usar esta funci贸n para buscar qu茅 m贸dulo posee la clase y luego hacer hook a su m茅todo.
Hooking being easy
Hooking (watching) a method
From the source code of the application we know that the funci贸n sum() de MainActivity se ejecuta cada segundo. Intentemos volcar toda la informaci贸n posible cada vez que se llama la funci贸n (argumentos, valor de retorno y backtrace):
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
.png)
Hooking (watching) an entire class
En realidad, encuentro todos los m茅todos de la clase MainActivity realmente interesantes, vamos a hook them all. Ten cuidado, esto podr铆a crash una aplicaci贸n.
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
Si interact煤as con la aplicaci贸n mientras la clase est谩 hooked ver谩s cu谩ndo cada funci贸n es invocada, sus argumentos y el valor de retorno.
.png)
Changing boolean return value of a function
Desde el c贸digo fuente puedes ver que la funci贸n checkPin recibe un String como argumento y devuelve un boolean. Hagamos que la funci贸n siempre devuelva true:
.png)
Ahora, si escribes cualquier cosa en el campo de texto para el c贸digo PIN ver谩s que cualquier cosa es v谩lida:
.png)
Instancias de clase
Busca e imprime instancias en vivo de una clase Java espec铆fica, especificada por un nombre de clase completamente calificado. Out es el resultado de un intento de obtener un valor de cadena para una objection descubierta que t铆picamente contendr铆a los valores de las propiedades del objeto.
android heap print_instances <class>
.png)
Keystore/Intents
Puedes manipular el keystore y los intents usando:
android keystore list
android intents launch_activity
android intent launch_service
Memoria
Volcado
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part
Lista
memory list modules
.png)
En la parte inferior de la lista puedes ver frida:
.png)
Veamos qu茅 est谩 exportando frida:
.png)
Buscar/Escribir
Tambi茅n puedes buscar y escribir en la 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
Puedes usar el comando sqlite para interactuar con bases de datos sqlite.
Salir
exit
Lo que echo de menos en Objection
- Los m茅todos de hooking a veces hacen que la aplicaci贸n se bloquee (esto tambi茅n es por Frida).
- No puedes usar las instances de las classes para llamar funciones de la instance. Y no puedes crear nuevas instances de classes y usarlas para llamar funciones.
- No existe un atajo (como el de sslpinnin) para hook todos los m茅todos crypto comunes que utiliza la aplicaci贸n para ver texto cifrado, texto plano, keys, IVs y algoritmos usados.
Referencias
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripci贸n!
- 脷nete al 馃挰 grupo de Discord o al grupo de telegram o s铆guenos en Twitter 馃惁 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
HackTricks

