Vous êtes sur la page 1sur 15

Cours N 3 Pour ce troisime cours, on va cette fois s'intresser la rcupration d'un srial valide pour Hexa.

.exe Il est tlchargeable ici : http://www.KromCrack.com/prog/HexaCours3.exe ( Password : KrommorK ) Pour ce cours, on va cette fois utiliser OllyDBG, qui est un Dbuggeur / Dsassembleur beaucoup plus complet que W32Dasm. Je ne vais ( Hlas ;-) pas faire d'introduction OllyDBG tant donn qu'il en existe beaucoup de trs bonnes sur le net. En voici par exemple un trs bon fait par Crisanar, merci lui : Introduction OllyDBG :
http://deamonftp.free.fr/deamoncrack/Tuts/Crisanar/introOlly.htm

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

Ceci tant fait, commenons ! Dsassemblons Hexa.exe avec OllyDBG. Une fois le programme dsassembl lancez-le avec F9 et essayez de vous enregistr avec un nom de 10 caractres ou plus ( C'est la raison des "..." l'avant et la fin de "Krom" ) :

Comme d'habitude, on note le message d'erreur pour retrouver l'endroit du code qui nous intresse : "Sorry, but the name and the key you entered cannot be accepted together. A mistake often made when entering the name and the key is to confuse the letters O and l with the digits 0 and 1."

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

L'intrt de noter le message d'erreur est de trouver la routine de vrification du srial qui se trouve toujours avant le message d'erreur, ( logique non :) ( Eh voici mon traditionnel "Schma de Vrification du Srial" :) :

Alors pour chercher un message d'erreur sous OllyDBG, faites un clic droit puis "Search for" ->> "All referenced text strings"

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

Dans cette nouvelle fentre, allez tout en haut sur la ligne 00401002 ASCII "Boolean" et clique droit, "Search for text" ->> "Sorry" ( Ce "Sorry" que nous recherchons et bien sur celui de "Sorry, but the name and the key you entered cannot be accepted together". ) En dcochant la "case sensitive" si ce n'est pas dj fait.

Vous trouverez plusieurs occurrences en 00435BD0, 0043637D et en 00436698 mais c'est celle en 004358AA qui nous intresse :

Double cliquer sur cette ligne et vous aller arriver l'endroit o est affich le message d'erreur :

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

Si vous remontez un peu , vous verrez alors que le JE SHORT HexDecCh.00435890 l'adresse 0043585C saute par-dessus le bon message pour afficher le message d'erreur aprs vrification du code. Vous voyez aussi que le fait de sauter ou non est d au TEST AL,AL l'adresse 0043585A qui est lui aussi d au CALL HexDecCh.00431B48 l'adresse 00435855. Redmarrer le programme avec CTRL + F2 et posez un breakpoint l'adresse 00435855 en faisant CTRL + G ->> 00435855 >> F2 ( BreakPoint ), puis lancez le programme avec F9. Une fois le programme lanc, enregistrez-vous avec un nom de 10 caractres ou plus et un code bidon ( ...Krom... / 123456 ).

Le programme s'arrte au CALL HexDecCh.00431B48 l'adresse 00435855. Entrer dans ce call avec F7 et parcourez-le ligne par lignes avec F8. Rappelez-vous que pour que le programme soit enregistr, il faut avoir AL Diffrent de 0 sinon le "JE" ( Jump if Egual to 0 ) ->> Saute vers le message d'erreur si le code entr n'est pas le bon. En faisant vos F8, vous allez sauter jusqu'au XOR EAX,EAX en 00431D17 cause du JNZ HexDecCh.00431D17 et du JL HexDecCh.00431D17 en 00431BEF. La fonction XOR EAX,EAX pour but de mettre EAX 0 ce qui n'est pas bon

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

pour nous car notre AL doit tre diffrent de 0. Ressortez du CALL et vous verrez que AL est 0 cause du XOR EAX,EAX en 00431D17. ...

...

Il faut donc annuler les 2 sauts qui mnent en 00431D17 pour viter de mettre EAX ( Donc AL ) 0. Voici donc une petite marcha suivre pour continuer : Le programme affiche le message d'erreur si le code entr est diffrent du bon. On peut voir ca avec les 3 lignes :

