Cours n°5

A mort le crack-me !



Objectif :

1° Le cracker.
2° Trouver le bon serial du crack-me
3° Faire un keygen.

Niveau :

1° Débutant
2° et 3° Moyen


Ce qu'il vous faut :

- WinDasm

- Un éditeur hexadécimal

- Le crack-me de 163 Ko

- Un éditeur Basic (870 ko) pour faire le Keygen. (facultatif)


A l'attaque !

    Me voici de retour après quelques mois sans nouveaux cours. Dans ce cours il va falloir cracker ce crack-me pour qu'il nous dise que le code est bon même s'il est faux, il va falloir également trouver le serial (comme dans le cours précédent) avec WinDasm et enfin créer un keygen en Basic. Bref on a du boulot ! ;-)

Qu'est-ce qu'un keygen ?

    C'est un programme qui vous demande votre nom et vous donne le mot de passe du programme correspondant à votre nom. On en trouve peu par rapport aux cracks ou serials, car il faut trouver comment le programme calcule le serial en fonction du nom, ce qui est plus complexe. Mais dans ce crack-me c'est facile à voir. Le keygen va être programmé en Basic : c'est un langage très simple qui fait des programmes DOS en *.exe. Mais vous pourrez utiliser n'importe quel autre langage de programmation.

 

Commençons par le cracker !

    Comme d'habitude on exécute le crack-me pour voir de quoi il a l'air. Il nous demande un nom et un serial, on tape n'importe quoi et il nous dit "Error" - "Wrong Code !". Si vous regardez dans "About" l'auteur nous dit qu'il ne faut pas le patcher mais bon nous on fait ça pour apprendre. Donc on ouvre WinDasm et on désassemble le crack-me. On clique sur "StringsData References", on recherche le message d'erreur ("Wrong Code") et on voit ça :

:00441756 8B55F8     mov edx, dword ptr [ebp-08]
:00441759 58     pop eax
:0044175A E8E523FCFF     call 00403B44
:
0044175F 7517     jne 00441778 <<< Intéressant !!!
:00441761 6A00     push 00000000
:00441763 668B0DD8174400     mov cx, word ptr [004417D8]
:0044176A B202     mov dl, 02

* Possible StringData Ref from Code Obj ->
"Right Code"
<<< Message bon
|
:0044176C B8E4174400     mov eax, 004417E4
:00441771 E802FBFFFF     call 00441278
:00441776 EB15     jmp 0044178D 
<<< Si le code est bon il saute au dessus du message d'erreur.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:
0044175F(C)
<<< On arrive au message d'erreur par un saut qui est à cette adresse.
|
:
00441778 6A00     push 00000000
:0044177A 668B0DD8174400     mov cx, word ptr [004417D8]
:00441781 B201     mov dl, 01

