Objection Tutorial
tip
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Introducci贸n
objection - Exploraci贸n M贸vil en Tiempo de Ejecuci贸n
Objection es un kit de herramientas de exploraci贸n m贸vil en tiempo de ejecuci贸n, impulsado 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 con jailbreak o root.
Nota: Esto no es alguna forma de bypass de jailbreak / root. Al usar objection
, todav铆a 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 llamar a las acciones principales que ofrece Frida. De lo contrario, el usuario necesitar谩 crear un script 煤nico para cada aplicaci贸n que desee probar.
Tutorial
Para este tutorial voy a usar el APK que puedes descargar aqu铆:
{% file src="../../../images/app-release.zip" %}
O desde su repositorio original(descargar app-release.apk)
Instalaci贸n
pip3 install objection
Conexi贸n
Haz una conexi贸n ADB regular y inicia el servidor frida en el dispositivo (y verifica que frida est茅 funcionando tanto en el cliente como en el servidor).
Si est谩s utilizando un dispositivo rooteado, es necesario seleccionar la aplicaci贸n que deseas probar dentro de la opci贸n --gadget. en este caso:
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore
Acciones B谩sicas
No se van a listar todos los comandos posibles de objections en este tutorial, solo los que he encontrado m谩s 煤tiles.
Entorno
Se podr铆a encontrar informaci贸n interesante (como contrase帽as o rutas) dentro del entorno.
env
Informaci贸n de Frida
frida
Cargar/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.
Comando Exec
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
An谩lisis est谩tico hecho din谩mico
En una aplicaci贸n real, deber铆amos conocer toda la informaci贸n descubierta en esta parte antes de usar objection gracias al an谩lisis est谩tico. De todos modos, de esta manera tal vez 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 alguna manera no puedes obtener un c贸digo fuente legible de la aplicaci贸n.
Listar actividades, receptores y servicios
android hooking list activities
android hooking list services
android hooking list receivers
Frida lanzar谩 un error si no se encuentra ninguno
Obteniendo la actividad actual
android hooking get current_activity
Buscar Clases
Comencemos a buscar clases dentro de nuestra aplicaci贸n.
android hooking search classes asvid.github.io.fridaapp
M茅todos de b煤squeda de una clase
Ahora extraigamos los m茅todos dentro de la clase MainActivity:
android hooking search methods asvid.github.io.fridaapp MainActivity
Lista de m茅todos declarados de una clase con sus par谩metros
Vamos a averiguar qu茅 par谩metros necesitan los m茅todos de la clase:
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
Listar clases
Tambi茅n podr铆as 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 enganchar el m茅todo de una clase y solo conoces el nombre de la clase. Podr铆as usar esta funci贸n para buscar qu茅 m贸dulo posee la clase y luego enganchar su m茅todo.
Enganchar es f谩cil
Enganchar (observar) un m茅todo
Del c贸digo fuente de la aplicaci贸n sabemos que la funci贸n sum() de MainActivity se est谩 ejecutando cada segundo. Intentemos volcar toda la informaci贸n posible cada vez que se llama a la funci贸n (argumentos, valor de retorno y traza de llamada):
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
Hooking (observando) una clase entera
En realidad, encuentro todos los m茅todos de la clase MainActivity realmente interesantes, as铆 que los enganchar茅 todos. Ten cuidado, esto podr铆a hacer que la aplicaci贸n se bloquee.
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
Si juegas con la aplicaci贸n mientras la clase est谩 enganchada, ver谩s cuando cada funci贸n es llamada, sus argumentos y el valor de retorno.
Cambiando el valor de retorno booleano de una funci贸n
Del 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:
Ahora, si escribes cualquier cosa en el cuadro de texto para el c贸digo PIN, ver谩s que cualquier cosa es v谩lida:
Instancias de clase
Busca e imprime instancias en vivo de una clase Java espec铆fica, especificada por un nombre de clase completamente calificado. El resultado es un intento de obtener un valor de cadena para una objeci贸n descubierta que t铆picamente contendr铆a valores de propiedad para el objeto.
android heap print_instances <class>
Keystore/Intents
Puedes jugar con 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
En la parte inferior de la lista puedes ver frida:
Verifiquemos qu茅 est谩 exportando frida:
Buscar/Escribir
Tambi茅n puedes buscar y escribir dentro de 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.
Exit
exit
Lo que me falta en Objection
- Los m茅todos de hooking a veces hacen que la aplicaci贸n se bloquee (esto tambi茅n se debe a Frida).
- No puedes usar las instancias de las clases para llamar a las funciones de la instancia. Y no puedes crear nuevas instancias de clases y usarlas para llamar a funciones.
- No hay un atajo (como el de sslpinnin) para enganchar todos los m茅todos criptogr谩ficos comunes que utiliza la aplicaci贸n para ver texto cifrado, texto plano, claves, IVs y algoritmos utilizados.