8.0 KiB
Objection Tutorial
{{#include ../../../banners/hacktricks-training.md}}
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 enumerarán todos los comandos posibles de objections en este tutorial, solo los que he encontrado más útiles.
Entorno
Se puede 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 extraer 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 activas 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.
{{#include ../../../banners/hacktricks-training.md}}














