Cracker un prog compressé
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 ] |