|
CrackMe |
Je pense que c’est l’heure de
passer a l’offensive nous avons bien étudier notre plan ? Alors a l’abordage
![]()
La cible
est un CrackMe un programme fait sur mesure afin d’être cracker, cool non
Abex’ 5th CrackMe quand vous double cliquer dessus ça donne :

Figure-8
On fait un essai entrez comme code 12345 et ensuite valider en cliquant sur Check.

Figure-9
Voila notre message The serial you entred is not correct! Maintenant on prend notre désassembleur (W32Dasm) et on ouvre le fichier abex'5th.exe ensuite on vas chercher notre message.
On peut le faire par deux manières :

Figure-10

Figure-11
Le message trouvé ! vous allez maintenant double cliquer sur notre message (4ième ligne, voir figure-11). Et on se retrouve ici :

Figure-12
Tout est clair maintenant, quelques lignes en dessus de notre message on tombe sur un saut conditionnel !
|
:004010F7 |
E851000000 |
Call 0040114D |
; Vérification du code entré |
|
:004010FC |
83F800 |
cmp eax, 00000000 |
; Compare eax avec zéro !! |
|
:004010FF |
7416 |
je 00401117 |
; Saute vers 00401117 si égal à zéro |
Puisque le programme nous dit que notre serial n’est pas bon ! Donc le saut ne s’effectue pas puisque le mauvais message se positionne directement après le saut, ce qui veut dire que eax n’est pas égal à zéro : pour que le saut s’effectue le résultat de l’instruction CMP doit être nul afin que ZF (indicateur) soit mis à 1 (voir cours n°2), notre JE test si ZF=1 ! il y trouve quoi ? Zéro bien sur puisqu’il ne saute pas.
Maintenant passons voir le message qui apparaît (le bon message) quand on lui donne le bon code, voici quelques lignes :
----------------------------------------------------------------------------
* Referenced
by a (U)nconditional or (C)onditional Jump at Address:
|:004010FF(C)
|
:00401117 6A00 push 00000000
* Possible
StringData Ref from Data Obj ->"Well Done!"
|
:00401119 6806244000 push 00402406
* Possible
StringData Ref from Data Obj ->"Yep, you entered a correct serial!"
|
:0040111E 6811244000
push 00402411
:00401123
FF7508
push [ebp+08]
----------------------------------------------------------------------------
Sur la Figure-12 j’ai encerclé cette adresse 004010FF, vous avez remarquer que juste avant notre bon message il y a cette phrase : « Referenced by a (U)nconditional or (C)onditional Jump at Address: 00401117 » ce qui veut dire qu’il y a un saut conditionnel qui fait appel au bon message et si vous revenez à la même Figure (12) vous allez constater que la ligne de notre JE à comme adresse 00401117 je pense que vous avez tout compris maintenant.
Au début je suis passer par le mauvais message pour trouver le JE mais je pouvais aussi commencer par le bon message (visible sur les String Data References) et remonter au JE grâce a notre gentil phrase (Referenced by…) que je vous est montrer.
Nous voulons maintenant que
le programme saute au bon message, la solution est simple on doit trouver une
instruction qui fait le contraire de JE c'est-à-dire
JNE, donc il faut remplacer
le JE 00401117 par un JNE 00401117. Comment y procéder ? c’est pas sur W32Dasm
comme vous l’avez constater, il ne vous permet que de lire et non de modifier
et
c’est ainsi que l’éditeur hexadécimal entre en jeu, il existe plusieurs éditeurs
hexa, mais je vais traiter ici que WinHex.
Il faut savoir que le code hexadécimal du JE est 74 et celui du JNE 75 (voir cours n°2)
Sur la barre d’état de W32Dasm :
![]()
Figure-13
Nous avons besoin de l’adresse du JE (6FF), noter la, lancer maintenant WinHex et ouvrer (Ctrl+O) le CrackMe (voir Figure-7) une fois le programme ouvert, choisissez Aller à la Position du menu Position qui se trouve sur la barre de Menu ou faite tout simplement Alt+G une fenêtre apparaît :

Figure-14
Vous y mettez l’adresse hexa du JE (6FF) ensuite vous cliquez sur OK, vous trouverez ça :

Figure-15
On change le JE par JNE (74 par 75) et ça donne :
![]()
Figure-16
Le programme devient après
très obéissant
je
lui est donné 1810654 (ou ce que vous voulez) comme serial et voila ce qu’il
m’as afficher :

Figure-17
|
Cours précédant : |
Cours suivant : |