Codegate CTF 2014 - dodoCrackme Writeup

27/02/2014 - 13:37 by poney

Dans 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 !

IDA Graph View

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 :

IDA Text View - appels systeme

Ce qui est confirmé lors de l'exécution de strace :

strace - appels systeme

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 :

GDB $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 :

perl affichage flag
Flag : H4PPY_C0DEGaTE_2014_CU_1N_K0RE4
Ne serait-ce pas une invitation pour la Corée ? :)

Adel

Comments

comments powered by Disqus