Esquivando nuestro antidebuggers simple a golpe de LD_PRELOAD
Hace un tiempo vimos como escribir un sencillo antidebugger y como esquivarlo, en ese momento lo evitamos eliminando la llamada a ptrace directamente del binario, ahora veremos como "cazar" la llamada y reemplazarla por la nuestra propia sin tener que tocar el archivo.
Priemero crearemos un archivo con la función que lo reemplazará [faketrace.c]:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
|
Para compilarlo hay que enviar un par de flags:
1 |
|
Y ya podemos lanzarlo contra el programa de la otra vez, teniendo en cuenta que hay que hacer "PRELOAD" de la librería "falsa" (setear la variable de entorno LD_PRELOAD al path de la librería), pero dentro del ltrace, para evitar tropezar con el:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Listo, y sin tocar el binario.
Referencias: Stack overflow: UNIX ptrace() block child's system calls Revista Occams Razor, Número 1