Vous êtes sur la page 1sur 3

30/10/2017 Analyse du code d'un crackme

Menu  Analyse du code d'un crackme Land-Of-Bork0


News
_

Forum Hey !

Dans ce tuto, on va s'attaquer a un crackme légèrement plus dur (juste à peine)


Liens
que ceux qu'on étudie d'habitude, en effet, vous seriez capable de le cracker en 10
sec chrono, mais quel est l'interet ?! Cette fois, on va essayer de comprendre la
Outils routine de vérification du password (mais ce n'est pas un keygenme.) en
regardant ligne par ligne, avec le débuggueur, la valeur des registres, de la pile,
Livre d'or etc... (Quoi, je suis le seul a être content ?! )
Tutoriaux
Tout d'abord, telechargez le crackme (crackme pour big contest à la base)
Flash Decompiler
Lancez le (d'accord avec vous, la présentation est douteuse ), mettez un
password (nombre) bidon :
Cracking

Photoshop

Comme le dit gentiment le crackme, c'est pas good...

Let's Go, lancez Olly ! Allez voir dans les SDR :

Au passage on remarque qu'il n'y a pas de packer... (Ceux qui n'ont pas pensé a le
regarder avec PEid, privés de dessert ce soir, ..)

Cliquez sur "C'est good" :

http://bork0.dl2.free.fr/php/cracking/cracker-un-crackme-lvl+.php 1/3
30/10/2017 Analyse du code d'un crackme

En jaune, la routine, en rouge le saut conditionnel. On remarque que la routine à


des instructions assez inhabituels, c'est ce qu'on appelle les instructions du
coprocesseur arithmétique... (les autres instructions basiques que vous
connaissez sont les instructions du microprocesseur).

Je vous conseille d'acheter un livre sur l'assembleur afin d'avoir une explication
détaillée de presque toutes les instructions, personellement je me sert du livre
"Assembleur x86" de Jean-Bernard Emond aux éditions CampusPress...

Posez un breakpoint (F2) sur l'instruction ADD ESP, 10 (juste en dessus de la


1ère instruction de la routine), lancez le debugger (F9) puis rentrez un password
simple comme "3", validez et hop, ça break, avancez d'un pas (F8), on arrive sur
l'instruction : FLD DWORD PTR DS:[401280], quelle est cette instruction ?!

Elle sert à empiler la valeur qui suit le FLD, ici DWORD PTR DS:[401280],
regardez sous l'écran des instructions :

On ne sait pas d'ou sort ce 48 mais il doit surement avoir un role ! Continuez, la
meme instruction sauf que cette fois la valeur empilée est notre 3. Avancez d'un
pas, on peut constater que les 2 valeurs ont bien étés empilées selon le principe
de la pile d'assiette (premier entrée, dernier sorti):

On en est à l'instruction FADDP ST(1),ST. Cette instruction effectue une addition


entre la source (ST) et la destination (ST(1)) puis renvoie le résultat dans la
source (ST). Après cette opération, ST vaudra donc 3 + 48 = 51 !

Avancez d'un pas, ça se confirme . Maintenant, nous en sommes à l'instruction


FSTP DWORD PTR SS:[EBP-4], cette instruction copie le contenu de ST dans la
destination, il va donc copier 51 dans DWORD PTR SS:[EBP-4]. On continue, 2
FLD à la suite, dans le 1er FLD on empile 51 et dans le 2° on empile 1337, bizarre
non

Continuez, on arrive a l'instruction FUCOMPP qui va effectuer une comparaison


entre ST(0) et ST(i), on a ST = 1337 et ST(1) = 51. Bien sur 1337 != 51 donc la
comparaison va donner un résultat négatif !

Pas la peine d'aller plus loin, ça nous conduirai tout droit au mauvais message

Vous pouvez fermer Olly, lancez le crackme et rentrez une valeur, je vous laisse
mettre celle qui vous parait convenable...

Quoi vous avez tous mis 1337 et ça a mis le message d'erreur ?!

Normal, rappelez vous de la routine :

1. Elle empile les valeurs 48 puis le password (3).


2. Elle ajoute les valeurs de ST et ST(1) soit 48 + password(3) !
3. Elle empile le résultat de l'addition (51) puis 1337
4. Et enfin, elle compare les 2 valeurs empilées 51 et notre password..

Vous avez trouvé l'erreur ?! Bon pour ceux qui auraient toujours pas compris,
n'oubliez pas que le programme ajoute 48 à votre password pour le comparer a
1337, il faut donc faire 1337-48 pour obtenir la vraie valeur !

Et comme je suis gentil : 1337 - 48 = 1289 !!

http://bork0.dl2.free.fr/php/cracking/cracker-un-crackme-lvl+.php 2/3
30/10/2017 Analyse du code d'un crackme

Vous pouvez tester, ça marche ! Youpi ! Un crackme de plus qui n'a pas pu vous
résister

A bientot dans un nouveau tuto !

Cracker du .net / Manual Unpacking : La théorie

RETOUR EN HAUT / INDEX DU CRACKING / INDEX DU SITE / FORUM

http://bork0.dl2.free.fr/php/cracking/cracker-un-crackme-lvl+.php 3/3