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

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 –gadget. 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

Información de Frida

frida

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

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

Buscar clases

Empecemos a buscar clases dentro de nuestra aplicación

android hooking search classes asvid.github.io.fridaapp

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

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

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

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.

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:

Ahora, si escribes cualquier cosa en el campo 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. 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>

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

En la parte inferior de la lista puedes ver frida:

Veamos qué está exportando frida:

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