Cours n°9

Cracker un prog compressé



Objectif :

Cracker et trouver le serial d'un programme qui a été compressé


Niveau :

Assez facile (ou alors c'est que j'explique mal)


Ce qu'il vous faut :

- WinDasm + son patch

- Un éditeur hexadécimal

- Le crack-me (130 Ko)

- Le logiciel pour le décompresser : UPX (120 Ko)





Bon et bien allons-y gaiement !

     Pour ce cours je vais utiliser un WinDasm patché, car avec les autres versions on ne verra pas les Strings Data References. Ne me demandez pas pourquoi, je n'en sais rien. Je vous conseille de garder votre ancienne version de WinDasm + la version patchée. Car ils ne donnent pas les mêmes résultats pour certains programmes. Ce patch vous permettra également de voir les Data String References des logiciels programmés en Visual Basic et il met des couleurs (comme c'est joli :-).


    Bon allez je crois que tout est prêt, alors on peut y aller. Tout d'abord comme d'habitude, en première phase, l'observation. On lance donc ce crack-me qui a été programmé en Delphi (on peut connaître le langage de programmation ou le type de compression avec des logiciels comme StudPe ou Peid par exemple). On voit une fenêtre dans laquelle, il faut rentrer le bon serial. On tape un joli serial bidon, du style 654321 pour varier un peu :-). On valide et là : "Wrong Serial - You are a bad cracker". Pfffff. "You are a bad cracker" : c'est vite dit ça. Attends un peu que je te désassemble, tu feras moins le malin après. Non mais ! Donc une fois cette brève partie "sketch" de ce cours passée on lance notre WinDasm patché et on désassemble ce crack-me. Et qu'est-ce qu'on voit aux toutes premières lignes :

Object01: UPX0 RVA: 00001000 Offset: 00000400 Size: 00000000 Flags: E0000080
Object02: UPX1 RVA: 00036000 Offset: 00000400 Size: 0001FA00 Flags: E0000040
Object03: .rsrc RVA: 00056000 Offset: 0001FE00 Size: 00001200 Flags: C0000040

    On peut voir qu'il a été compressé avec UPX. Et comme il est compressé, on ne voit pas de Data Strings References. C'est là qu'intervient à la rescousse notre décompresseur UPX (si vous n'avez pas de décompresseur il est toujours possible de le faire manuellement , pour cela regardez les tuts à ce sujet rubrique "Autres Cours"). Pour le décompresser il faut copier le crack-me dans le même dossier que le décompresseur et renommez le fichier à décompressé en "1.exe" (ou alors modifier le 'decompress.bat'). Une fois cette modification effectuée, on lance le 'decompress.bat'. Et voilà le prog est décompressé.

    On désassemble alors le crack-me décompressé. Et là on voit enfin les Data Strings References. On cherche notre message "You are a bad cracker". Il n'y en a qu'un seul, donc pas de problème :


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|
:00442B8B(C)
|
:00442BA7 6A00     push 00000000

* Possible StringData Ref from Code Obj ->"
Wrong Serial"
|
:00442BA9 B9582C4400     mov ecx, 00442C58

* Possible StringData Ref from Code Obj ->"
You are a bad cracker!"



    On va donc à l'adresse 00442B8B qui est juste au dessus :


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:
00442B5D(C)
|
:00442B79 8D55FC     lea edx, dword ptr [ebp-04]
:00442B7C 8B83C4020000     mov eax, dword ptr [ebx+000002C4]
:00442B82 E835FCFDFF     call 004227BC
:00442B87 837DFC00     cmp dword ptr [ebp-04], 00000000

:00442B8B 751A     jne 00442BA7
:00442B8D 6A00     push 00000000

* Possible StringData Ref from Code Obj ->"Nothing entered"
|
:00442B8F B92C2C4400     mov ecx, 00442C2C

* Possible StringData Ref from Code Obj ->"
You have to enter a serial"



    Mais on voit que si on change ce saut, il va nous dire "Nothing entered" (= "rien d'entré" pour ceux qui ne sont pas bilingues). Ce message est appelé par un autre saut conditionnel, donc on y va :


* Possible StringData Ref from Code Obj ->"12011982"
|
:00442B53 BAE82B4400 mov edx, 00442BE8

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00442AE7(C)
|
:00442B58 E8E70FFCFF call 00403B44
:
00442B5D 751A jne 00442B79
:00442B5F 6A00 push 00000000

* Possible StringData Ref from Code Obj ->"
Trial CrackMe Cracked!"
|
:00442B61 B9F42B4400 mov ecx, 00442BF4

* Possible StringData Ref from Code Obj ->"
Congrats! You were successful!"
 

    Ah ben ce message me plait bien ! On va donc forcer le programme à arriver sur ce message. On changera donc le 751A en 741A ou 9090.

    Un petit point sur l'enregistrement car je reçois également beaucoup de mails à ce sujet et j'en ai marre de répéter à chaque fois la même chose. Quand vous enregistrez votre programme modifié dans l'éditeur hexadécimal, si vous voulez enregistrer par dessus l'ancien il faudra fermer le crack-me s'il est déjà lancé et fermer WinDasm s'il est désassemblé avec. Sinon il vous dira "Writing failed". Mais le mieux est de l'enregistrer sous un autre nom. Et n'oubliez pas de mettre le ".exe" à la suite du nom quand vous enregistrez. Voilà c'était juste un rappel !

 

    Bon le crack-me est désormais cracké. Mais pour trouver le bon serial retournons un peu en arrière :


* Possible StringData Ref from Code Obj ->"12011982" <-- Tiens c'est bizarre ça !!!!
|
:00442B53 BAE82B4400 mov edx, 00442BE8

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00442AE7(C)
|
:00442B58 E8E70FFCFF call 00403B44
:00442B5D 751A jne 00442B79
:00442B5F 6A00 push 00000000

* Possible StringData Ref from Code Obj ->"
Trial CrackMe Cracked!"
|
:00442B61 B9F42B4400 mov ecx, 00442BF4

* Possible StringData Ref from Code Obj ->"
Congrats! You were successful!"



    Avez-vous remarqué ce nombre : 12011982. Et bien c'est notre serial. Pas trop dur à trouver cette fois-ci, hein ?

    Donc voilà comment cracker un programme qui semblait incrackable car il n'y avait pas de Data Strings References.
   


Passer au cours suivant >>>
[ Cracker un crackme et trouver le serial ]