Codegate CTF 2014 - dodoCrackme Writeup
27/02/2014 - 13:37 by poneyDans cette épreuve de 200 points, l'objectif était de reverser un ELF 64bits qui générait plus de 1000 nœuds lorsqu'il était ouvert dans IDA. Le graph final était juste énorme !
Après avoir vu ça, on va peut être laisser se reposer notre chère vue en graphe et passer en mode texte. Il est possible d'identifier plusieurs appels système avec comme paramètres eax = 0x01 pour l'affichage d'une donnée à l'écran :
Ce qui est confirmé lors de l'exécution de strace :
En plus de l'utilisation de l'appel système write() pour l'affichage du menu de saisie du mot de passe, il est possible de voir l'appel système read() (syscall avec eax=0x00 [1]) est utilisé pour lire le mot de passe. On attache gdb au processus dès la demande du mot de passe et on suit l'évolution de la chaîne saisie petit à petit. Le registre $rbp étant toujours manipulé (plusieurs incrémentations puis décrémentations de 8 octets) pour aller renseigner une zone mémoire qui contient seulement un octet de donnée utile. On se dit qu'il serait peut être utile de voir le contenu de l'ensemble des zones mémoires aux alentours de l'adresse pointée par $rbp :
Ces valeurs étant toutes associées à des caractères affichables de la table ASCII, on décide de les afficher à l'aide d'un print() en perl :