
			IIIIIIIIIIIIIIIII
		 	      II II
			      II II
			      II II
			IIIIIIIIIIIIIIIII O


sn00pee & GONZO's Game CRACKING TUTOR #2

19.12.1998
!THIS TUTORIAL IS COMPLETELY WRITTEN IN GERMAN!	(<- snOOpee)
!Am besten anzusehen mit Notepad und Zeilenumbruch!


Tach. Dies ist das offizielle GONZO cracking TUTORIAL.
So, nach der tollen Vorarbeit meines Freundes snOOpee kann ich gleich anfangen, allerdings kann es trotzdem sein,
da ich manches wiederhole oder anders formuliere.
Wie auch beim snOOpee hab auch ich als Deutscher so meine Probleme mit der Deutschen Rechtschreibung, also entschuldigt dies.

So kleine Unterbrechung hier wegen dem Format dieses Textes. Es ist nun mal so, da Disassembel-Texte sehr lang sind, und wenn ich dann noch Kommentare dahinter mache, wird das ziemlich lang. So kann es vorkommen, da ein Kommentar, da eigentlich hinter eine Zeile gehren sollte, in der nchsten Zeile erscheint.
Ich hab die Texte bei 1152 * 864 Pixel im Editor maximiert angesehen und es geht gut. Leider kann ich das aber nicht verhindern, da ihr die Texte bei kleinerer Fenstergre nicht richtig lesen knnt. Wrde ich alles verndern, ist die bersicht nicht mehr so gut. Verndert doch einfach die Schriftgre !

Warum cracken ?
==============================

Tja, warum ? Ich hab da folgende Meinung:
-Wenn ich ein Spiel gecrackt habe, habe ich gegen den Programmierer, Computer und Win9x gewonnen und habe sie besiegt
Und das erleichtert mich von den vielen Ausnahmefehlern und den stressigen Minuten/Stunden/Tagen.
-Ausserdem ist es auch eine Sache der Beliebtheit. Wenn viele Leute dein Crack benutzen, ist es schon toll.

Warum Spiele ?
==============================

Warum Spiele ? Es gibt doch SOO viel Software Cracking Tutors ? Tja, ich weis auch nicht warum aber Spiele cracken ist schwieriger (ich wei, snOOpee ist da anderer Meinung, aber ich denke ich kann ihn noch berzeugen, besonders nach S3 und EAW)  und man kann es besser gebrauchen.

Fr wen ist dieses Tutorial ?
==============================

Eigentlich fr die, die snOOpees Tutorial gelesen haben ...

Was es zu beachten gibt:
==============================

1. Klaue nie cracks !!!
2. Klau NICHTS. Das ist meiner Meinung nach einer der schlimmsten Sachen, die man berhaupt machen kann.
3. Gehe nie auf die andere Seite, die die gegen Cracker arbeiten (sowas solls auch geben),
denn du wirst VERLIEREN !!!

Was man braucht:
==============================

1. W32DSM 8.9 (Disassembler)
2. Hiew 5.XX oder einen Hex-Editor deiner Wahl (z.B. HexWorkshop)

Wann ist die beste Zeit zu cracken ?
==============================
Ich bevorzuge das Wochendende, da man da viel Zeit hat.

Was ist unser Opfer ?
==============================

Mech Warrior 2. Das ist nhmlich auch sau einfach ... (MechCommander wird schwieriger)

Und los gehts: 
Als erstes machen wir mal eine Vollinstallation. Ich liebe es schon whrend der Installation zu disassambeln ...
Dann, wie gesagt, disassembeln wir die KOPIE von MECH2.EXE. (<- snOOpees Cracking TUT beachten !)
Wenn wir damit fertig sind, starten wir das Spiel OHNE CD ber MECH2.EXE. Wir erhalten folgendes Text:

You must insert the MECHWARRIOR 2 CD into your CD-ROM drive.
			<- OK ->

