Frida-Labs ejercicio 0x8

 



Este ejercicio es un poco mas complicado y lo vemos desde un inicio asi que vamos a ver el compilado



Analizando el codigo vemos que esta haciendo uso de una libreria la cual se esta pasando el valor de lo que ingrese el usuario y esto retorna un int que vemos que si retorna 1 entonces nos dara un mensaje diciendo "YEY YOU GOT THE FLAG" 

Bueno aqui en mi caso usare Ghidra en cual nos dejara ver el binario y analizarlo.


Bueno analizando el codigo vemos que se estan pasando un parametro




Basicamente el valor que ingresa el usuario se compara una String dentro de la libreria en la que "GSJEB|OBUJWF`MBOE~" el cual cada letra se pasa a Hexadecimal 

Por ejemplo "G" pasa a 0x71 luego este mismo valor se le resta 1 dando 0x70 que en la tabla Ascii es la ltra "F" y si seguimos hacemos un script en python 

encrypted = "GSJEB|OBUJWF`MBOE~"
decrypted = "".join(chr(ord(c) - 1) for c in encrypted)

print(decrypted)



Nos dara 


FRIDA{NATIVE_LAND}


Bueno en si ya tenemos la Flag y si ingresamos la Flag en el apk veremos





Bueno pero la gracia de esto es usar Frida no?

Vamos usar frida


Primero antes tenemos que obtener la address donde esta funcion es asignada y el offset para hookear el strcmp




Si dentro de frida ejecutamos Module.enumerateExports("libfrida0x8.so")

Si no encuentra nada nos dara un mensaje de excepción 




Ahora tenemos que obtener la address 


O tambien si usamos Module.enumerateImports("libfrida0x8.so")  



Aplicamos lo mismo para obtener la address Module.enumerateImports("libfrida0x8.so")[4]["address"]



Module.findExportByName("libfrida0x8.so","Java_com_ad2001_frida0x8_MainActivity_cmpstr")

Si no entra esto dara un null



Tambien podemos tener la direccion base del modulo

Module.getBaseAddress("libfrida0x8.so")



No da la base ahora solo tenemos que tener el offset


Si le sumamos el offset 



Bueno lo aplicamos a Frida

var strcmp_adr = Module.findExportByName("libc.so", "strcmp");
Interceptor.attach(strcmp_adr, {
    onEnter: function (args) {
        var arg0 = Memory.readUtf8String(args[0]);
        var flag = Memory.readUtf8String(args[1]);
        if (arg0.includes("FRIDA")) {
            console.log("\ninputUser: " + arg0 + "\n\nflag: " + flag);
        }
    },
    onLeave: function (retval) {
    }
});


Aqui estamos usando a readUtf8String para parsear a String los argumentos que se obtienen y veremos el input del usuario y la String con la que se compara


Y para filtrar en tantos log añadimos que si nosotros como usuario ingresamos "FRIDA" entonces nos mostrara que argumentos pasan a strcmp 






Comentarios

Entradas populares