A mort le crack-me !
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) :
1°
CLS
2° PRINT "Keygen pour le crack-me n°3"
3° PRINT
4° INPUT "Quel est votre nom"; A$
5° PRINT "Salut "; A$; " ! Ton serial est : "; A$;
A$; "625g72 !"
Explication :
1° Sert à
rendre la fenêtre vierge dans laquelle va apparaître le message.
2° PRINT affiche le
message, qui est entre parenthèses, à l'écran.
3° Rien à afficher : pour sauter une ligne.
4° 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.
5° 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 ] |