Exploiting a debuggeable application
Explotando una aplicación con modo de depuración
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
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.
Instalar la Aplicación Modificada:
Usa el comando:
adb install <nombre_aplicación>
.
Recuperar el Nombre del Paquete:
Ejecuta
adb shell pm list packages –3
para listar las aplicaciones de terceros y encontrar el nombre del paquete.
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>
.
Prepararse para la Depuración en Android Studio:
Navega en Android Studio a Archivo -> Abrir Perfil o APK.
Abre el APK recompilado.
Establecer Puntos de Interrupción en Archivos Java Clave:
Coloca puntos de interrupción en
MainActivity.java
(específicamente en el métodoonCreate
),b.java
yContextWrapper.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:
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
es11000011100111011110
, lo que indica que la "Flag_debuggable" está activa.
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 archivoAndroidManifest.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
ymethods <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
yset
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
Última actualización