Bonjour.
J'ai fais un petit programme qui me servira de programme de teste pour essayer des attaques par buffer overflow dans le cadre de mon apprentissage en reverse engineering.
http://pastebin.com/kTqHqWKL
Il demande un mot de passe, et ce mot de passe n'a juste aucune chance d'être correcte, puisqu'il n'existe pas de mot de passe correcte. Pour passer la sécurité il faut performer un buffer overflow et changé le contenu de la variable "r" dans checkPass().
J'ai réussis à le faire mais il y a quelque chose que je comprend pas.
Le "r" étant un entier sur 4 octets, et le buffer faisant 20 octets, checkPass doit avoir une stack frame de 24 octets.
Lorsque j'entre a x 22 en input, ça ne marche pas. (c'est ça que je comprend pas.)
mais lorsque j'entre 24 ou 23 x 'a' ça marche.
Normalement, si on entre a plus de 20 fois, ça devrait marcher car au delà de 20 il y a buffer overflow et les nouveaux octets iront sur "r".
alors si j'entre 21 fois "a" ça devrait marcher non ? 
et pourtant ça marche pas à moins de mettre au minimum 23 fois "a" lorsqu'on demande un mot de passe. Pourquoi ? je me suis trompé dans mes calcules ? j'utilise gdb je peux fournir plus d'informations sur le programme si nécéssaire.
Message édité le 11 juin 2016 à 22:24:45 par rangerprice