Cours n°2 : Cracker un crack-me
Objectif :
Cracker un crack-me en modifiant un saut conditionnel.
Niveau :
Débutant
Ce qu'il vous faut :
- WinDasm (Voir page "Outils - Crack")
- Un éditeur hexadécimal (Idem)
- Le cracke-me de 3 Ko (et oui, c'est mieux de l'avoir si vous voulez le cracker ;-)
Allez go !
Le but est de le cracker pour arriver sur un bon message quand on clique sur OK. Il faut donc modifié un saut.
Après avoir téléchargé
ce cracke-me, lancez-le pour voir comment il se présente et relevez le titre du
message d'erreur et son contenu.
Désassemblez 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)
Il 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
voir on il saute on double-clique sur cette ligne pour la rendre 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 qu'il y a avant et après (on
recherchera donc : "83F807EB1A6A40"
et on vérifiera qu'il n'y en a pas plusieurs).
Arrivé là où il faut, on
remplacera EB1A par 9090
(NOP). On enregistre, on le lance et là...ça marche !
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 à m'écrire à : deamon.crack@netcourrier.com