CRACK DE WINZIP 7.0 (1260) : COMMENT TROUVER LE SERIAL ?

Outils :

                    - Sice 3.xx
                    - et un éditeur héxa

Date :

                    - 1 semaine apres sa sortie en1998
                    - Ce crack m'a pris 2 MINUTES !

Protections du prog :

                                - Limitation à 21 jours d'utilisation ?! (apres les 21 jours on peut quand meme l'utiliser : pourquoi ??)

Le but est de trouver le serial pour etre enregistré et ne plus avoir la boite de dialogue qui apparait a chaque demarrage du prog :(
Pour ca j'ai utlisé seulement une API : GetDlgItemTextA qui est l'une des plus banales pour recuperer des informations tapees au clavier.
On pose donc ss sice un bpx getdlgitemtexta et apres avoir entre notre nom et un numero on switch sous sice pour le premier break : en tout il y a seulement 2 break car il n'y a que 2 champs possible (le nom et le numero). Apres le premier break on se retrouve la :

* Reference To: USER32.GetDlgItemTextA, Ord:00F5h
                                  |
:00408014 FF150C844600            Call dword ptr [0046840C]
:0040801A 53                      push ebx                                            << on est la apres le premier break
:0040801B E822160200              call 00429642
:00408020 59                      pop ecx
:00408021 53                      push ebx
:00408022 E844160200              call 0042966B
:00408027 59                      pop ecx
:00408028 BE48D94700              mov esi, 0047D948

* Possible Reference to Dialog: DialogID_0AF0, CONTROL_ID:000B, "On &Local hard drives"
                                  |
:0040802D 6A0B                    push 0000000B
:0040802F 56                      push esi

* Possible Reference to Dialog: DialogID_0C82, CONTROL_ID:0C81, ""
                                  |
:00408030 68810C0000              push 00000C81
:00408035 57                      push edi

* Reference To: USER32.GetDlgItemTextA, Ord:00F5h
                                  |
:00408036 FF150C844600            Call dword ptr [0046840C]
:0040803C 56                      push esi                                        << on est la apres le second break
:0040803D E800160200              call 00429642
:00408042 59                      pop ecx
:00408043 56                      push esi
:00408044 E822160200              call 0042966B
:00408049 803D18D9470000          cmp byte ptr [0047D918], 00
:00408050 59                      pop ecx
:00408051 745F                    je 004080B2
:00408053 803D48D9470000          cmp byte ptr [0047D948], 00
:0040805A 7456                    je 004080B2
:0040805C E8EAFAFFFF              call 00407B4B                           << serait - ce la routine de calcul du serial ?
:00408061 85C0                    test eax, eax                                << Test si eax = 1
:00408063 744D                    je 004080B2                                <<si eax = 1 alors on saute toute la partie de code qui est juste apres
:00408065 53                      push ebx

* Possible StringData Ref from Data Obj ->"WinZip"
                                  |
:00408066 BBA80C4700              mov ebx, 00470CA8

* Possible StringData Ref from Data Obj ->"Name"
                                  |
:0040806B 68F8EA4600              push 0046EAF8
:00408070 53                      push ebx

On va aller voir ce qui ce passe dans la fonction en 00407B4B
Ici on est a peu pres au milieu de cette routine.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00407BF9(C)
|
:00407C0E 8D85C0FEFFFF            lea eax, dword ptr [ebp+FFFFFEC0]
:00407C14 50                      push eax                                        << ici est l'endroit ou le premier serial sera rangé apre le call
:00407C15 57                      push edi                                        << ca c'est le nom que vous avez entre
:00407C16 E8AB000000              call 00407CC6                    << calcul du premier serial
:00407C1B 59                      pop ecx
:00407C1C BE48D94700              mov esi, 0047D948
:00407C21 59                      pop ecx
:00407C22 8D85C0FEFFFF            lea eax, dword ptr [ebp+FFFFFEC0]
:00407C28 56                      push esi                                        << serial que vous avez entre
:00407C29 50                      push eax                                       << premier serial calcule juste au dessus
:00407C2A E871FC0400              call 004578A0                    << comparaison des deux pour savoir si celui tape est le bon
:00407C2F F7D8                    neg eax
:00407C31 1BC0                    sbb eax, eax
:00407C33 59                      pop ecx
:00407C34 40                      inc eax
:00407C35 59                      pop ecx
:00407C36 A36CB04700              mov dword ptr [0047B06C], eax
:00407C3B 7569                    jne 00407CA6                            si c'est le bon on saute sinon on en recalcul un a partir du nom entre et du premier numero calculé
:00407C3D 8D85C0FEFFFF            lea eax, dword ptr [ebp+FFFFFEC0]
:00407C43 50                      push eax                                    << premier serial calcule
:00407C44 57                      push edi                                    << nom que vous avez entre
:00407C45 E820010000              call 00407D6A                << calcul du second serial qui sera rangé a la place du second a l'@ contenu precedament dans eax
:00407C4A 59                      pop ecx
:00407C4B 8D85C0FEFFFF            lea eax, dword ptr [ebp+FFFFFEC0]

{
Pour ceux qui n'ont rien compris a ce que je viens de dire :-(
Pour trouver son numero en fonction de son nom (ou inversement) il faut taper sous sice :
- soit 'd eax' en 00407C14 et apres le 'call 00407CC6' le (premier) serial apparait.
- soit 'd eax' en 00407C43 et apres le 'call 00407D6A' le (second) serial apparait.
}

Par contre je n'ai pas reussi a comprendre pourquoi il calcule deux serial ??? :-( Si qq1 a une idée !

Voila j'espere que j'aurais ete assez precis et clair pour tout le monde sinon faite-le moi savoir.

By Elraizer 1998
Elraizer@cryogen.com

Ps :
Name : Elraizer
Code1 : ******** ( c'est juste pour qu'artex n'ai pas le plaisir )
Code2 : $$$$$$$$ ( de remplacer mes serials par des caracteres joyeux :)