Cours n°5 : A mort le crack-me !
Objectif :
1°) Le cracker.
2°) Trouver le bon serial du crack-me et faire un keygen.
Niveau :
1°) Débutant
2°) Moyen
Ce qu'il vous faut :
- WinDasm (Voir page "Outils - Crack")
- Un éditeur hexadécimal (Idem)
- Le crack-me de 163 Ko
- Un éditeur en Basic (870 ko) pour faire le Keygen.
C'est parti !
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 et il va falloir aussi trouver le serial (comme dans le cours précédent) avec WinDasm et faire un keygen en Basic. Bref on a du boulot ! ;-)
Qu'est-ce qu'un keygen ?
C'est le plus souvent un *.exe qui vous demande votre nom et vous donne le mot de passe du programme correspondant à votre nom. On en trouve peu, car il faut trouver comment le programme calcule le serial en fonction du nom. 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.
Commençons par le cracker !
Comme d'habitude on éxé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 donc le cracker 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, donc il faut 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 recherche 7517 et on le 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.
Trouver le bon serial !
Si vous allez 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. 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) et un serial bidon (ex : 123456789) et cliquez sur "Ok". Il va biper car il s'est arrêter 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. En fait le crack-me met 2 fois votre nom et rajoute "625g72". Donc ça sera facile de faire 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 du DOS. Voici le code source à taper (ne pas marquer ce qui est en jaune) :
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 (beaucoup ne marche pas).
Vous pouvez télécharger le keygen et son code source ici.