Cracking Tutorial Nr. 1 
Allgemeine Infos zum Cracken und "How to crack WinAmp (2.23)"
Hubertus Loobert
eMail: ger.tuts@redseven.de
Internet: http://www.gaston.notrix.de


Wenn du dir dieses Tutorial mit Notepad (WindowsEditor) anguckst, aktiviere fr eine bessere bersicht den Zeilenumbruch.


Inhalt:
*******
1. Allgemeines ber Windows Cracking
2. Bentigte Tools
3. Konfiguration von SoftIce
4. Das erste Opfer




************************************
1. Allgemeines ber Windows Cracking
************************************ 

Das Cracken eines Programmes unter Win9x setzt zu 99% auf das Windows API. Ich kann mir sicherlich vorstellen, da einige Cracker oder die, die von sich solches behaupten, noch nie etwas davon gehrt haben.
API steht fr "application programming interface". Und um das zu erklren folgender Ausschnitt aus der MSDN Libary:

API
Eine Reihe von Routinen, die eine Anwendung verwendet, um systemnahe Dienste anzufordern und aufzurufen, die dann vom Betriebssystem eines Computers bereitgestellt werden. Bei Computern mit einer grafischen Benutzeroberflche verwaltet ein API die Fenster, Symbole, Mens und Dialogfelder einer Anwendung.

Wem noch immer nicht klar ist was das API ist nochmals: Diese Funktionen sind im Betriebsystem intigriert, so da sie jeder Programmierer nutzen kann. Diese Funktionen erleichtern dem Programmierer seine Aufgaben ungmein, denn er kann so immer wieder auf vorgefertigte Mens und Dialogboxen zurckgreifen. Und dies benutzen alle Cracker als Einstiegspunkt fr ihre Cracks.

Um unter Windows erfolgreich zu cracken ist es sehr hilfreich sich eine Win32 API Referenz zu besorgen.


******************
2. Bentigte Tools
******************
Wenn man ein Programm installiert, liegt dieses nur in kompilierter Form vor. Dies bedeutet, da das Programm ausfhrbar ist. Unter Windows sind diese Art von Dateien mit den Endungen .EXE oder .COM gekennzeichnet. Diese Dateien sind nichts anderes als eine Aneinanderreihung von Befehlen. Doch fr uns Menschen ergeben diese Bits bzw. Bytes keinen Sinn. Und da kommen die Tools ins Spiel. Das wichtigste Tool eines Crackers ist ein Disassembler und/oder ein Debugger. Dieses Tools bersetzten die Bits und Bytes (gennant Maschinencode) in Assemblerbefehle. Assembler ist eine eigene Programmiersprache, die wir im Laufe der Zeit kennen lernen werden. Doch nun heraus aus dem theoretischen und ins praktische. Die wichtigsten Tools fr einen Cracker sind folgende:

1. SoftIce (zur Zeit ist Version 4.0 aktuell)
2. W32dsm 8.93
3. Einen Hexeditor

zu SoftIce: 
SoftIce ist ein Debugger. Dies bedeutet, da er den bersetzten Machinencode in Echtzeit anzeigt. Dies erleichtert dem Cracker ungemein die Arbeit. So ist es zum Beispiel mglich Serials herauszufinden und viel leichter Keygeneratoren zu schreiben. SoftIce wird wirklich von jedem Cracker benutzt, und ich kenne kein vergleichbares Produkt, da das gleich viel leistet.

zu W32dsm 8.93:
W32dsm ist hauptschlich ein Disassembler. W32dsm ldt ein Programm und wandelt es komplett in Assembler um. Weiterhin zeigt es die Importierten und exportierte Funktionen aus Programmbibliotheken ( .DLL) an, sowie die Zusammenhnge verschiedener Sprnge (Jumps). Es ist auch in der Lage 32BIT Anwendungen zu debuggen, aber ist aus meiner Sicht lange nicht so gut wie SoftIce.

zu einem Hexeditor:
Was ein Hexeditor ist, sollte jeder Leser diese Tutorials wissen, weiterhin auch wo er sich einen besorgen kann.


Ich werde hier keine Links zu den Tools hineinschreiben, denn Links sind vergnglich.



****************************
3. Konfiguration von SoftIce
****************************

