Featured image of post Frida y Jadx basico para Jetpack Compose

Frida y Jadx basico para Jetpack Compose

Presentación de ejemplos del uso de frida con Jetpack Compose - Testing Week Endava 2023

Repositorio 🦔!!!!

Seguridad mobile

La seguridad de una aplicación móvil es de suma importancia, especialmente hoy en día, cuando cualquier aplicación puede tener un “MOD APK FULL 100%” (marca no registrada). Estas modificaciones comprometen el objetivo original de las aplicaciones y los datos de los usuarios que las utilizan. Esto, al menos para mí, me hizo reflexionar sobre qué tipo de cosas se pueden hacer con una aplicación hoy en día y qué tan fácil puede llegar a ser.

Es importante mencionar que, aunque existen proyectos que buscan estandarizar el análisis, como OWASP Mobile, hoy en día considero que lo que más he visto consiste en modificaciones de apps que ofrecen a los usuarios las funcionalidades de pago o adiciones de forma “gratuita”.

La app de hoy

En base a lo anterior, junto con un muy gran gusto por los erizos 🦔 y las plantas 🌿⭐, se me ocurrió que la mejor forma de investigarlo es crear mi propia aplicación e intentar atacarla. Teniendo en cuenta para esto algunas buenas y malas prácticas, bastantes comunes, para agregar realismo.

La app se llama “My Enchanted Garden”, está compuesta de un frontend mobile creado en Kotlin y utilizando Jetpack Compose para la UI. Esta decisión de arquitectura fue tomada principalmente para reconocer algunos aspectos comunes de este framework de UI y analizar si es posible modificar su código resultante de forma sencilla.

Frontend

En cuanto al backend, decidí utilizar Rust con PostgreSQL porque me interesaba mucho este lenguaje en ese momento y me parecía una opción correcta si pensaba dedicarle tiempo y esfuerzo. No quería terminar usando JS…

Backend

La app consiste en un jardín de plantas, las cuales se pueden recolectar cada cierto tiempo para obtener monedas. Esas monedas se pueden utilizar en la tienda para comprar más plantas y así conseguir más. Además, tiene un pequeño minijuego de “ajedrez” que ofrece opciones de resultado para el juego. Obviamente, para usuarios NO-premium el juego no ofrece la opción de ganar.

Finalmente, también contiene en el perfil la opción de desbloquear logros utilizando códigos, los cuales son totalmente secretos y el usuario los conseguirá en algún momento mientras juega.

Features

En las siguientes secciones veremos más detalles, pero realmente, con suficiente trabajo, CASI cualquier cosa puede ser cambiada en el cliente; es cuestión de cuánto tiempo se tenga para analizar y probar.

Posibilidades

APK

Siguiendo con el objetivo principal, para empezar a analizar y luego modificar la aplicación primero necesitamos entender la arquitectura de un paquete de una aplicación mobile.

A grandes rasgos, este consiste en lo siguiente:

  • METE-INF:
    Certificados y firmas. A grandes rasgos, debido a estas firmas no podemos instalar un mod teniendo la aplicación original.
  • AndroidManifest.xml:
    Este archivo contiene información sobre la aplicación, sus pantallas principales, servicios, permisos y más.
  • assets:
    Son assets de la aplicación, tales como los iconos que utiliza.
  • classes.dex:
    Consiste en el código de la aplicación escrito en Java o Kotlin. Este se modifica durante la compilación para crear un formato optimizado.
  • lib:
    Aquí se encuentran las librerías que la app utiliza. En nuestro caso no habrá.
  • resources.arsc:
    Archivo de recursos compilados.
  • res:
    Directorio con recursos no compilados.

APK Internamente

Tools

Hasta ahora he usado principalmente dos herramientas para realizar el análisis y modificación, siendo estas Jadx y Frida. Aunque son bastante útiles, ambas requieren lago de experiencia para leer, entender y poder crear scripts, igualmente son muy recomendadas.

JADX

Jadx es una herramienta popular para realizar ingeniería inversa en aplicaciones Android. Nos permite descompilar archivos APK y obtener el código fuente en Java, lo cual es muy útil para analizar el comportamiento de la aplicación y buscar posibles vulnerabilidades.

Se explorará más sobre esta herramienta en otro post

JADX

Frida

Frida es una potente herramienta de instrumentación dinámica. Permite inyectar scripts en aplicaciones en tiempo de ejecución, lo que facilita el análisis y la manipulación del comportamiento de la aplicación sin necesidad de modificar el APK.

Se puede apreciar más el proceso de inyección en el script de python creado para ese propósito, además de observar el código de las modificaciones mostradas y algunas más.

Script 🦔!!!!

Se explorará más sobre esta herramienta en otro post

Frida

Reversing

A continuación, exploraremos algunos de los ejemplos diseñados y ejecutados en el repositorio.

Hedgehogs Everywhere

Imaginemos que un erizo pirata busca modificar nuestra app para poder mostrar la imagen que quiera o alterar el comportamiento del render de Jetpack Compose…

Inicialmente lo que se puede hacer para investigar el comportamiento de esta feature podemos buscar un componente que contenga lo que queremos.

Luego de un tiempo investigando en Jadx, llegamos a la screen que contiene la imagen y allí observamos que utiliza la función de painter resource.

Entonces podemos copiarla como snippet de frida, observando lo siguiente:

A partir de allí, también podemos acceder a los recursos guardados en la clase R (una clase común usada para asignarle un índice a cada recurso) y encontrar la imagen que se usará para la modificación.

A partir de eso, se puede modificar la función para siempre utilizar el mismo índice de imagen. 🦔

Con eso el atacante obtiene que en cada imagen de la app ahora se muestra su imagen de erizo.

Premium

Otro punto común es el buscar obtener funcionalidades de premium. En el siguiente flujo se puede observar un camino por el cual se puede llegar a entender cámo se maneja ese chequeo y de donde se obtiene el dato.

Para luego copiar y modificar el código de la clase de creación y editarla para utilizar siempre “Verdadero” para premium.

Al chequear la app luego de ese cambio, podemos comprobar que funciona y nuestro erizo tiene las características de premium de la app.

Otro dato divertido es que al ser premium ahora podemos ganar en los minijuegos.

Logros

A modo de finalizar con las funcionalidades básicas, otra característica que ofrece la app es el de desbloquear logros en el server con códigos que el cliente le ofrece al usuario, ya que es un juego local.

Al realizar un poco de análisis podemos encontrar una clase con los códigos de los premios y la función que se ejecuta para desbloquearlos.

A partir de eso, como se aprecia en la imagen superior, se puede crear un script que los obtenga en tiempo de ejecución y mande una respuesta al servidor para desbloquear todos.

La modificación anterior es algo bastante común y que normalmente se ofrece en la mayoría de los mods de apps.

Credenciales

Otro tipo de modificación que se puede realizar, siendo también bastante común, es modificar el componente de la aplicación encargado del logueo.

A partir de esto un atacante podría ofrecer un mod de la app y a su vez robar las credenciales o los tokens de sesión del usuario.

⭐ Gracias ⭐

Licensed under CC BY-NC-SA 4.0
Última actualización Jun 30, 2024 00:00 UTC
comments powered by Disqus
Creado con Hugo
Tema Stack diseñado por Jimmy