Software Reverse
Engineering
WINAMP v2.05
Bitte zuerst den Abschnitt "ANMERKUNG" am Ende des Essays lesen!
Ziel: Finden der korrekten Seriennummern
Autor: VOLATILITY
(Immortal Descendants)
Übersetzt von: Vladimir
Programm/e: WinAmp v2.05 (winamp205.zip)
- 516,831 bytes
Wo zu finden: http://carabelli.com/winamp205.exe
Geschützt durch: Kombination aus: User
Name/ Seriennummer
Tools, die ihr braucht: SoftIce
Level: Anfänger / Fortgeschrittener
Tja, mein Hauptmotivationsgrund dieses Programm zu cracken war, das immer und
immer wieder in diversen Foren und im USENET nach einem Crack für dieses
Programm gefragt wurde, was mich zu der Überzeugung brachte, das sich im
Netz
nicht so viele dafür befinden.
Die korrekte Seriennummer für den Benutzernamen zu finden ist nicht so
schwierig, aber diese Nummer ist verschlüsselt,
und die Methode, wie ihr diese herausfinden könnt, ist schon interessant.
Vorbereitung für den Crack
Wenn ihr WinAmp zum ersten Mal startet, dann erscheint direkt der Nag/Info/Hilfe,
sonst könnt ihr ihn aktivieren,
indem ihr in der WinAmp- Menueleiste mit der rechten Maustaste klickt und "WinAmp"
auswählt. Dann klickt auf den
Eintrag "Shareware". Wenn ihr auf den "Enter Registration Info"-Button
klickt, erscheint folgende Dialogbox:

Ihr werdet bemerken, das der OK-Button gegreyd ist- demnach folgern
wir, das wir zuerst die korrekte Nummer
eingeben müßen, um ihn zu klicken/aktivieren.SO´N MIST. Nun
können wir also in SICE keinen Breakpoint setzen,
der aktiviert wird, wenn eine bestimmte Funktion aufgerufen wird......oder doch?!?
Vergewissert euch, das ihr euch immer noch im Registrierungsdialog
befindet, und drückt STRG+D um SICE aufzurufen.
Setzt einen Breakpoint auf die Funktion HMEMCPY, indem ihr "BPX HMEMCPY"
eingebt, drückt STRG+D
nochmals, um SICE zu verlassen und zum Proggie zurückzukehren. Nun versucht,
ein paar fingierte Daten einzugeben-
doch sobald ihr die erste Eingabe getätigt habt, meldet sich SICE. Mit
dieser Information im Hintergrund erkennen wir,
das es vielleicht eine Möglichkeit gibt, die Seriennummer herauszufinden.
Wir müßen nur die korrekte Funktion finden,
da HMEMCPY zu allgemein ist- schließlich müßen wir genau wissen,
wonach wir suchen.
In diesem Fall sind die zwei gebräuchlichsten Funktionen,
um sich an den gesuchten Punkt im Coding zu bewegen, sind
"GETWINDOWTEXTA" und "GETDIGITEMTEXTA". Um eure Zeit zu
schonen: Die Funktion die wir brauchen, ist
"GETDIGITEMTEXTA"
DEN CRACK DURCHFÜHREN:
Gebt irgendwelche fingierten Angaben in die Textboxen ein (vorher
den alten Breakpoint löschen, mit "BC 0", und kehrt mit "x"
zum Programm zurück; anm. des Übersetzters), in meinem Fall waren
das ("Cracked by Volatility (ID)" und
"272727"), aktiviert SICE mit STRG+D und setzt den Breakpoint auf
die Funktion "GETDIGITEMTEXTA" mit "BPX
GETDIGITEMTEXTA", und drückt die Kombination STRG+D, um zum Proggie
zurückzukehren. Da wir den OK-
Button nciht drücken können, probieren wir halt mal was anderes: Löscht
die letzte Zahl eurer fingierten Seriennummer,
NICHT des Benutzternamens.
SICE wird sich melden, und ihr solltet euch an folgender Stelle
im Code befinden:
| 0137:0041E6CF 0137:0041E6D5 0137:0041E6D7 0137:0041E6D9 0137:0041E6DE 0137:0041E6DF 0137:0041E6E5 0137:0041E6E7 |
FF15A0D64400 |
CALL [USER32!GetDlgItemTextA] |
Nun müßen wir also die Stelle im Coding finden, an
der unsere falsche Seriennummer mit der echten verglichen wird,
was normalerweise durch die Kommandos "CMP" oder "TEST"-
gefolgt von einem Jump-Kommando erledigt wird.
Geht also mir F10 Schritt für Schritt durch den Code, bis wir an der von
uns benötigten Listingstelle befinden.
Die sieht so aus:
| :0137:0041E6E7 0137:0041E6EB 0137:0041E6EC 0137:0041E6F1 0137:0041E6F4 0137:0041E6F6 0137:0041E6F8 0137:0041E6FD |
8D442410 |
LEA EAX,[ESP+10] PUSH EAX CALL 004261E0 ADD ESP,04 CMP EAX,ESI JNZ 0041E703 CMP BYTE PTR [ESP+10],00 JZ 0041E703 |
Die Zeile "PUSH EAX" zeigt uns, in welchem, Register
sich die von uns eingegebene Seriennummer befindet, wenn
ihr also mit F10 bis zur Zeile "CALL 004261E0" geht, dann könnt
ihr eure Nummer mit "d eax" sichtbar machen.
Ihr müßt im Datawindow vielleicht ein bißchen mit den "ALT+UP"
Tasten im Code scrollen, aber ihr werdet sie finden.
Nun wissen wir also, das sich unsere Snr. im EAX-Register befindet-
und wozu dient eurer Meinung nach die Zeile
"CALL 004261E0"??? Richtig, dort wird die Routine aufgerufen, mit
der unsere und die korrekte Snr. verglichen
wird. Also, drückt noch einmal F10, um diese Funktion ausführen zu
lassen. Eigentlich sollten wir nun die korrekte
Snr. mit "d eax" sehen können....aber...nix ist. Hmm, also scheint
es, das die Nummer verschlüsselt wurde- denn meine
Intuition sagt mir, das hier die Stelle liegt, an der wir Erfolg haben werden.
Laßt uns einfach mal den Wert vom EAX-
Register in Erfahrung bringen, indem ihr "? eax" eingebt. Schreibt
euch die angezeigte Nummer auf! In meinem Fall
lautete sie "52931318".
Nun solltet ihr diese Prozedur ein paarmal wiederholen, ein paar
Nummern mehr notieren (es lohnt sich immer, die
noch vermeintliche Lösung öfters auszuprobieren, ansonsten gibt´s
vielleicht ´ne Überraschung), dann mit "BC O" den
Breakpoint löschen, mit "STRG+D" SICE verlassen, und zusammen
mit dem gleichen Namen, den ihr gebraucht habt,
gebt ihr die notierte Nummer ein! Zu unserer freudigen Überraschung (naja,
so überraschend war´s auch nicht)- wenn
ihr die letzte Zahl eingegeben habt, wird der OK-Button aktiviert.
Erledigt!
ANMERKUNG:
Dieses Essay dient nur zur Erweiterung des Wissensstandes! Wir übernehmen
keine Verantwortung für das, was
eventuell 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.
Copyright (c) 1999, Volatility und Immortal Desendants-
übersetzt von vladimir
<FORUM> <ESSAYS> <TOOLS> <LINX> <KONTAKT> <START>