Cours n°2

Cracker un crackme


Objectif :

Cracker un crack-me en modifiant un saut.

Niveau :

Très débutant

Ce qu'il vous faut :

- WinDasm

- Un éditeur hexadécimal

- Le crack-me de 3 Ko (et oui, c'est mieux de l'avoir si vous voulez le cracker ;-)


Allez go !

Le but est donc de le cracker pour arriver sur un bon message quand on clique sur OK. Il faut donc modifier un saut.

Après avoir téléchargé ce crack-me, lancez-le pour voir comment il se présente et relevez le titre du message d'erreur et son contenu.

Désassemblez ensuite ce crack-me avec WinDasm et cliquez sur pour trouver le message d'erreur. Double-cliquez sur ce message ("Ahhh! Tu n'as pas reussis" ou "FATAL ERROR !!" - titre du message). Vérifiez qu'il n'y en a qu'un seul en double-cliquant encore une fois (dans certains programmes le message peut apparaître plusieurs fois, mais là ce n'est pas le cas).

Remontez un peu et là on aperçoit juste avant le message :

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401016(U)


Le message est donc appelé par un saut à l'adresse 00401016. On va donc à cette adresse soit en remontant les lignes ou en la recherchant (avec F12 ou "Goto Code Location").

Arrivé à cette ligne, on voit un JMP :

:00401016 EB1A jmp 00401032


Pour atteindre la ligne 00401032 (où il saute), on double-clique sur cette ligne pour la sélectionner (elle deviendra verte) et on clique sur pour arriver à la ligne où il va.

Pour revenir au JMP on clique sur . Il arrive juste avant le mauvais message. Si on regarde un peu en dessous du JMP, on voit un message qu'il saute et qui à l'air d'être le bon message :

* Possible StringData Ref from Data Obj ->"Okay Dokey!"

Vous l'avez donc sûrement compris, il faut donc changer ce vilain jmp et le remplacer par un nop (pas d'opération = pas de saut). On relève donc le code en hexa de la ligne du jmp ("EB1A"). On ouvre le crack-me avec l'éditeur hexadécimal et il faut rechercher "EB1A". Mais il peut, pour certains programmes, y avoir des dizaines de "EB1A". Donc on prend le code hexa des instructions qui se retrouvent avant et après le JMP (on recherchera donc : "83F807EB1A6A40" et on vérifiera qu'il n'y en a pas plusieurs). Autre méthode plus pratique à mon goût pour retrouver EB1A : on peut se repérer avec l'offset, vous trouvez son numéro tout en bas dans la barre d'état quand vous sélectionnez la ligne voulue :

Code Data @:00401016 @Offset 00000616h in File ....etc....

Dans ce cas "616" est l'offset, pas besoin des zéros avant le nombre et le "h" indique que c'est en hexadécimal. Pour se rendre à cette adresse dans HexDecCharEditor on fait "Edit" --> "Go To..." ou CTRL+T. Et on tape dans la case "Hex" (car l'offset est en hexadécimal) : 616, on valide et on se retrouve directement sur le code qu'on souhaite modifier.

Arrivé là où il faut, on remplacera EB1A par 9090 ("nop nop"). On enregistre, on le lance et là... ça marche !

Attention : si le programme à modifier est déjà ouvert ou désassemblé avec WinDasm vous ne pourrez pas enregistrer le fichier par dessus. Dans ce cas il faut mieux enregistrer sous un autre nom, ce que je vous conseille de faire à chaque fois pour avoir une sauvegarde de l'original. Mais n'oubliez pas de mettre le ".exe" à la fin du nom du fichier.

J'espère que vous avez tout compris. Si vous ne comprenez pas ou si je ne suis pas clair dans mes explications,
n'hésitez pas à me contacter à cette adresse : deamon.crack (at) netcourrier.com


Passer au cours suivant >>>
[ Cracker un crackme ]