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: |
| :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: |
| :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
(c) 02/04/1999 -VLADIMIR- member of [The NeuRoM@nCerS]