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
6A00
6A00
688C040000
53
FF1570D64400
8BF0
8D442410

CALL [USER32!GetDlgItemTextA]
PUSH 00
PUSH 00
PUSH 0000048C
PUSH EBX
CALL [USER32!GetDlgItemInt]
MOV ESI,EAX
LEA EAX,[ESP+10]

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
50
E8EF7A0000
83C404
3BC6
750B
807C241000
7404

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