CODE REVERSING
WINZIP 7.0 SR-1 (1285)
der Fa. NicoMak Computing, Inc.
Registrationscode herausfinden

BITTE VORHER DIE ANMERKUNG AM ENDE LESEN!!!!

Autor: -VLADIMIR- member of [The NeuRoM@ncerS]
Programm: WinZip 7.0
Dateiname/größe: winzip70.exe 943835 bytes
Web: http://www.winzip.com
Schutz: Kombination aus Registrationscode/ Username
Crack: Registrationscode herausfinden
Tools: SoftIce

Kennen wir die Last der überdimensionalen Dateien nicht alle? Doch es gibt zum Glück ja allerlei
Pack-/Entpacker auf dem Softwaremarkt. So auch WinZip, was meiner Meinung nach zu den
schicksten unter ihnen zählt. Nun lud ich mir also das Teil auf die HD, und -klaro- war net
registriert. Und was machen wir, die wir lernen wollen, da??? Genau! Ein bißchen checken,
wie das Teil nun registriert wird, und den Crack/Patch durchführen.....und natürlich danach-
wenn´s sie Zeit erlaubt- hübsch brav ein Esay schreiben, um den Kollegen zu erklären, wie
man´s gemacht hat.
BITTESCHÖN ALSO, let´s go to WinZip....

WinZip das erste Mal gestartet, erscheint ein von uns so gehaßter Nag. Dort erblicken unsere
trüben Augen natürlich direkt den "ENTER REGISTRATION INFO"- Button zur rechten...
Also, draufgedrückt und abwarten was da kommen mag.....
Ein Dialog erscheint, in dem ihr zwei Eingaben tätigen müßt:
NAME:
und
REGISTRATION#:
Ich wählte: NAME: vladimir REGISTRATION#: 2001 (liebe Grüße an HAL9000,hehehe)
Doch bevor ihr den "OK"-Button drückt, huscht mal eben zu SICE mit STRG+D, und gebt:
BPX GETDLGITEMTEXTA ein..
Zurück zu WinZip mit "F5", und nun "OK" SWASCH, SICE ist wieder da. Als nächstes drückt
einmal "F11", und ihr gelangt direkt an die Stelle in Winzip, wo die API gecallt wurde:

* Reference To: USER32.GetDlgItemTextA, Ord:00F5h
:00408014 FF150C844600 call dword ptr [0046840C]
:0040801A 53 push ebx
:0040801B EB79160200 call 00429699
:00408020 59 pop ecx
:00408021 53 push ebx
:00408022 EB9B160200 call 04296C2
:00408027 59 pop ecx
:00408028 BE58D94700 mov esi, 0047D958
:0040802D 6A0B push 0000000B
:0040802F 56 push esi
:00408030 68810C0000 push 00000C81
:00408035 57 push edi
* Reference To: USER32.GetDlgItemTextA, Ord:00F5h
:00408036 FF150C844600 call dword ptr [0046840C]
:0040803C 56 push esi
:0040803D EB79160200 call 00429699
:00408042 59 pop ecx
:00408043 56 push esi
:00408044 EB79160200 call 04296C2
:00408049 803D28D9470000 cmp byte ptr [0047D928], 00
:00408050 59 pop ecx
:00408051 755F jne 004080B2
:00408053 803D58D9470000 cmp byte ptr [0047D958], 00
:0040805A 7456 je 004080B2
:0040805C E8EAFAFFFF call 00407B4B

Soweit,so gut. Nun müßt ihr folgende Schritte unternehmen, damit ihr zu eurer Registrationsnummer
kommt:
Ich muß zugeben, das ich erst ein wenig ratlos war- ich habe nicht den rechten Ansatz gefunden, und
es dauerte einige Zeit, bis ich herausfand, was ich falsch machte. Die Programmierer von WinZip hatten
seit ihren letzten Releases einige Veränderungen im Code vorgenommen, aber egal...WEITER GEHT´S:

Zunächst gebt ihr "A" ein, um ein wenig herumzuassembeln, und zwar wenn ihr mit eurerem Pointer
auf folgender Adresse steht

:00408051 755F jne 004080B2

Nachdem ihr also zweimal "NOP" eingegeben habt (00408051 und 00408052 ), beendet ihr diese
Prozedur einfach indem ihr auf 00408053 einmal ENTER drückt (also keine Assembleeingabe). Nun
stept ihr noch mit F10 zum folgenden Jump:

:0040805C E8EAFAFFFF call 00407B4B

und gebt "T" ein, um direkt in den Code bei 00407B4B einzutauchen. Ihr werdet an folgender Stelle
landen:

* Referenced by a CALL at Adresses:
|:0040108C, :00401228, :0040805C, :0042D0EC
|

:00407B4B 55 push ebp
:00407B4C 8BEC mov ebp, esp
:00407B4E 81EC08020000 sub esp, 00000208
:00407B54 53 push ebx
:00407B55 56 push esi
:00407B56 33F6 xor esi, esi
:00407B58 803D28D9470000 cmp byte ptr [0047D928], 00
:00407B5F 57 push edi

Spaßeshalber könnt ihr an Adresse:

:00407B55 56 push esi

mal "D EBX" eingeben, ihr werdet im HexWin euren eingegebenen Namen finden, und an

:00407B56 33F6 xor esi, esi

