20/06/2010

Write up ndh crackme level 1

On lance directement notre application dans Ollydbg. On va regarder la liste de tous les noms symboliques ( CTRL + N ) et on va s'intéresser à toutes les références de GetWindowTextA.

On a ses 2 références :

00401036   JMP DWORD PTR DS:[<&USER32.GetWindowText  USER32.GetWindowTextA
00412082   CALL DWORD PTR DS:[<&USER32.GetWindowTex  USER32.GetWindowTextA

La première n'est pas importante et n'est pas celle qui nous intéresse, dirigeons nous vers la deuxième :

00412082   .  FF15 90314100 CALL DWORD PTR DS:[<&USER32.GetWindowTex>; \GetWindowTextA

Posons un breakpoint pour vérifier tout cela ( F2 ). Appuyons sur le bouton ok en laissant le texte par défaut : "CrAck Me". Ça break bien, on va step over ( F8 ) et regarder ce qui se passe :

004120AF   . /0F84 79000000 JE cm1.0041212E

Juste après le saut conditionnel vérifiant que l'on ait bien rentré quelque chose on voit :

004120B5   .  BA BC764100   MOV EDX,cm1.004176BC   ;  ASCII "qoellao"

Si en passant sur cette instruction on regarde dans la fenêtre de rappel des opérandes, on voit :

004176BC=cm1.004176BC (ASCII "roflmao")
EDX=0012FB05

Si on regarde le code qui suit on comprend vite que notre input va être comparé à ce mot, il ne reste plus qu'à le tester.

Et voila on récupére le hash pour la validation : daa2a4c70f78f028720e66ece1e30365.