Le 22 Juin 1998, 13:30

Crack de ACDSee v 2.22 par Artex

Ceci est un de mes premiers cracks et mon premier compte-rendu de crack. Il est tout simple, tellement simple que j' ai ΘtΘ moi-mΩme ΘtonnΘ de la simplicitΘ avec laquelle j' ai rΘussi tout τα.

Bon allons-y. On a besoins de :

- ACDSee v2.22 qui se trouve sur le cd de Windows news de Juin 98.

- Wdasm (hum, n' importe lequel ; en ce qui me concerne j' utilise plusieurs versions en mΩme temps car parfois (souvent) ils ne donnent pas les mΩmes 'string reference')

- Un Editeur hexadecimal quelconque...

- 10 minutes pour tout faire et tout comprendre.

Ok ? C' est bon ? Z' avez tout ? Bien assis, Coca (l' alcool c' est mauvais pour la santΘ;) α portΘe de main ? Zou !

 

1- On 'joue' 2 minutes avec le prog pour voir de quoi τα a l' air (et si τα vaut le coups de le craquer ;) On note le max d' info genre en haut dans la barre d' Θtat il y a marquΘ "Unregistred", dans tools il y a une option register et dans la fenΩtre register il y a de la place pour un nom et un code (serial number). Bon, allez assez de conneries, on attaque !

2- On desassemble le prog avec Wdasm.

3- On regarde les 'strings references' : on trouve plein de trucs dont des trucs intΘressants genre "available only in Reg version", "Unregistred", "unregistred", "serial number", "your name and registration code", blablabla.

4- On va utiliser les deux "Unregistred" et "unregistred". Double clique sur le premier et une 2Φme fois pour voir si il n' y a pas d' autre occurence dans le prog. Non, une seule fois rΘference α "Unreg" et une fois pour "unreg". Cool, τα va Ωtre tout simple, je le sens dΘjα.

Voici ce que l' on obtient pour la string reference de unreg:

* Reference To: KERNEL32.lstrcpyA, Ord:029Bh

|

:00401328 FF157CF94A00 Call dword ptr [004AF97C]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00401318(U)

|

:0040132E E80D420000 call 00405540

* Reference To: KERNEL32.lstrcatA, Ord:0292h

|

:00401333 8B2D78F94A00 mov ebp, dword ptr [004AF978]

:00401339 83F801 cmp eax, 00000001

:0040133C 740F je 0040134D

:0040133E 8D942418010000 lea edx, dword ptr [esp+00000118]

* Possible StringData Ref from Data Obj ->" [unregistered]"

|

:00401345 6848F04900 push 0049F048

:0040134A 52 push edx

:0040134B FFD5 call ebp

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0040133C(C)

|

:0040134D A1A4A84A00 mov eax, dword ptr [004AA8A4]

:00401352 85C0 test eax, eax

Etc, etc...

Bon, on remarque tout de suite au dessus du " [unregistered]" un beau call et un cmp suivi d' un je.

5- Ok, maintenant on regarde l' autre unregistred. Voici ce que l' on obtient :

* Reference To: USER32.wsprintfA, Ord:0264h

|

:0040170F FF15FCFB4A00 Call dword ptr [004AFBFC]

:00401715 83C410 add esp, 00000010

:00401718 8D542410 lea edx, dword ptr [esp+10]

:0040171C 8D442460 lea eax, dword ptr [esp+60]

:00401720 52 push edx

:00401721 50 push eax

:00401722 FFD6 call esi

:00401724 E8173E0000 call 00405540

:00401729 83F801 cmp eax, 00000001

:0040172C 742E je 0040175C

* Possible StringData Ref from Data Obj ->" [Unregistered]"

|

:0040172E BF60F04900 mov edi, 0049F060

:00401733 83C9FF or ecx, FFFFFFFF

:00401736 33C0 xor eax, eax

:00401738 8D542460 lea edx, dword ptr [esp+60]

:0040173C F2 repnz

:0040173D AE scasb

etc, etc...

Oh ! On remarque α nouveau un call (le mΩme), un cmp et un je ! Tiens, tiens...

Bon, j' espΦre que vous avez compris ce qui se passe. Non ? Hum, et bien le prog fait un call (=appelle une fonction ; ici celα vΘrifie si l' on est enregistrΘ ou pas) et au retour il vΘrifie si eax contient 1 ou pas. Si eax diffΘrent de 1 on ne saute pas et on arrive α notre Unregistred... Allon faire un tour en 00405540 pour ce qu' il en est.

6- Voici ce que l' on peut lire α cette fameuse adresse :

* Referenced by a CALL at Addresses:

|:00401057 , :004010E4 , :0040132E , :0040164F , :00401724

|:00401C3E , :00401FD3 , :00402F4E , :0040562D

|

:00405540 81EC24020000 sub esp, 00000224

:00405546 8A1544A94A00 mov dl, byte ptr [004AA944]

:0040554C 57 push edi

:0040554D B907000000 mov ecx, 00000007

:00405552 33C0 xor eax, eax

Etc, etc...

Bon, lα aussi on remarque quelquechose de trΦs intΘressant : il y a de nombreux appels α cette routine. On est des crackers trΦs curieux donc on jette un oeil aux diffΘrentes adresses et on constate que l' on retrouve toujours la sΘquence call, cmp (ou test) et saut conditionnel. De plus on compare toujours eax α 1 que celα soit directement avec un cmp eax, 00000001

je gentil_garτon

...instructions pour le mΘchant garτon

ou bien un test eax, eax

je mΘchant_garτon

...instructions pour le gentil garτon

En clair : eax=1 alors on est enregistrΘ

eax=0 alors on n' est pas enregistrΘ.

Bon. Moi je suis fainΘant et j' ai envie de faire simple. On pourrait maintenant cracker ce prog de diffΘrentes maniΦres comme par exemple allez patcher les diffΘrents test qui suivent les diffΘrents call des adresses 00401507, 00401e4, 0040132e, ... Bref, α chaque fois il faudrait prendre note des sequences hexadΘcimales et les rechercher dans notre editeur hexa. Arg, beaucoup de travail... On pourrait aussi essayer de comprendre ce que fait ce call, tous les calculs qu' il utilise... Dur, surtout que je ne suis pas bon en assembleur... En fait il y a un moyen trΦs simple de faire et qui est idΘal pour les fainΘants comme moi : on sait que le prog fait des call et qu' ensuite il vΘrifie si eax contient 1 pour en dΘduire que l' on est enregistrΘ ou non. Donc, pourquoi ne pas mettre eax α 1 et ensuite revenir au prog appelant ? Bah oui, hein, pourquoi pas ? C' est ce qu' on va faire.

On remplace

00405540 81EC24020000 sub esp, 00000224

:00405546 8A1544A94A00 mov dl, byte ptr [004AA944]

:0040554C 57 push edi

par B801000000 mov eax, 00000001

C3 ret

Donc, le prog fait des call 00405540 et lα on met eax α 1 et on retourne α l' endroit qui a appelΘ. Finalement, tous les tests verront que l' on est enregistrΘ puisque eax=1. Simple, non ?

 

Si vous avez des questions ou des commentaires envoyez-moi un message α classiqueop@hotmail.com

Si vous avez craquΘ des progs intΘressants, Θcrivez-moi pour que j' essaye aussi et que l' on voit si l' on a procΘdΘ de la mΩme maniΦre.

Si vous avez des urls avec des progs sympas pour s' entrainer α cracker, n' hesitez pas !

A++

Artex

----------------------------------------------------------------------------------------------------------

Retour vers la page de cours

Retour vers la page principale