Ich werde hier nicht beschreiben wie man SoftIce oder W32dsm installiert, dafr gibt es andere Tutorials. Aber eine Sache mchte ich hier trotzdem aufgreifen. Um das in Punkt 1 beschriebene Windows API zu nutzen mu man in SoftIce folgende Sache konfigurieren: Den Symbol Loader ffnen. Dann Edit -> SoftICE Initialization Settings -> Exports whlen und folgende Programmbibliotheken hinzufgen "user32.dll","gdi32.dll","kernel32.dll" und "advapi32.dll". Diese DLLs beinhalten die wichtigsten Funktion von Windows, die ein jedes Programm nutzt. Nachdem man diese DLls zu den SoftIce Exports hinzugefgt haben, ist es es mglich einen Breakpoint auf eine oder mehrere dieser Funktionen zu setzen, welcher bewirkt, das jedesmal SoftIce gestartet wird, wenn eine Funktion aufgerufen wird. 


******************
4. Das erste Opfer
******************

Bei der Auswahl eines geeigneten Opfers mu folgendes beachtet werden: Das Programm mu leicht zu cracken sein, da dies das erste Tutorial ist; weiterhin sollte man das oben besprochene in die Tat umsetzten knnen. Auerdem bevorzuge ich ein ntzliches Programm. Und so fllt meine Wahl auf Winamp (Dies wird auch das erste Programm sein, zu dem wir einen Keymaker schreiben). Winamp wird auf wwww.winamp.com zum download bereitgestellt. Winamp zu cracken ist ein Kinderspiel, und so gibt es viele Tutorials dazu. Doch ich werde versuchen, diese von den anderen abzuheben.


4.1
***
Das Programm lt sich unter dem Punkt Shareware registrieren. Man bettigt "Enter Registration Info" und ein Dialogfeld mit einem Textfeld fr den Namen und einem mit dem Registrierungscode. Der "OK" Button ist deaktiviert und wird aktiviert, so bald man einen Namem mit dem richtigen Registrierungscode eingegeben hat. Doch was bedeutet das? Das bedeutet, da jedesmal wenn man eines der beiden Textfelder verndert die eingegeben Daten berprft werden. Und der "OK" Button wird ber eine API Funktion aktiviert und deaktiviert. Diese API Funktion lautet EnableWindow. Jetzt werden sich sicherlich einige Fragen, woher man das wei. Nun dieses Wissen kommt aus Erfahrung, wenn man solche Programme schon einmal gecrackt hat. Oder, was wohl hufiger der Fall ist: Man wei es aus eigener Programmiererfahrung heraus. Denn fast alle Cracker beherschen eine Prgrammierprache.


4.2
***
Nun nachdem wir wissen welche API Funktion benutzt wird, setzen wir einen "Breakpoint on execution" mit SoftICE. Diese Art von Breakpoint bewirkt das SoftIce gestartet wird wenn die angegebene Adresse ereicht ist, oder, wie in unserem Fall, wenn eine bestimmte Funktion ausgelst wird. Um solch einen Breakpoint zu setzten, startet man SoftIce und gibt ein:
"bpx enablewindow". Das bpx steht fr "Breakpoint on execution". Dann gehen wir aus SoftIce wieder heraus (mit F5) und verndern ein Textfeld. Und tatschlich ffnet sich SoftIce und zeigt markiert USER32!EnableWindow an. Dies ist die API Funktion. Doch wir wollen nicht die API Funktion selber, sondern das Programm, das diese Funktion aufruft. Und so drcken wir F11. Diese Taste bewirkt, das wir aus der aktuellen Funktion bzw. Unterprogramm herauskommen. 

 --------------------------------------------------------------------------------------
|Merke: Eine API Funktion ist immer ein Unterprogramm, aus dem man mit F11 herauskommt.|     
 --------------------------------------------------------------------------------------

								
4.3
***
Nun gut wir sind jetzt an folgender Stelle:
(die hier angegebenen Adressen gelten fr v2.23 von Winamp)
		.
		.
		.
(*01*)	:00401EC7	LEA	EAX, [EBP-80]		//[EBP-80] = Der eingegebene Name
(*02*)	:00401ECA	PUSH	EAX
(*03*)	:00401ECB	CALL 	004259B1		//Hier wird die Serial erzeugt
(*04*)	:00401ED0	CMP	EAX,ESI			//Vergleich von eingegebener Serial und richtiger Serial
(*05*)	:00401ED2	POP 	ECX
(*06*)	:00401ED3	JNZ	00401EDF		//Wenn sie nicht bereinstimmen gehe zu schelecht
(*07*)	:00401ED5	CMP 	BYTE PTR [EBP-80],00	//Wurde berhaupt ein Name eingegeben?
(*08*)	:00401ED9	JZ	00401EDF		//Wenn nicht gehe zu schlecht
(*09*)	:00401EDB	PUSH	01
(*10*)	:00401EDD	JMP	00401EE1
(*11*)	:00401EDF	PUSH	00
(*12*)	:00401EE1	PUSH	01
(*13*)	:00401EE3	PUSH	EDI
(*14*)	:00401EE4	CALL	[USER32!GetDlgItem]	//Auch eine API Funktion.
(*15*)	:00401EEA	PUSH	EAX
(*16*)	:00401EEB	CALL	[USER32!EnableWindow]   //Dies ist unsere API Funktion!
(*17*)	:00401EF1	XOR 	EAX,EAX
		.
		.	
		.		

