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 

        <<< Cours précédent    Cours suivant >>>