Exploiting a debuggeable application

Explotando una aplicación con modo de depuración

Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (Experto en Equipos Rojos de HackTricks AWS)!

Otras formas de apoyar a HackTricks:

Saltando las verificaciones de root y modo de depuración

Esta sección del post es un resumen del post https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

Pasos para hacer una aplicación de Android depurable y saltar las verificaciones

Haciendo la aplicación depurable

Contenido basado en https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

  1. Descompilar el APK:

  • Utiliza la herramienta APK-GUI para descompilar el APK.

  • En el archivo android-manifest, inserta android:debuggable=true para habilitar el modo de depuración.

  • Recompila, firma y alinea el APK modificado.

  1. Instalar la Aplicación Modificada:

  • Usa el comando: adb install <nombre_aplicación>.

  1. Recuperar el Nombre del Paquete:

  • Ejecuta adb shell pm list packages –3 para listar las aplicaciones de terceros y encontrar el nombre del paquete.

  1. Configurar la Aplicación para Esperar la Conexión del Depurador:

  • Comando: adb shell am setup-debug-app –w <nombre_paquete>.

  • Nota: Este comando debe ejecutarse cada vez antes de iniciar la aplicación para asegurarse de que espere al depurador.

  • Para persistencia, usa adb shell am setup-debug-app –w -–persistent <nombre_paquete>.

  • Para eliminar todas las banderas, usa adb shell am clear-debug-app <nombre_paquete>.

  1. Prepararse para la Depuración en Android Studio:

  • Navega en Android Studio a Archivo -> Abrir Perfil o APK.

  • Abre el APK recompilado.

  1. Establecer Puntos de Interrupción en Archivos Java Clave:

  • Coloca puntos de interrupción en MainActivity.java (específicamente en el método onCreate), b.java y ContextWrapper.java.

Saltando las Verificaciones

La aplicación, en ciertos puntos, verificará si es depurable y también comprobará la presencia de binarios que indiquen un dispositivo rooteado. El depurador se puede utilizar para modificar la información de la aplicación, desactivar el bit depurable y alterar los nombres de los binarios buscados para saltar estas verificaciones.

Para la verificación de depuración:

  1. Modificar la Configuración de la Bandera:

  • En la sección de variables de la consola del depurador, navega a: this mLoadedAPK -> mApplicationInfo -> flags = 814267974.

  • Nota: La representación binaria de flags = 814267974 es 11000011100111011110, lo que indica que la "Flag_debuggable" está activa.

https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png

Estos pasos aseguran colectivamente que la aplicación pueda ser depurada y que ciertas verificaciones de seguridad puedan ser saltadas utilizando el depurador, facilitando un análisis o modificación más profundo del comportamiento de la aplicación.

El paso 2 implica cambiar un valor de bandera a 814267972, que se representa en binario como 110000101101000000100010100.

Explotando una Vulnerabilidad

Se proporcionó una demostración utilizando una aplicación vulnerable que contiene un botón y un textview. Inicialmente, la aplicación muestra "Crack Me". El objetivo es alterar el mensaje de "Try Again" a "Hacked" en tiempo de ejecución, sin modificar el código fuente.

Comprobando la Vulnerabilidad

  • La aplicación fue descompilada usando apktool para acceder al archivo AndroidManifest.xml.

  • La presencia de android_debuggable="true" en AndroidManifest.xml indica que la aplicación es depurable y susceptible a explotación.

  • Vale la pena mencionar que apktool se emplea únicamente para verificar el estado depurable sin alterar ningún código.

Preparando la Configuración

  • El proceso implicó iniciar un emulador, instalar la aplicación vulnerable y usar adb jdwp para identificar los puertos de Dalvik VM que están escuchando.

  • El JDWP (Java Debug Wire Protocol) permite la depuración de una aplicación en ejecución en una VM al exponer un puerto único.

  • Fue necesario el reenvío de puertos para la depuración remota, seguido de la conexión de JDB a la aplicación objetivo.

Inyectando Código en Tiempo de Ejecución

  • La explotación se llevó a cabo estableciendo puntos de interrupción y controlando el flujo de la aplicación.

  • Se utilizaron comandos como classes y methods <nombre_clase> para descubrir la estructura de la aplicación.

  • Se estableció un punto de interrupción en el método onClick, y se controló su ejecución.

  • Se utilizaron los comandos locals, next y set para inspeccionar y modificar variables locales, cambiando especialmente el mensaje de "Try Again" a "Hacked".

  • El código modificado se ejecutó utilizando el comando run, alterando con éxito la salida de la aplicación en tiempo real.

Este ejemplo demostró cómo se puede manipular el comportamiento de una aplicación depurable, destacando el potencial para exploits más complejos como obtener acceso a la shell en el dispositivo en el contexto de la aplicación.

Referencias

Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (Experto en Equipos Rojos de HackTricks AWS)!

Otras formas de apoyar a HackTricks:

Última actualización