Parte 2

1
2
nm pew | grep sleep
ldd pew

Podemos ver que sleep se encuentra en la dirección 0xcb340

Al sumar al inicio la dirección en la que comienza la ejecución, conseguimos el punto donde se da la llamada a sleep.

1
frida pew
1
[Local::pew]-> Process.enumerateModulesSync().filter(r => r.name == "libc-2.30.so");

Ó

1
2
3
4
5
[Local::pew]-> Process.getModuleByName("libc-2.31.so");
Ó
[Local::pew]-> Process.getModuleByName("libc-2.31.so").base;
Ó
[Local::pew]-> Module.getBaseAddress("libc-2.31.so");
1
2
3
4
5
6
Local::pew]-> Process.getModuleByName("libc-2.31.so").enumerateExports();

Ó

[Local::pew]-> Module.getExportByName(null, "sleep");
"0x7f310f7d1340"
1
2
[Local::pew]-> DebugSymbol.getFunctionByName("sleep");
"0x7f310f7d1340"

Llegados a este punto tenemos el target, ahora faltan las callbacks

1
2
3
4
5
Interceptor.attach(sleepPtr, {
onEnter: function(args) {},
onLeave: function(retval) {}

});
1
2
3
4
5
6
7
8
9
10
11
12
var sleep = Module.getExportByName(null, "sleep"); // Obtener el offset

Interceptor.attach(sleep, {
onEnter: function(args) {
console.log("[*] Sleep from Frida!");
},

onLeave: function(retval) {
console.log("[*] Done sleeping from Frida!");
}

});

Ahora debemos ejecutarlo tal que (Al se attach, debe estar corriendo):

1
frida pew -l interceptor-attach.js