Frida-Labs ejercicio 0x1

Frida-Labs es un repositorio de Github el cual esta orientado al CTF (Capture The Flag) en el cual hay bastantes ejemplos y muy bueno para aquellos que quieren mejorar su entendimiento con Frida.

Resolveremos el ejercicio 1 el cual es bastante facil pero muy divertido la verdad. Aun que estos ejercicios ya estan resueltos y tienen muchas guias de como se resuelve pues como digo es mi blog y lo explicare a mi manera de como voy resolviendo cada CTF.

Necesitamos tener Frida ya instalado y nuestro emulador ya listo y configurado, si en tu caso estas apenas empezando te recomiendo mi post anterior donde explico como instalar Frida y el emulador configurados en un Windows.

Primeramente descargamos el APK del ejercicio 1


Como vemos a continuacion hay una carpeta donde nos da la solucion y debajo esta el .apk el que vamos a descargar y instalar en nuestro emulador 


Ya instalado en nuestro emulador vemos el ctf


Bueno aqui donde empieza el reto ya que tenemos que reconocer primeramente que hace el apk asi que para eso tendremos que ver el codigo fuente del apk pero como no tenemos el codigo fuente lo que nos queda es usar JADX que nos da el Smali que no es el "código fuente" en sí, sino una representación en bajo nivel del bytecode DEX que usa Android. Los procesadores no ejecutan Smali directamente, sino código máquina generado por la máquina virtual de Android (ART o Dalvik).

Arrastramos o el apk al JADX y nos mostrara lo siguiente 


En este la apk solo tiene una screen y por lo tanto es el MAIN asi que lo que yo hago es ir al AndroidManifest.xml y busco la palabra "Launcher" que la etiqueta que se usa para que sea como punto donde se iniciara al ejecutarse la app


Vemos que es el "com.ad2001.frida0x1.MainActivity"


Vemos que es c el " Bueno vemos que en onCreate hace la asignación de los id con los componentes de la Screen y en una parte vemos que hay un "get_random()" que es una función que esta retornando un Entero y lo guarda en la variable "i"

Vemos que esta retornando un Entero entre el rango de 1 a 100

Mas abajo de donde se usa esta función vemos que hay un "onClick"  el cual es el escucha del botón de la screen.

Dentro vemos que esta pasando los valores que ingresamos en el editText y lo parsea a String, ya en la siguiente linea vemos una condicion en la cual esta verificando si el texto ingresado son Digitos y si se cumplen vemos que estan pasando los valores de "i" que sabemos que es un numero random y tambien se pasa como segundo argumento el valor que ingresamos en el editText a una funcion llamada "Check" asi que vamos a darle un vistazo para ver que hace.


Vemos que hay otra condicion en la que si no se cumple nos dara un Toast diciendo "Try again", asi que como no se por donde queremos ir pues tendremos que hacer que se cumpla la condicion si o si.


La condición es que si el valor "i" que es el numero random, sea multiplicado por 2 y que ese valor sea sumado 4 y que el resultado sea igual a "i2" que es el valor que ingresa el usuario, entonces si esto se cumple veremos un mensaje que dice "Yey you guessed it right" , parece ser el chico bueno.

Asi que ahora vamos a Frida.

frida -U -f com.ad2001.frida0x1 -l "D:\RUTA\TO\SCRIPT\Frida-Labs\Frida 0x1\ejercicio1.js" 


Java.perform(function() {
    var MainActivity = Java.use("com.ad2001.frida0x1.MainActivity")
    MainActivity.get_random.implementation = function() {
        console.log("\nHooked get_random")
        var randomNumber = this.get_random()
        console.log("Random number: " + randomNumber)
        console.log("i2 = " + ((randomNumber * 2) + 4))
        return randomNumber
    }

});

Explico que hace cada linea.

En la primera Java.perform Esto asegura que el codigo se ejecuta en el entorno Android esta listo para la manipulacion de clases en la Maquina VirtualDespues Accede a la clase MainActivity del paquete com.ad2001.frida0x1 dentro de la aplicación Android.

Sobreescribe (hookea) la implementación del método get_random() de MainActivity.Cada vez que la app llame get_random(), en lugar de ejecutar el código original, ejecutará esta nueva implementación.

Llama a la versión original de get_random() y almacena el resultado en randomNumber.

En el ultimo console vemos que nos dara el valor de "i2" para que sea correcto la condicion y nos muestre el mensaje del chico bueno


Si ingresamos 144 en damos en "Submit"

Obtenemos la Flag


Comentarios

Entradas populares