* Possible StringData Ref from Code Obj ->
"Wrong Code"
<<< Message d'erreur
|
:00441783 B8F8174400 mov eax, 004417F8
:00441788 E8EBFAFFFF call 00441278



    Il y a un JNE avant le bon message qui saute, si le code est faux, au message d'erreur, il faut donc l'empêcher de sauter. On peut mettre un JE à la place de JNE mais si le code est juste il dira qu'il est faux (vous me suivez ?) : en clair il fera l'inverse. Donc il vaut mieux mettre un NOP (pas d'opération) et donc il ne sautera pas et passera alors par le bon message. 

    Bon on ouvre le crack-me avec l'éditeur hexadécimal et on change 7517 qu'on remplace par 9090. (Si vous ne savez pas utiliser l'éditeur allez voir les premiers cours).

    Normalement vous devriez avoir tout compris.... ou alors j'explique mal. Si vous n'avez pas compris relisez le début de ce cours ou les anciens cours avant de lire la suite. Et si vous ne comprenez vraiment pas écrivez-moi à deamon.crack (at) netcourrier.com.


 

Trouver le bon serial !

    Si vous avez lu et compris le cours précédent vous ne devriez pas avoir de problèmes pour trouver le bon serial.

    Désassemblez le programme avec WinDasm, recherchez le message d'erreur et regardez bien :


:00441751 E89E23FCFF     call 00403AF4
:00441756 8B55F8     mov edx, dword ptr [ebp-08]
:00441759 58     pop eax
:0044175A E8E523FCFF  
  call 00403B44 <<<C'est ici qu'il faudra breaker
:0044175F 7517     jne 00441778 <<< Saute vers le bon ou le mauvais message
:00441761 6A00     push 00000000
:00441763 668B0DD8174400     mov cx, word ptr [004417D8]
:0044176A B202     mov dl, 02

* Possible StringData Ref from Code Obj ->"
Right Code"
|
:0044176C B8E4174400     mov eax, 004417E4
:00441771 E802FBFFFF     call 00441278
:00441776 EB15     jmp 0044178D

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044175F(C)
|
:00441778 6A00     push 00000000
:0044177A 668B0DD8174400     mov cx, word ptr [004417D8]
:00441781 B201     mov dl, 01

* Possible StringData Ref from Code Obj ->"
Wrong Code"


    Comme vous avez vu il faudra poser un Break Point sur le Call qui est juste avant le JNE qui va vers le bon ou le mauvais message (le plus souvent le CALL à étudier est juste au-dessus du saut). Donc retenez l'adresse du Call (0044175A). On lance le mode débuggeur en cliquant sur "Load Process" du menu "Debug" ou en faisant CTRL+L. Cliquez ensuite sur "Load". Dans la fenêtre de droite vérifiez que toutes les cases soient cochées. Allez à l'adresse du Call en faisant "Goto Code Location" et posez un "Break Point" en double-cliquant sur la ligne voulue (celle du Call) et en appuyant sur F2 ou en cliquant à gauche de la ligne avec le bouton CTRL enfoncé. Il doit y avoir désormais un carré jaune à gauche de la ligne.


    Lancez le crack-me en cliquant sur "Run" (à droite) ou en appuyant sur F9. Tapez votre nom (Deamon pour moi mais tout le monde ne s'apppelle pas forcément Deamon) et un serial bidon (ex : 123456789) et cliquez sur "Ok". Il va biper car il s'est arrêté au Call et une fenêtre apparaît où on peut voir le nom qu'on a mis (Deamon) le serial bidon en bas (123456789) et entre les deux .... le serial : DeamonDeamon625g72 . Cliquez sur "Terminate" pour fermer le débuggeur et réessayez la même opération avec un autre nom ("Crack" par exemple). Vous trouverez alors CrackCrack625g72. On comprend donc qu'en fait le crack-me met 2 fois votre nom et rajoute "625g72". Ce sera donc facile de créer un keygen.

 

Faire un keygen en Basic

    Lancez l'éditeur de Basic en double-cliquant sur QB.EXE ou son raccourci QB. Et oui c'est moche mais c'est normal c'est du DOS, c'est sur que ça vous change des beaux programmes sous Windows. ;-)

    Voici le code source à taper (en bleu) :

CLS 
PRINT "Keygen pour le crack-me n°3"
 PRINT
INPUT "Quel est votre nom"; A$
PRINT "Salut "; A$; " ! Ton serial est : "; A$; A$; "625g72 !"
 

Explication :

Sert à rendre la fenêtre vierge dans laquelle va apparaître le message.
PRINT affiche le message, qui est entre parenthèses, à l'écran.
Rien à afficher : pour sauter une ligne.
INPUT sert à poser des questions où on peut répondre. Il faut mettre la question entre parenthèses, ne pas mettre de "?" (il le met tout seul) et mettre "; x$" après le message (on peut remplacer "x" par ce qu'on veut). Le "x$" est le nom de la réponse, que l'on met, pour l'ordinateur.
Affiche le message et "A$" qui est la réponse. Donc si vous répondez "Deamon" A$=Deamon (ATTENTION : il ne faut pas mettre "x$" entre parenthèses).


    Vous pouvez à tout moment essayer votre programme en faisant MAJ+F5 ou en cliquant sur "Démarrer" dans "Exécution".
    Ensuite enregistrez votre code source dans "Enregistrer sous..." du menu "Fichier". Pour le mettre en EXE il faut cliquer sur "Créer un fichier EXE" dans "Exécution" (mettez-le en fichier EXE autonome). Et voilà le keygen est créé dans le dossier de l'éditeur Basic.
    J'espère que vous avez compris les commandes, sinon allez voir l'aide de l'éditeur ou regardez les autres programmes qui sont avec (bien que beaucoup ne marchent pas).

    Attention : sous Windows XP il semblerait que le keygen créé se ferme automatiquement, dans ce rajoutez : "INPUT "Appuyer sur ENTRER pour terminer"; A$"

Si la création du keygen ne marche pas laissez tomber, c'est juste pour s'amuser que j'ai rajouté ce paragraphe. Les keygens habituellement sont beaucoup plus complexes que celui-ci donc il faut obligatoirement connaitre un langage de programmation pour faire un keygen.



Passer au cours suivant >>>
[ WinRAR 2.71 ]