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
----------------------------------------------------------------------------------------------------------