mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
92 lines
5.8 KiB
Markdown
92 lines
5.8 KiB
Markdown
# Explotando una aplicación depurable
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
# **Evitando verificaciones de root y depurabilidad**
|
||
|
||
Esta sección de la publicación es un resumen de la publicación [**https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0**](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0)
|
||
|
||
## Pasos para hacer que una aplicación de Android sea depurable y evitar 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.
|
||
- Vuelve a compilar, firmar y zipalign la aplicación modificada.
|
||
|
||
2. **Instalar la aplicación modificada:**
|
||
|
||
- Usa el comando: `adb install <application_name>`.
|
||
|
||
3. **Recuperar el nombre del paquete:**
|
||
|
||
- Ejecuta `adb shell pm list packages –3` para listar aplicaciones de terceros y encontrar el nombre del paquete.
|
||
|
||
4. **Configurar la aplicación para esperar la conexión del depurador:**
|
||
|
||
- Comando: `adb shell am setup-debug-app –w <package_name>`.
|
||
- **Nota:** Este comando debe ejecutarse cada vez antes de iniciar la aplicación para asegurarse de que espera al depurador.
|
||
- Para persistencia, usa `adb shell am setup-debug-app –w -–persistent <package_name>`.
|
||
- Para eliminar todas las banderas, usa `adb shell am clear-debug-app <package_name>`.
|
||
|
||
5. **Preparar para la depuración en Android Studio:**
|
||
|
||
- Navega en Android Studio a _File -> Open Profile or APK_.
|
||
- Abre el APK recompilado.
|
||
|
||
6. **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`.
|
||
|
||
### **Evitando verificaciones**
|
||
|
||
La aplicación, en ciertos puntos, verificará si es depurable y también comprobará los binarios que indican un dispositivo rooteado. El depurador se puede usar para modificar la información de la aplicación, desactivar el bit de depurabilidad y alterar los nombres de los binarios buscados para evitar estas verificaciones.
|
||
|
||
Para la verificación de depurabilidad:
|
||
|
||
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.
|
||
|
||

|
||
|
||
Estos pasos aseguran colectivamente que la aplicación se pueda depurar y que ciertas verificaciones de seguridad se puedan evitar 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.
|
||
|
||
## **Verificando la vulnerabilidad**
|
||
|
||
- La aplicación fue descompilada usando `apktool` para acceder al archivo `AndroidManifest.xml`.
|
||
- La presencia de `android_debuggable="true"` en el AndroidManifest.xml indica que la aplicación es depurable y susceptible a explotación.
|
||
- Vale la pena señalar que `apktool` se emplea únicamente para verificar el estado de depurabilidad 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 depurar una aplicación que se ejecuta en una VM al exponer un puerto único.
|
||
- Se necesitó 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 <class_name>` 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, particularmente cambiando el mensaje "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 explotaciones más complejas, como obtener acceso a la shell en el dispositivo en el contexto de la aplicación.
|
||
|
||
## Referencias
|
||
|
||
- [https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0)
|
||
- [https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications](https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications)
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|