Wir drcken auf OK und suchen in W32DSM 8.9 (wo wir immer noch Kopie von MECH2.EXE geffnet haben)
und schauen in der StringDataRef nach "You must insert the MECHWARRIOR 2 CD into your CD-ROM drive."
Wir finden zwar nur eine Referenz auf "You must insert the MECHWARRIOR", aber das macht uns nichts aus.
ACHTUNG: 	Es kann mehrere Referenzen, d.h. Bezge auf einen String geben als einen, also wenn man ein zweites mal
		auf den String drckt, kommt man eventuell an eine andere Stelle, wir nehmen hier den ERSTEN den man erhllt, guck halt auf
		den CodeOffset.
Wir doppelklicken auf die Zeile und finden uns bei folgendem Code wieder (jetzt kommen die AsmCodes):


:004015BD E85CFAFFFF              call 0040101E			<- CD CHECK
:004015C2 8845B0                  mov byte ptr [ebp-50], al	 <-
:004015C5 0FBE45B0                movsx eax, byte ptr [ebp-50]	  } Ergebniss berprfen
:004015C9 85C0                    test eax, eax			 -> (test eax, eax schalltet das 										    EMPTY-flag ein, falls eax 0 ist)
:004015CB 0F8519000000            jne 004015EA			<- jne = JUMP IF NOT EQUAL                                                            oder JUMP IF NOT EMPTY FLAG SET
:004015D1 6A10                    push 00000010						

* Possible StringData Ref from Data Obj ->"MECHWARRIOR 2"	<- Titel des Dialogfeldes
                                  |
:004015D3 6858D14000              push 0040D158

* Possible StringData Ref from Data Obj ->"You must insert the MECHWARRIOR "	
		                        <- THIS LEADS US HERE !!! Inhalt des Dialogfeldes ->
                                        ->"2 CD into your CD-ROM drive."
                                  |
:004015D8 6868D14000              push 0040D168
:004015DD 6A00                    push 00000000

* Reference To: USER32.MessageBoxA, Ord:0188h			
                                  |
:004015DF FF1500F24000            Call dword ptr [0040F200]	<- Dialogfeld aufrufen
:004015E5 E92E000000              jmp 00401618			<- Das Programm verlassen

* Referenced by a (U)nconditional or (C)onditional Jump at Address:	
								<- hier wird hingesprungen, wenn oben 									   	           der CD-CHECK geglckt ist
|:004015CB(C)
|
:004015EA 6A00                    push 00000000			<- im Programm weiter machen ...

Naja, wenn man das auf verstndliche weise niederschreibt, sieht das ungefhr so aus:

CD-CHECK
wenn CD-CHECK erfolgreich war, springe nach unten
	MessageBox mit dem Titel "MECHWARRIOR 2" und dem Inhalt "You must insert the MECHWARRIOR 2 CD into your CD-ROM drive.".
	Programm verlassen.
UNTEN: weiter mit dem Spiel

Naja, das einfachste wre doch, wenn man weitermacht, obwohl der CD-CHECK nicht erfolgreich war, oder ?
Das geht ganz einfach:

						statt

:004015BD E85CFAFFFF              call 0040101E			<- CD CHECK
:004015C2 8845B0                  mov byte ptr [ebp-50], al	 <-
:004015C5 0FBE45B0                movsx eax, byte ptr [ebp-50]	  } Ergebniss berprfen
:004015C9 85C0                    test eax, eax			 ->	
-> :004015CB 0F8519000000            jne 004015EA		<- Springe falls Test erfolgreich <-
:004015D1 6A10                    push 00000010		
				
						schreiben wir:

:004015BD E85CFAFFFF              call 0040101E			<- CD CHECK
:004015C2 8845B0                  mov byte ptr [ebp-50], al	 <-
:004015C5 0FBE45B0                movsx eax, byte ptr [ebp-50]	  } Ergebniss berprfen
:004015C9 85C0                    test eax, eax			 ->	
-> :004015CB 0F8419000000            je 004015EA		<- Springe falls Test NICHT 											erfolgreich <-
:004015D1 6A10                    push 00000010	

