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
nicht 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, 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.
Copyright (c) 1999, Volatility und Immortal Desendants-
übersetzt von vladimir