00435855 |. E8 EEC2FFFF 0043585A |. 84C0 0043585C |. 74 32

CALL HexDecCh.00431B48 TEST AL,AL JE SHORT HexDecCh.00435890

" Code " " Test " " JE "

On peut donc comprendre que EAX ( AL ) contient le Srial entr. Et grce au CMP ESI,EAX en 00431BDC ( juste avant les 2 Sauts JNZ HexDecCh.00431D17 et du JL HexDecCh.00431D17 ) on comprend que ESI contient le Vrai Srial :)

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

En comparant le Vrai Srial et le Srial que l'on a entr, le programme saute soit en 00431D17 pour mettre EAX 0 ( donc code faux ) soit il ne saute pas et on aura EAX diffrent de 0 donc code Juste :) Il ne reste alors plus qu'a aller voir se que cache le registre ESI en 00431BDC. Pour a, relancez une session avec CTRL + F2 ->> "Oui". Lancez ensuite le programme avec F9 et enregistrez-vous avec un nom de plus de 10 caractres ( ...Krom... / 123456 ) et cliquez sur "Ok". Le programme Break en :

00435855 |. E8 EEC2FFFF

CALL HexDecCh.00431B48

" Code "

F7 pour entrer dans le CALL puis une srie de F8 jusqu'a arriver en 00431BDC juste avant les 2 Sauts. Regardez bien les registres en dessous et leurs contenus :

On sait que EAX contient notre srial entr donc 123456 mais que contient ESI ? ESI la valeur 2AA43 ( Les valeurs des registres sont en Hexadcimal ), pour la convertir en dcimal faites "Dmarrer ->> excuter ->> "Calc.exe". Choisissez l'affichage scientifique dans "Affichage" ->> Scientifique. Cocher la Case "Hex" et mettez-y notre 2AA43.

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

Cliquez ensuite sur la case "Dc" et notre srial apparaitra en dcimal.

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

Registre EAX ESI

Valeur Hexadcimale 0001E240 0002AA43

Valeur Dcimale 123456 174659

Voici donc notre Srial :) ->> 174659 ----------------------------------------------------------------------------------Deuxime partie, pourquoi 10 caractres minimum ? Nous avons toujours fait nos tests de Srials avec un nom de 10 caractres ou plus, on va voir quels sont les consquences si on en a moins. Pour faire ces tests, nous avons besoin de remettre le programme en version d'valuation, pour faire cela, aller dans "Dmarrer" ->> "Excuter..." ->> regedit Allez ensuite dans "HKEY_LOCAL_MACHINE" puis "SOFTWARE", "Beyersdorf" et enfin " ". Pour sauvegarder votre enregistrement, cliquez sur le dossier puis "Exporter..."

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

Enregistrez le en tant que "Hexa.reg" et vous n'aurez qu'a double cliquez dessus pour refaire l'enregistrement. les information d'enregistrement tant sauvegardes, supprimer les 2 Cls "Name" et "Key"

Ceci tant fait, relancer une session de dbugging avec CTRL + F2 ->> "Oui" et dmarrer-le avec F9. Enregistrez-vous avec un nom de moins de 10 caractres et un code au hasard. Le programme va Breaker en :

00435855 |. E8 EEC2FFFF

CALL HexDecCh.00431B48

" Code "

Entrer dans le CALL avec F7 et descendez avec F8 jusqu'a arriv en :

00431BDC

. 3BF0

CMP ESI,EAX

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

Registre EAX ESI

Valeur Hexadcimale 0001E240 0000062A

Valeur Dcimale 1234 1578

Vous voyez ici que le code pour "Krom" serait 1578. Redmarrons OllyDBG avec CTRL + F2 ->> "Oui". Lancez le avec F9 et enregistrez-vous avec Krom / 1578. Entrez dans le CALL 00435855 avec F7 et descendez avec F8 jusqu'au CMP ESI,EAX en 00435855. Un F8 de plus et vous arrivez notre premier saut. Le JNZ ne saute pas puisque le rsultat du CMP donne 0 ( Pas de diffrences 62A = 62A :).