Das machen wir so: wir legen die blaue Leiste auf 
:004015CB 0F8519000000            jne 004015EA
und schauen nach dem @OFFSET unten in der Leiste.
Dann ffnen wir MECH2.EXE mit einem HexEditor, ich nehme dazu immer HexWorkshop.
Also in HexWorkshop drcke ich F5 und gebe den OFFSET ein, hier 9CB (das ->h<- in der Leiste hinter 9CB heisst nur HEXADEZIMAL und wenn ihr in Mathe aufgepasst habt, msstet ihr wissen was das heit ...)
allerdings muss man bei  HexWorkshop darauf achten, auf der LINKE Seite (die Seite mit den HexCodes) zu sein.
Da sehe ich dann dies 0F8519000000. Ich drck NACH-LINKS so da mein Cursor vor der 85 ist. Dann gebe ich 84 ein, so da jetzt
0F8419000000 da steht und speicher ab.	(weil 0F85+Addresse = JNE Addresse und 0F84+Addresse = JE Addresse (siehe JumpBefehle in SGCTUT 1))


ACHTUNG ! Wir haben das Spiel noch nicht gecrackt ! Wir klicken noch mal auf StrnRef. und dann doppelt auf "You must insert the MECHWARRIOR"
und kommen hierher (es muss eine andere Stelle sein, denn es gibt 2 Refs auf "You must insert ...") :

:00401855 E8C4F7FFFF              call 0040101E		<- CD-CHECK, gleiche Funktion wie oben !
:0040185A 0FBEC0                  movsx eax, al
:0040185D 85C0                    test eax, eax		<- TEST
:0040185F 0F851E000000            jne 00401883		<- wenn CD-CHECK erfolgreich, nach unten springen					
:00401865 6A10                    push 00000010

* Possible StringData Ref from Data Obj ->"MECHWARRIOR 2"	<- Titel
                                  |
:00401867 68E0D34000              push 0040D3E0

* Possible StringData Ref from Data Obj ->"You must insert the MECHWARRIOR "	<- THIS LEADS US HERE !!!  										                   kennen wir doch schon, oder ?
                                        ->"2 CD into your CD-ROM drive."
                                  |
:0040186C 68F0D34000              push 0040D3F0
:00401871 6A00                    push 00000000

* Reference To: USER32.MessageBoxA, Ord:0188h				<- Dialogfeld
                                  |
:00401873 FF1500F24000            Call dword ptr [0040F200]
:00401879 6A01                    push 00000001
:0040187B E8870D0000              call 00402607
:00401880 83C404                  add esp, 00000004

* Referenced by a (U)nconditional or (C)onditional Jump at Address:	<- nach erfolgreichem CD-CHECK
|:0040185F(C)
|									<- weiter mit Programm

* Possible StringData Ref from Data Obj ->"NETMECHW.DLL"
                                  |
:00401883 6830D44000              push 0040D430					


					Das ist jetzt ja wohl klar was wir machen:
	

:00401855 E8C4F7FFFF              call 0040101E		<- CD-CHECK, gleiche Funktion wie oben !
:0040185A 0FBEC0                  movsx eax, al
:0040185D 85C0                    test eax, eax		<- TEST
:0040185F 0F841E000000            je 00401883		<- wenn CD-CHECK NICHT erfolgreich, nach unten springen					
:00401865 6A10                    push 00000010

So, jetzt machen wir das selbe wie oben: HexEditor und auf Addresse gucken (C5Fh) und 0F851E000000 in
0F841E000000 ndern & abspeichern und MECH WARRIOR 2 ist gecrackt.

Wir probierens noch aus und wenn ihr alles richtig gemacht habt, mte jetzt keine Fehlermeldung mehr kommen
Juhu juhu juhu. Toll ich habs geschafft. Aber was ist, wenn ich die CD   DRIN   habe ? Naja, woll ma mal ausprobieren
und witzigerweise kommt DANN die Fehlermeldung. Ist ja auch klar, da wie statt JNE JE geschrieben haben ...
man muesste einen JMP einsetzen (<- ein JMP springt IMMER). Na gut. Dazu brauchen wie WIRKLICH HIEW.
Also wir ffnen (die schon gecrackte) MECH2.exe mit HIEW und gehen zum OFFSET 9CB mit F5. 
Dann drcken wir F4 und F3 fr "Decode" und sehen folgendes:

000009CB: 0F8419000000                 je     0000009EA   ---------- (3)

