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) {
}
});
Comentarios
Publicar un comentario