Arriv un peu plus loin, vous voyez que le fait de sauter ou non dpend du rsultat du CMP EAX,0A en 00431BEC qui lui aussi dpend du rsultat du CALL HexDecCh.00403594 l'adresse 00431BE7. Entrez dans ce CALL avec F7 puis on verra ceci :

On voit que en 00403598 on a un MOV EAX,DWORD PTR DS:[EAX-4], cela veut dire mettre le contenue de [EAX-4] dans EAX, pour que le deuxime saut ne saute pas, on devrais avoir une valeur suprieur 0A dans EAX. Aller dans la fentre de Dump ( Celle en bas a Gauche ), faites ensuite CTRL + G puis noter la valeur de EAX ( 00283DD0 ( la valeur EAX peut varier suivant le nom entr )).

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

Vous voyez que EAX contient "Krom" sous forme Hexadcimale l'adresse mmoire 00283DD0 ( 4B 72 6F 6D ). Ca c'est pour la valeur EAX, mais nous c'est la valeur EAX-4 qui nous intresse car c'est cette valeur qui est mise dans EAX. Regardez alors qu'a l'adresse 00283DCC ( [EAX-4] ) on a la Valeur 4, c'est le nombre de caractre du nom entr ( Krom = 4 caractres ). Cette valeur sera mise dans EAX et compare 0A, la comparaison indiquera un rsultat infrieur et le JL sautera pour remettre EAX 0, donc mauvais enregistrement. Petite parenthse, Jl veut dire Jump if Less donc saute si infrieur, donc pour que le Jl ne saute pas, on devra avoir un nom entr gal ou suprieur 0A ( donc 10 en dcimal ). Ressayons de nous enregistrer avec cette fois un nom de 10 caractres ou plus et le bon code ( ...Krom... / 174659 ). Pour cela, redmarrez le programme avec CTRL + F2, ->> "Oui", puis F9.

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

Entrez dans le CALL 00435855 avec F7 et descendez avec F8 jusqu'au CMP ESI,EAX en 00435855. Un F8 de plus et vous arrivez a notre premier saut. Le JNZ ne saute pas puisque le rsultat du CMP donne 0 ( Pas de diffrences 2AA43 = 2AA43 ). Arriv un peu plus loin, vous voyez que le fait de sauter ou pas dpend du rsultat du CMP EAX,0A en 00431BEC qui lui aussi dpend du rsultat du CALL HexDecCh.00403594 l'adresse 00431BE7. Entrez dans ce CALL avec F7. On voit que en 00403598 on a un MOV EAX,DWORD PTR DS:[EAX-4], cela veut dire mettre le contenue de [EAX-4] dans EAX, pour que le deuxime saut ne saute pas on devrais avoir une valeur gal ou suprieur 0A dans EAX. Allez dans la fentre de Dump ( Celle en bas a Gauche ), faites ensuite CTRL + G puis noter la valeur de EAX ( 00283C00 ( la valeur EAX peut varier suivant le nom entr )).

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::

Vous voyez que EAX contient "...Krom..." sous forme Hexadcimale l'adresse mmoire 00283C00 ( 2E 2E 2E 4B 72 6F 6D 2E 2E 2E ). Ca c'est pour la valeur EAX, mais nous c'est la valeur EAX-4 qui nous intresse car c'est cette valeur qui est mise dans EAX. Regardez alors qu'a l'adresse 00283BFC ( EAX-4 ) on a la Valeur 0A. Cette valeur sera mise dans EAX et compare 0A, Le JL ne sautera pas car il ne saute uniquement si la valeur entr est infrieur ( Jump if Less ) et en remettra pas EAX 0, donc bon enregistrement :). En rsum : Le premier Saut ( JNZ HexDecCh.00431D17 ) a pour but de contrler la validit du Srial. Le deuxime Saut ( JL HexDecCh.00431D17 ) a pour but de contrler si le nombre de caractres minimum est respect.

J'espre que ce cours a t clair ;) Si vous avez rencontr une erreur ou que quelque chose ne marche pas, vous pouvez m'envoyer un mail Admin@KromCrack.com ou en parler sur le forum : http://www.KromCrack.com/forum/

:: Copyright 2006 - 2008 KromCrack.com Tous droits rservs ::