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 :

  1. Quand le programme sera désassembler cliquer sur Search (sur la barre du menu) une fenêtre s’affiche en vous demandant ce que vous voulez chercher vous y mettez le début de notre message (The serial you entered) c’est pas la peine d’écrire toute la phrase, ensuite valider en cliquant sur Find Next.


Figure-10

  1. Sur la barre de menu choisissez Refs ensuite String Data References ou cliquer tout simplement sur l’icône Strn Ref comme indiquer sur l’image ci-dessus (2) et vous allez obtenir ça :


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 :
<< Bien débuter

Cours suivant :
La pêche aux Serials >>