-= ~Cracking tutorial~
=-
N°2
-----------------------------------------------------------------------------------------
Ce
tutorial a pour but informatif et je ne serai pas responsable de ce que vous en
ferez!
-----------------------------------------------------------------------------------------
I) Introduction
____________
Voila c'est mon 2e tout que j'écris sur le cracking. Comme je vous l'ai dit je
ne suis pas un expert mais j'essaye d'aider les débutants à mieux comprendre les
bases. Et comme je sais qu'au début c'est assez difficile a comprendre je vais
prendre un logiciel d'une protection a peu près identique que la précédente et
essayer de détailler le plus possible pour que cela reste clair et simple. Donc
GOOOOO!!!!!!!!
Nous allons nous attaquer à Jammer 1.95 disponible sur
fyres.cjb.net
Pourquoi ce logiciel me direz vous?? ben en fait un pote à moi
voulait le cracker alors je lui ai rendu service :)) et puis c'est assez
intéressant comme approche vers l'assembleur.
II) Passage a
l'acte!!!
___________________
Il faut avant de
commencer posséder les bons outils comme le 1er tout. Nous aurons besoin :
-
d'un désassembleur : le plus connu WIN32DASM
- d'un éditeur hexadécimal : le
meilleur HIEW
- du prog a cracker
- un cerveau
- des
mains
1) désassembler le prog et localiser le
jump
Bon on fait la même chose que pour le 1er tout on lance le
prog et on va dans registrer. On met un faux nom, un faux serial et hop
"Incomplete or incorrect information." c'est bon on est sur la bonne voie
:))
Alors on lance WIN32DASM et cliquez sur String Data References (icone en
haut a droite) et cherchez notre message d'erreur "Incomplete or incorrect
information."
double cliquez dessus et vous tomberez sur ça :
*
Reference To: MFC42.Ordinal:1903, Ord:1903h
|
:0041BFAC E8F74A0000 Call
00420AA8
:0041BFB1 8BCE mov ecx, esi
* Reference To:
MFC42.Ordinal:12F5, Ord:12F5h
|
:0041BFB3 E8224F0000 Call
00420EDA
* Referenced by a (U)nconditional or (C)onditional Jump at
Address:
|:0041BF67(C)
|
:0041BFB8 8D8D14FFFFFF lea ecx, dword ptr
[ebp+FFFFFF14]
:0041BFBE C645FC01 mov [ebp-04], 01
:0041BFC2 E836000000
call 0041BFFD
:0041BFC7 EB0D jmp 0041BFD6
* Referenced by a
(U)nconditional or (C)onditional Jump at Addresses:
|:0041BE71(C),
:0041BE7B(C), :0041BE84(C)
|
:0041BFC9 51 push ecx
* Referenced by
a (U)nconditional or (C)onditional Jump at Address:
|:0041BEF4(U)
<================= On remarque qu'il y a un saut vers le message d'erreur à
l'adresse 0041BEF4
|
:0041BFCA 6A10 push 00000010
* Possible
StringData Ref from Data Obj ->"Incomplete or incorrect information." <===
notre message d'erreur!!
|
:0041BFCC 68680B4300 push 00430B68
*
Reference To: MFC42.Ordinal:04B0, Ord:04B0h
|
:0041BFD1 E80E480000 Call
004207E4
On remarque qu'il y a un saut vers le message d'erreur à
l'adresse 0041BEF4 donc allons à cette adresse. Allez dans Goto puis Goto code
location et rentrez 0041BEF4 et on tombe ici :
* Reference To:
MSVCRT.strcmp, Ord:02B8h
|
:0041BEE7 E88E520000 Call 0042117A
:0041BEEC
59 pop ecx
:0041BEED 85C0 test eax, eax <====== test notre serial avec le
vrai
:0041BEEF 59 pop ecx
:0041BEF0 7507 jne 0041BEF9 <====== si bon
alors jump to 0041BEF9 sinon on continue
:0041BEF2 6A00 push
00000000
:0041BEF4 E9D1000000 jmp 0041BFCA <====== donc si mauvais on jump
à 0041BFCA
2) Modifier le jump
Donc nous venons de trouver notre jne qui
saute vers l'enregistrement seulement si le code est bon donc nous allons
patcher ça pour qu'il saute quelque soit le code c'est a dire changer "jne" en
"jmp"
Mettez la ligne sur jne 0041BEF9 et notez l'offset en bas 1BEF0.
Donc on lance hiew dans les commandes msdos, on va dans décode puis F5 pour goto
et rentrez 1BEF0. Vous êtes sur 75 qui correspond à jne donc F3 puis entrez EB
qui correspond à jmp en hexa, F9 puis F10.
On relance notre prog et on met
Prof_Squall comme nom et comme code 123 | 123456789 mais problème ca marche pas
pourtant on a effectue un changement... Cela veut dire qu'il y a plusieurs
vérifications du serial si on met par exemple comme serial 123 | 1234567890
Miracle ça marche !!! Donc en fait il faut retourner vers notre message d'erreur
et trouver d'autres sauts appelant le message on y retourne et on a ça
:
* Référence To: MFC42.Ordinal:1903, Ord:1903h
|
:0041BFAC
E8F74A0000 Call 00420AA8
:0041BFB1 8BCE mov ecx, esi
* Référence To:
MFC42.Ordinal:12F5, Ord:12F5h
|
:0041BFB3 E8224F0000 Call
00420EDA
* Referenced by a (U)nconditional or (C)onditional Jump at
Address:
|:0041BF67(C)
|
:0041BFB8 8D8D14FFFFFF lea ecx, dword ptr
[ebp+FFFFFF14]
:0041BFBE C645FC01 mov [ebp-04], 01
:0041BFC2 E836000000
call 0041BFFD
:0041BFC7 EB0D jmp 0041BFD6
* Referenced by a
(U)nconditional or (C)onditional Jump at Addresses:
:0041BE71(C),
:0041BE7B(C), :0041BE84(C) <=========================== Tiens!!!! 3 sauts
vers le messages d'erreurs!!
:0041BFC9 51 push ecx
* Referenced by
a (U)nconditional or (C)onditional Jump at Address:
|:0041BEF4(U)
<================= On remarque qu'il y a un saut vers le message d'erreur à
l'adresse 0041BEF4
:0041BFCA 6A10 push 00000010
* Possible
StringData Ref from Data Obj ->"Incomplete or incorrect information." <===
notre message d'erreur!!
:0041BFCC 68680B4300 push 00430B68
*
Reference To: MFC42.Ordinal:04B0, Ord:04B0h
:0041BFD1 E80E480000 Call
004207E4
Quand on remonte un peu on retrouve 3 sauts conditionnels
vers le message d'erreur donc pour mieux comprendre pourquoi on a pas été
enregistre ben allons y !!! donc pareil on fait goto code location et on met
0041BE71 et on tombe sur ça :
* Reference To: MFC42.Ordinal:035C, Ord:035Ch
|
:0041BE67
E8E8480000 Call 00420754
:0041BE6C 33C9 xor ecx, ecx
:0041BE6E 394DE0 cmp
dword ptr [ebp-20], ecx
:0041BE71 0F8452010000 je 0041BFC9
:0041BE77
837DE408 cmp dword ptr [ebp-1C], 00000008
:0041BE7B 0F8C48010000 jl
0041BFC9
:0041BE81 83FF0A cmp edi, 0000000A
:0041BE84 0F8C3F010000 jl
0041BFC9
Rappelez vous les 3 adresses faisant référence au message d'erreur :
0041BE71, :0041BE7B, :0041BE84 et comme par hasard les 3 adresses sont à côte
avec pleins de comparaisons. En fait il faudrait enlever les je et jl pour que
le programme ne saute pas vers le message d'erreur donc pas de probs!! on met la
ligne sur je 0041BFC9 et on note l'offset 1BE71 alors on lance hiew, décode, F5
(goto) 1BE71. Le but ici c'est de mettre des "nop" sur les sauts qui veut dire
NO OPERATION correspondant à 90 en hexa.
Mais il faut savoir une chose
avant c'est que par exemple :
je 0041BFC9 correspond à 0F8452010000 en hexa
donc pour pas faire n'importe quoi dans le programme on remplace 0F8452010000
par 909090909090 sinon si on met par exemple 90 cela va décaler le programme et
rajouter des lignes de commande qui n'ont rien à faire ici... Même si c'est un
peu confus vous comprendrez mieux quand vous aurez d'autres connaissances en
assembleur. Donc on modifie le programme comme ceci :
:0041BE67 E8E8480000 Call 00420754
:0041BE6C 33C9 xor ecx,
ecx
:0041BE6E 394DE0 cmp dword ptr [ebp-20], ecx
:0041BE71 909090909090
nop nop nop nop nop nop
:0041BE77 837DE408 cmp dword ptr [ebp-1C],
00000008
:0041BE7B 909090909090 nop nop nop nop nop nop
:0041BE81 83FF0A
cmp edi, 0000000A
:0041BE84 909090909090 nop nop nop nop nop
nop
Une fois la modification faite F9 puis F10 on peut donc relancez
notre programme et rentrez n'importe quel serial pour être enregistre!!!!
:)))