Wir drcken F3 fr "EDIT" und F2 fr "Asm"
da steht dann:
je     0000009EA

das ndern wir in 
jmp     0000009EA

und drcken ENTER und dann ESC.

jetzt steht da:
000009CB: E91A000000                   jmp    0000009EA

das selbe machen wir noch bei OFFSET C5Fh,
drcken F9 fr "UPDATE" und F10 fr "QUIT"
 und haben dann eine vollstndig gecrackte Version von MW 2 !!!

So, jetzt msst ihr nur noch einen Cracker mit der Hilfe von
Cracker 1.7 (<- code: GONZO) schreiben, der hier dabei ist und des wars.

Wie geht's jetzt weiter?
========================
snOOpee sagt hier : "Jetzt bist du gefragt! Da das hier mein erstes Tutorial berhaupt ist, wre ich ber konstruktive(!) Kritik, Anregungen oder einfach nur deine Meinung sehr erfreut. Je nachdem wie die Reaktion ist, wird es vielleicht weitere Folgen von sn00pee's game cracking tuts geben(mgliche Themen wren Spiele-Cracken mit Hilfe des Debuggers(keine Angst, kein SoftICE ;-)) oder wie man Spiele ohne Fehlertext in der String Data Reference knackt). "
Das selbe sag ich auch, folgende SPIELE kommen als nchstes:

MechCommander
HalfLife

Natrlich stimme ich auch mit snOOpee berein, wenn er sagt, da man nicht so schnell zum SpieleCracker wird,
aber ich denke da unsere Tutorials das erheblich beschleunigen.

TIPS:
========================
Wer viel mit HIEW arbeitet, hat das Problem, jedesmal die Datei und den Pfad einzugeben und so. Das laesst sich aber ganz einfach anders machen: Man erstellt eine Verknpfung auf dem Desktop zu HIEW und kann dann einfach die *.EXE (oder andere) Dateien auf das Symbol ziehen, und sie werden automatisch geffnet. Mir zumindest erspart es eine Menge Zeit .

GREETZ:
========================

sp. greetz to snOOpee :		(<- seine EMail ist sn00pee@gmx.net )
	thanx for e-mailing this shit and for going into the Internet
	Was soll das eigentlich heien du schlgst mich irgendwann in StrCraft ?
	Hast du doch schon mal (mit der Hilfe vom Mahadma und zu ZWEIT. HAHAHA) !
	Du bist aber auch nicht schlecht ... leider ...
Mahadma : snOOpee labert scheiss dein Nick ist gut, der soll sich mal einen fr dich ausdenken
Millhouse (Dr. Collossus oder was da noch alles war), 
ITSGALLUS,
HotRod ( <- kenn ihn zwar nicht pershnlich, aber was snOOpee so sagt ist er in echt in Ordnung)
Duke (Dahurler, becaused hes buzzed away so fast in QUAKE), 
Harlequin,
LONG DING DONG (nomen NOT est omen),
Diamond, 
(MK) "The Crow" (imtoostupidtohaveanicknameCrow),

to those who havent got a nickname !!! (i HATE this)
and to all Crackers

GROUPZ:
to RAZOR 1911, Phrozen Crew, CLASS,  GCG , GSR, UC (United Crazies)

Ich hoffe da GCG und GSR sich verbnden weil das WIRKLICH besser wre.


you can reach me via: emailGONZO@gmx.de 	
=======================================

EMailt mir wenn:
	ihr ein SUPPLIER werden wollt, weil ich und snOOpee da gerne was in diese Richtung unternehmen wollen ...
	ihr irgendwelche Probleme mit meinem Crack oder mit meinem Cracker 1.7 habt.
oder wegen sonst was !!!

EMailt mir NICHT wenn:
	ihr was bers brennen wissen wollt, denn : *italiano* ICH HABE GAR KEIN BRENNER !!!
	ihr irgendwelche zum cracken bentigten Programme bentigt und ICH sie euch EMailen soll !!!
	ihr mit mir ber die orthologische Notwenigkeit rechteckiger Strickfehler in braunen Sttzstrumpfhosen reden wollt !

bye, salut, tsch <# GONzO # >;
=======================

	
