My Profile Photo

Neith Altair


Apasionado por los sistemas, tecnología y la ciberseguridad. Etichal hacking, análisis de vulnerabilidades, OSINT, pentesting entornos web y móvil, desarrollo de scripts en Bash, Python, manejo de Linux, conocimiento en tecnologías de desarrollo web. Implementación de Python para creación de automatizaciones.


Pentest a aplicaciones Android dvba.apk

Antes que nada, quisiera dedicarle este walkthrough a una de las personas mas importantes en mi carrera profesional, siempre quise trabajar a su lado y fue un honor. ¡Gracias totales!.

  1. Reverse the android application.

Decompilación del apk.

#Decompilacion de la aplicacion con apktool.jar
java -jar apktool_2.7.0.jar d -f -o carpeta aplicacion.apk
#decompilacion con apktool
apktool d dvba.apk -o dvba.apktool

Una vez descomprimida la aplicación se debe identificar el motivo por el cual no es posible ejecutarla dentro de emuladores, en este caso Genymotion.

Se identifica que uno de los posibles motivos se puede encontrar en el AndroidManifest.xml

En la linea que contenga la información de hardwareAccelerated="true".

¿Porque esa línea? La verdad no me acuerdo, se que tiene algo que ver con la gpu de dispositivos móviles y como genymotion o los emuladores no tienen gpu, se identifica de esa manera que la aplicación esta corriendo en un emulador.

image

Se supone que para lograr este primer bypass, basta con cambiar el valor de True a False, volver a empaquetar la aplicación e intenter ejecutarla.

El dilema es que la herramienta o el comando de apktool no me sirve, me genera varios errores y no compila la aplcación, peeero con apktool_2.7.0.jar si se puede pa.

07/07 tercer día de intento, descomprimí y comprimí la aplicación unas 6 veces en estos días, debido a que no lograba ejecutar el aplicativo, me acabo de dar cuenta, de que esta bien el error y posiblemente en el siguiente paso se solucionará, ¡ Detalles !.

Se busca la siguiente linea ya que es el mensaje de erro obtenido por la aplicación Emulator Detected.

image

Según mis opciones abro el archivo MainActivity.smali, pero debería ser .jar, al parecer es por la no implementación de la herramienta apkx herramienta, que se descarga, pero no ejecuta…… MALDITHA ZEA.

Al parecer los soucione editando el archivo aptx alojado en la ruta /usr/local/bin, utiliza pyhton y no tenia python, pero si python3, solo era ajustar la ubicación. Primero con which python, despúes remplazar y funciona.

image

Se utiliza la herramienta de apkx que sirve para: “Extrae el código fuente de Java directamente desde el APK. Útil para experimentar con diferentes convertidores/descompiladores sin tener que preocuparse por la configuración del classpath y los argumentos de la línea de comandos.”

Comando greep de manera recursiva, para identificar en que archivo se encuentra la linea que contenga información sobre el “Emulator detected”.

image

Una vez ubicado el archivo, se evalua el contenido de las línes de código y se identifíca que es necesario modificar el proceso de la aplicación de forma que no entre en el bloque de código específico de la línea 258.

// @File: scripts/script.js
setTimeout(function() {
    Java.perform(function() {

        // We are loading the class here
        var Rfunc = Java.use("a.a.a.a.a");

        // Whenever a.a.a.a.a.R() is called, the below code is executed
        Rfunc.R.implementation = function() {
            // Capture the return value of R function
            let retval = this.R();
            // Printing the value we got from this function
            console.log("Original return value = ", retval);
            // Toggle the return value to make sure it doesn't enter the if loop
            return !retval
        }
    })
}, 10);

Dentro de la ruta donde se encuentra almacenada la aplicación, creamos un directorio para el script a utilizar mkdir scripts cd scripts/ `nano script.js

Se inserta el código de la parte superior y se procede a ejecutar frida con este script para lograr el bypaas de root y emulador.

image

Se ejecuta de manera correcta el script, pero se evidencia que aún tiene un bloque de código o “check” que no permite la ejecución de la aplicación.

En este punto se vuelve a ejecutar un grep para identificar si hay bloques de código que esten relacionados a frida. grep -r -i frida.

Al ejecutar el comando se identifica que la aplicación efectivamente cuenta con método enfocado en validar la ejecución de frida en el dispositivo.

Este método se encarga de validar los puertos en servicio del dispositivo y valida si el puerto por defecto de Frida esta en ejecución “27042”.

De manera que para poder “bypasiarlo” es necesario cambiar el puerto en el que se ejecutara frida desde el dispositivo y posteriormente apuntar el script.js a ese puerto específico para ver si es posible.

image

Efectivamente, se logra el bypass ejecutando el script en un puerto diferente, en este caso 1337. Incluso se alcanza a ver un mensaje de la aplicación que dice “Frida is not running (a frida no le gusta correr)”.

Para los siguientes pasos se necesita frida, para lograr una ejecucion de frida en el equipo es necesario, pasar el archivo de la manera correcta al dispositivo y posteriormente darle permisos de ejecución sobre el archivo, tal cual como se haria el linux un buen “chmod +x frida….” puede solucionar el problema.

#Tener en cuenta que se debe actualizar la version del frida, puede que haya una mas reciente a la 16.1.1
wget https://github.com/frida/frida/releases/download/16.1.1/frida-server-16.1.1-android-x86.xz
xz --decompress frida-server-16.1.1-android-x86.xz
adb push frida-server-16.1.1-android-x86 /tmp

(1,1)