nitrous@lsd:~/research/hidereverse$ gdb -q hide
Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".
(gdb) disassemble main
Dump of assembler code for function main:
...CORTADO...
0x080492f8 <main+1176>: push   $0x80495c3
0x080492fd <main+1181>: pushl  0x804a750
0x08049303 <main+1187>: call   0x804885c <fprintf>
0x08049308 <main+1192>: add    $0x10,%esp
0x0804930b <main+1195>: sub    $0x8,%esp
0x0804930e <main+1198>: pushl  0xfffffeb4(%ebp) /***SEGUNDO ARGUMENTO ***/
0x08049314 <main+1204>: pushl  0xfffffed4(%ebp) /***PRIMER ARGUMENTO ***/
0x0804931a <main+1210>: call   0x80488ec <execv> /***execve(primero, segundo) ***/
0x0804931f <main+1215>: add    $0x10,%esp
0x08049322 <main+1218>: sub    $0xc,%esp
0x08049325 <main+1221>: push   $0x80495e0
0x0804932a <main+1226>: call   0x804884c <perror>
0x0804932f <main+1231>: add    $0x10,%esp
0x08049332 <main+1234>: mov    $0xffffffff,%eax
0x08049337 <main+1239>: mov    0xfffffffc(%ebp),%ebx
0x0804933a <main+1242>: leave
0x0804933b <main+1243>: ret
End of assembler dump.
(gdb) b *main+1210	/*** BREAKPOINT JUSTO EN LA LLAMADA ***/
Breakpoint 1 at 0x804931a
(gdb) r -s "fakeprocessname -D" ./a.out 3
Starting program: /home/nitrous/research/hidereverse/hide -s "fakeprocessname -D" ./a.out 3
==> Fakename: fakeprocessname -D PidNum: 7732

Breakpoint 1, 0x0804931a in main ()
(gdb) i r $esp /*** INFORMACION DEL REGISTRO DEL TOPE DE LA PILA */
esp            0xbfb03070       0xbfb03070
(gdb) x/2x $esp /*** MUESTRAME LOS PRIMEROS DOS PUNTEROS A PARTIR DEL TOPE DE LA PILA ***/
0xbfb03070:     0x0804b018      0x0804b008
/* ES NECESARIO COMPRENDER EL FUNCIONAMIENTO DE execve(2) PARA VER EL PROTOTIPO
 * SABEMOS QUE EL PRIMER ARGUMENTO ES UN PUNTERO DE TIPO CARACTER CON EL NOMBRE DEL
 * PROGRAMA A EJECUTAR, Y EL SEGUNDO ARGUMENTO ES UN PUNTERO DE PUNTEROS DE TIPO
 * CARACTER CON EL NOMBRE DE TODOS LOS ARGUMENTOS
 */
(gdb) x/s 0x0804b018 /*** MUESTRAME EL STRING DEL PRIMER ARGUMENTO ***/
0x804b018:       "/home/nitrous/research/hidereverse/./a.out"
(gdb) x/3x 0x0804b008 /*** MUESTRAME LOS PRIMEROS 3 PUNTEROS DEL SEGUNDO ARGUMENTO ***/
0x804b008:      0xbfb030c0      0xbfb03a54      0x00000000
(gdb) x/s 0xbfb030c0 /*** MUESTRAME EL CONTENIDO DE argv[0] ***/
0xbfb030c0:      "fakeprocessname -D", ' ' <repeats 182 times>...
(gdb) x/s 0xbfb03a54 /*** EL CONTENIDO DE argv[1] ***/
0xbfb03a54:      "3"
(gdb) c
Continuing.

Program exited normally.


OHH ! PARA LOS QUE NO VIERON EL TRUCO, EL PRIMER ARGUMENTO DE execve(2) ES EL NOMBRE DEL
PROGRAMA A EJECUTAR, Y EN EL PRIMER PUNTERO DEL SEGUNDO ARGUMENTO 'DEBERIA' IR EL MISMO
NOMBRE DEL PROGRAMA, PERO SI LE PONEMOS OTRO NOMBRE, NO PASA NADA Y ES ASI COMO EL KERNEL
LO TOMA Y LO PRESENTA EN SU LISTA DE PROCESOS...
AL HACER $ps aux VEREMOS UN PROCESO CON EL NOMBRE "fakeprocessname -D"
