patos ladrones

Depuración de aplicaciones Android de terceros

Si bien la ingeniería inversa de las aplicaciones de Android, es relativamente común realizar un análisis dinámico junto con un análisis estático para obtener información sobre el tiempo de ejecución de la aplicación.

Hay muchas formas de obtener esta información de aplicaciones de terceros.

  • Use ganchos de Frida para imprimir argumentos de función
  • Parchear la aplicación para que sea depurable
  • Parche la aplicación para registrar la información confidencial

Los métodos anteriores tienen varias fallas, Frida solo puede enganchar una función específica antes o después de la función, y la caza furtiva de aplicaciones es relativamente compleja y casi siempre causa errores en la aplicación.
Además, muchos empaquetadores/malwares detectan APK modificados y fallan para dificultar intencionalmente el análisis.

Mejores soluciones para depurar aplicaciones Android de terceros

Soy un gran admirador del depurador de Android Studio (JDWP bajo el capó), ya que puede configurar fácilmente puntos de interrupción, modificar el código e incluso agregarle lógica, todo en tiempo de ejecución, desde su IDE favorito.
Lamentablemente, para hacerlo, debe volver a compilar las aplicaciones, y eso tiene una alta probabilidad de fallar.
Como mi dispositivo está rooteado y altamente personalizado, decidí encontrar una manera de hacer que todas las aplicaciones sean depurables.

Investigación AOSP

Para depurar una aplicación, Android Studio se comunica con la aplicación mediante JDWP sobre comunicación ADB, como muestra el gráfico de muy alto nivel:

Gráfico de AOSP JDWP y cómo depurar aplicaciones Android de terceros

Si está interesado en una explicación más detallada de la implementación, es su día de suerte, porque por alguna razón, alguien de AOSP escribió una domcatuión bastante decente en 

/te/core/adb/jdwp_servicio.cpp 

Investigaciones posteriores de la AOSP revelaron la

DEBUG_ENABLE_JDWP

Eso, si se establece como un indicador para zygote al inicializar una nueva aplicación, hará que la aplicación sea depurable.
Más interesante es la función “aplicarDebuggerSystemProperty"

AOSP investiga JDWP y cómo depurar aplicaciones Android de terceros

Aparentemente, ya hay soporte para mis necesidades de depuración y todo lo que necesito hacer es establecer la propiedad del sistema ro.debuggable en 1.

Modificación de la imagen de arranque

Aparentemente, todas las propiedades del sistema ro.* están bajo la imagen de inicio del dispositivo y no se pueden configurar con el comando estándar "adb shell setprop".
Además, volver a montar solo no funcionará.
Existen métodos específicos del dispositivo sobre cómo flashear imágenes de arranque modificadas, pero la mayoría de ellos no son simples y requieren una cantidad relativamente grande de conocimiento del proceso de arranque de Android.
Decidí encontrar un enfoque más fácil y, afortunadamente para mí, alguien ya creó un módulo magisk que hace exactamente esto.

Ajustes ocultos

Instálelo y podrá modificar la propiedad desde adb shell.

También desde Android 10 y superior sistema-como-root se implementa para que pueda cambiar a las propiedades del sistema ro.* usando montajes 

montar -o rw, volver a montar /
vi /default.prop 
# reemplazar ro.debuggable=0 a ro.debuggable=1 en /default.prop
reiniciar 

Depuración

Todo se puede depurar ahora, ¡solo use "adjuntar depurador" (use Java solo de lo contrario falla)!

AOSP JDWP y cómo depurar aplicaciones Android de terceros - Depuración

Si desea depurar archivos smali y no Java, use este complemento:
https://github.com/JesusFreke/smalidea

Ir al contenido