mercredi 4 juillet 2012

NDH 2k12 - Lost USB key - 1000pts

Un autre crackme, Windows cette fois-ci.

1.       What
On a un fichier « crackme.exe » qui demande un mot de passe …
Voici ce que PeID en pense :



Il est donc packé avec UPX. Pour unpacker, il suffit de lancer : upx.exe –d crackme.exe.
Et voilà, c’est unpacké …
On passe la fonction « start » pour arriver à la demande de mot de passe (bloc jaune) :


Après le « fgets », on a en vert la partie qui va chiffrer (transformer légèrement) notre mot de passe, ensuite on passe dans la partie orange qui comparera notre mot de passe chiffré avec le chiffré du bon mot de passe. Si c’est bon, on passe dans la partie rouge, sinon bleu.

Dans le premier bloc vert [ebp-1Ch] contient l’index du caractère que l’on est en train de transformer, il est d’ailleurs initialisé à 0 juste après le fgets.
Ensuite on calcul la taille de notre mot de passe situé à ebp-32h. On compare ensuite les 2 pour savoir si on est à la fin ou pas.

Pour la partie transformation (2ème bloc vert), on va chercher le caractère du mot de passe à l’index [ebp-1Ch], on le XOR avec [ebp-1Dh] qui vaut 0x93 (voir un peu plus haut : mov byte ptr [ebp-1Dh], 93h), puis on incrémente l’index.

On a donc un XOR avec 0x93. Pour trouver le bon mot de passe, il suffit de récupérer le chiffré du bon passe et de le XORer avec 0x93.

2.       Résultat
On break sur le strcmp, on note le chiffré du bon mot de passe.
Cela donne : FE FC FD F8 A0 EA.
Après le XOR on obtient le flag : monk3y

Comme « le python c’est bon », voiçi le xor en Python :
"".join([chr(int(v,16)^0x93) for v in ["FE","FC","FD","F8","A0","EA"]])

Aucun commentaire:

Enregistrer un commentaire