Dies bedarf wohl einiger Erklrung: 

Allgemeines:

Register wie EAX oder ESI knne wie Variablen betrachtet werden. Alle Register werden in den ersten drei Zeilen von SoftIce angezeigt.

Ein Flag ist ein Signal. Die Flags werden unterhalb von ESI in SoftIce angezeigt. Ein Flag kann gesetzt oder nicht gesetzt sein. Falls es gesetzt ist, wird es von SoftIce hervorgehoben. Ein Flag gibt den Ausgang einer Befehls wieder. Das ZERO Flag (Z) gibt z.B. wieder ob der Befehl CMP erfolgreich war oder nicht. Wenn es gesetzt ist, sind die beiden Operanden gleich.
Zur genaueren Betrachtung von den verschiedenen Flags und der Aussagen komme ich ggf. spter einmal.




(*01*)	Der Befehl LEA kopiert die Adresse von einer Stelle im Speicher in ein Register. In diesem Fall kopiert er die 	Adresse des eingegebenen Namens in das Register EAX,

(*03*)	Der Befehl PUSH kopiert die Adresse des eingegebenen Namens auf den Stack. Was dies bedeutet wird in einen spterem 	Tutorial geklrt.

(*04*)	Der CALL Befehl ruft ein Unterprogramm auf. Dieses Unterprogramm kalkuliert die richtige Serial aus dem eingegeben Namen.

(*05*)	Der Befehl CMP vergleicht 2 Operanden. In diesem Fall ist es die eingegebene Serial mir der richtgen.

(*06*)	JNZ besagt, da das Programm zum angegebenen Punkt springen soll, wenn das ZERO Flag nicht gesetzt ist.

(*07*)	Wie wir vom ersten Befehl her wissen, ist der Name in [EBP-80] gespeichert. Diese Funktion vergleicht das erste Byte 	mit 00, um herauszufinden, ob berhaupt ein Name eingegeben wurde.

(*08*)	Wenn kein Name eingegeben wurde gehe zu der selben Stelle, wenn die Serial nicht richtig ist.

(*09*)	01 wird auf den Stack kopiert. Dies bedeutet das der "OK" Button aktiviert wird.

(*10*)	Das Programm jumpt zu Nummer 12.

(*11*)	Hier hin geht es immer wenn etwas nicht stimmt. Dies bedeutet, das der "OK" Button deaktiviert bleibt.

(*12*)	Hier wird wiederum 01 auf den Stack kopiert.

(*13*)	EDI wird auf den Stack kopiert.

(*14*)	Eine andere API Funktion, deren Zweck spter erklrt wird.

(*15*)	EAX wird auf den Stack kopiert.

(*16*)	Unsere API Funktion!! Hier wird entweder der Button aktivier oder auch nicht. Kommt darauf an, was vorher auf den 	Stack kopiert wurde. 

(*17*)	Hier landen wir, nachdem wir aus der Funktion EnableWindow herausgegangen sind. Alles was danach kommt ist uninteressant.

	  
Nachdem wir dies nun wissen, ist es ein leichtes die Serial herauszukommen: Man setzt einen Breakpoint auf die Adresse wo der Befehl CMP EAX,ESI sitzt indem man zweimal auf die Stelle mit der Maus klickt. Man geht aus SoftIce heraus und verndert etwas im Textfeld von der Serial. SoftIce erscheint und wir sind an der Stelle CMP EAX,ESI. Mit "? eax" lassen wir uns EAX anzeigen. Die zweite Zahl ist unsere Serial. Die erste Zahl zeigt das Register in Hex an, die zweite in dezimaler Schreibweise. Zum vergewissern "? esi" eingeben. Und tatschlich: Dort ist unsere falsche Serial. 

Das wars fr dieses Tutorial!



Ich bin fr Kritiken, Fehlermeldungen, Anregungen oder sonst irgendetwas zu diesem Tutorial offen.


Ich bin nur zu erreichen unter folgender E-Mail Adresse:
ger.tuts@redseven.de

16.07.199