dementsprechend "D ESI", und ihr werdet eure eingegebene FakeNummer wiedertreffen.
Ok, das nur am Rande. Ich habe mir angewöhnt, die Register regelmäßig auf Inhalte und
Werte zu checken, um nicht irgendwo eine Überraschung zu erleben oder etwas zu übersehen.
(Abgesehen davon, das ich eh kein Assemblerlisting blind übersetzten kann, hehehe). Ihr werdet-
wenn ihr jetzt weitermacht, und ab und zu die Register anzeigt, noch häufiger auf die Eingaben
stoßen. Man kann recht schön die Wege im Kopf nachvollziehen, die so ein Programm geht. Und
ihr werdet auf einen großen Unbekannten treffen (der uns aber nicht weiter interessiert!!!)

So, nu aber weiterSICEn..... Nun nehmt euch ein wenig Zeit, und drückt so lange F10, bis ihr
an folgender Stelle im Coding ankommt (und wie erwähnt, schaut zwischendurch immer mal in die
Register):

* Referenced by a (U)nconditional or (C)onditional Jump at Adress:
| :00407BF9
|

:00407C0E 8D85C0FEFFFF lea eax, dword ptr [ebp+FFFFFEC0]
:00407C14 50 push eax
:00407C15 57 push edi
:00407C16 E8AB000000 call 00407CC6 << Seriennummer wird generiert
:00407C1B 59 pop ecx
:00407C1C BE58D94700 mov esi, 0047D958
:00407C21 59 pop ecx
:00407C22 8D85C0FEFFFF lea eax, dword ptr {ebp+FFFFFEC0]
:00407C28 56 push esi
:00407C29 50 push eax
:00407C2A E8D1FC0400 call 00457900

Tätärätäääää, und wat nu??? OK, F10t bis ihr an folgendes Snippet gelangt:

:00407C22 8D85C0FEFFFF lea eax, dword ptr {ebp+FFFFFEC0]

Und nun.... gebt "D ECX" ein!! Ja was steht denn da im HexWin??? Eine uns bis dato
unbekannte Zahlen/Buchstabenkombination....ja, die schreiben wir uns doch glatt mal auf,
oder??? ( In meinem Fall war es: C78F0BB3 ).
Die Kombi findet ihr ein paar Steps später auch im EAX wieder, und zwar bei:

:00407C2A E8D1FC0400 call 00457900

Eigentlich freuen wir uns ja nun, aber das war noch nicht alles! Ihr könnt euch theoretisch
nun zur Ruhe setzten, und WinZip registrieren, aber wenn ihr ´ne Alternative sucht, dann macht
noch ein bißchen weiter:
Also, zunächst dachte ich mir auch "DAT WART", aber- neugierig wie ich bin- steppte ich noch
weiter durch WinZip (mit F10, klar oder?!), bis ich an folgende Adresse kam:

:00407C45 EB20010000 call 00407D6A<<2. Seriennummer wird generiert
:00407C4A 59 pop ecx
:00407C4B 8D85C0FEFFFF lea eax, dword ptr [ebp+FFFFFEC0]
:00407C51 59 pop ecx
:00407C52 56 push esi
:00407C53 50 push eax
:00407C54 E8A7FC0400 call 00457900

Und was glaubt ihr, was da passiert? Nun, WinZip generiert euch eine ZWEITE Kombination!
F10t, bis ihr an folgender Stelle seid:

:00407C52 56 push esi

und gebt "D ECX" ein. Es erscheint eine weitere Zahlenkombination im HexWin!! (In meinem
Fall war es: 51087299). Und auch hier findet ihr, wenn ihr bei

:00407C53 50 push eax

seid, eure FakeRegistriernummer( D ESI ), und die zweite REG# mit "D EAX" an

:00407C54 E8A7FC0400 call 00457900

.....
WINZIP IST REGISTRIERT.....

und trägt an ZWI STELLEN in der Windoof-Registrierung seinen Kram ein:

[HKEY_CURRENT_USER\Software\Nico Mak Computing\WinZip\WinIni] "win32_version"="6.3-7.0" "Name"="vladimir" "SN"="c78f0bb3"
und
[HKEY_LOCAL_MACHINE\SOFTWARE\Nico Mak Computing\WinZip\WinIni] "win32_version"="6.3-7.0" "Name"="vladimir" "SN"="c78f0bb3"
Also, wenn ihr ein wenig mit den Nr. experimentieren wollt, müßt ihr an BEIDEN Stellen
die Einträge NAME und SN ändern....


Wir hätten u.U. auch die einzelnen Jumps verändern ( JE zu JNE, oder gar NOPen) können, die zum
Ergebnis REG/nichtREG führen, aber das wär meiner Meinung nach zu aufwendig gewesen. Außerdem
halte ich nach wie vor das finden der SNr/RegNr für den eleganteren Crack (falls er gelingt)....

VIEL SPAß NOCH, TESTETS MAL AN

BIZ D@NN



ANMERKUNG:
Dieses Essay dient nur zur Erweiterung des Wissensstandes! Wir übernehmen keine
Verantwortung für das, waseventuell mit eurem Rechner passiert.
Wenn ihr das Programm erfolgreich gecrackt habt, müßt ihr es sofort löschen! mWenn ihr
weiterhin damit arbeiten wollt, dann erwerbt es rechtmäßig!!
UNTERSTÜTZT SHAREWARE, DENN DAS SIND UNSERE ÜBUNGSANWENDUNGEN!
Es ist verboten, gecrackte/gepatchte Software zu benutzen.



(c) 02/04/1999 -VLADIMIR- member of [The NeuRoM@nCerS]