¿Tienes problemas recordando todos los comandos necesarios para realizar la ingeniería reversa de archivos APK? Quizás este artículo pueda ayudarte, pues hablaremos de LazyDroid: una herramienta que me recomendaron y que me pareció muy práctica para el día a día en el análisis de malware para Android, en particular para los newbies del análisis móvil y para aquellos cortos de memoria. Veamos a continuación de qué se trata.

Características de la herramienta

LazyDroid, como su nombre lo indica, es una herramienta sencilla especialmente útil para quienes realizan una y otra vez las mismas tareas repetitivas sobre diferentes muestras de formato APK. Así, nuclea un conjunto de funciones comúnmente utilizadas.

El script fue programado por Daniel Martínez y NCC Group, funciona con Frida y puede ser descargado desde el sitio del proyecto en GitHub.

El listado de las funciones disponibles actualmente en la versión 0.4 incluye las que se listan a continuación:

  • Configurar un APK como depurable: para lograr esto, el script añade el tag android:debuggable="true" al Android Manifest del APK indicado.
  • Configurar las copias de respaldo para la aplicación: se añade el tag android:allowBackup al Android Manifest del APK indicado.
  • Firmar el APK.
  • Compilar el APK.
  • Extraer información de la aplicación mediante LogCat y el identificador de proceso.

  • Extraer el APK de una app instalada desde la Play Store. Esto se realiza comparando la lista de apps antes y después de la instalación para identificar el paquete en cuestión, por lo que el comando debe ser emitido antes de la instalación.
  • Extraer carpetas y archivos del sistema de archivos, como ser la carpeta de datos de la aplicación (/data/data/…), de la tarjeta de memoria (/sdcard/) o cualquier otra. De este modo se pueden tomar snapshots de los archivos de la aplicación en un determinado punto del tiempo.

  • Comparar con diff dos snapshots previamente tomadas para identificar modificaciones en el sistema de archivos.

  • Insertar el gadget de Frida dentro del APK, a fin de facilitar la instrumentación de este en dispositivos que no hayan sido rooteados.

Opcionalmente, se puede modificar la configuración por defecto de las variables KEYSTORE y KEYALIAS en el script, a modo de personalizar el firmado del ejecutable.

Troubleshooting

En esta sección veremos algunos inconvenientes que pueden presentarse al momento de utilizar la herramienta.

  • Descarga de librerías de Frida

Si deseamos utilizar la opción número 9 –es decir, incluir Frida dentro de la app analizada– deberemos primero descargar del repositorio los gadgets que se insertarán en el APK, antes de ejecutar el script lazyDroid.sh. Para esto es necesario correr el script de nombre getfridalibs.sh.

Si has hecho un checkout de los últimos commits del proyecto, no debieses tener problema con la ejecución del script. De lo contrario, actualiza el script –recomendado– o cambia la siguiente línea de código:

cp *-i386.so x86

por esta otra:

cp *-x86.so x86

  • su: invalid uid/gid ‘-c’

Dependiendo del dispositivo, del emulador y de los binarios que en estos estén presentes, es posible que ocurra un error al intentar tomar una snapshot de los datos de una aplicación o al extraer un APK recientemente instalado desde el market.

Esto puede deberse a que el parámetro “-c” está de más en las líneas 306 y 370 del script. Para verificar el problema, podemos correr el comando por consola de manera independiente. Una posible solución es cambiar estas líneas:

${ADB} shell su -c "cp -r /data/data/${app} /sdcard/" > /dev/null

y

${ADB} shell su -c "cp ${pathAPK} /sdcard/${newapp}.apk"

por

${ADB} shell "su root & cp -r /data/data/${app} /sdcard/" > /dev/null

y

${ADB} shell "su root & cp ${pathAPK} /sdcard/${newapp}.apk"

respectivamente.

De hecho, es posible que no necesitemos acceso de superusuario en lo absoluto, con lo cual podría omitirse el obtener permisos de usuario root.

  • Incompatibilidad de lenguajes

LazyDroid utiliza la salida del comando diff para analizar qué archivos se han modificado entre dos snapshots de una carpeta. En particular, la herramienta analiza los resultados con base en palabras clave como “Files” o “differ”. Es por esto que, para obtener los resultados deseados, es necesario que el lenguaje de la consola en la que estamos ejecutando el script sea inglés. Para ello podemos exportar la variable correspondiente con el siguiente comando:

export LC_ALL=C

Para restaurar el lenguaje de la consola podemos utilizar el comando que vemos a continuación:

unset LC_ALL

Para concluir…

LazyDroid es una herramienta fácil de utilizar y de personalizar que puede reducir el tiempo de ejecución de tareas repetitivas. Puede llegar a ser de especial ayuda para aquellos que se estén iniciando en el análisis de dispositivos móviles.

Además, considerando que aún se encuentra en su versión 0.4, podemos esperar a futuro la incorporación de nuevas funcionalidades y la mejora de rendimiento.