*** German Cracking Tutorial for Quake II by Haplo ***
Haplo's Cracking Tutorial #3, 1.8.99

...see also Cracking tutorial #1 --- How to Crack Jagged Alliance 2
        and Cracking tutorial #2 --- How to Crack Star Wars Monopoly


Am besten zu sehen mit Vollbild und Zeilenumbruch.

VORWORT: Es gibt natrlich noch andere wege das spiel zu cracken... hier wird nur der einfachste (nicht der beste!!) gezeigt.
         Dieser Crack funktioniert nur mit der originalversion von Quake II. Er luft nicht bei bereits installierten 
         Updates!


Hallo
Ich bin Haplo und versuche dir anhand dieses Tutorials (und der anderen die ich bereits verfasst hab...) das cracken ein 
wenig nher zu bringen.
Dies ist ein deutsches tutorial in dem ich beschreibe wie man Quake II crackt, also in diesem fall die CD-Abfrage entfernt. 
In diesem Fall ist das sehr einfach...
Dies sind die Programme die du bentigst:

- Quake II                         ***    Gibts in jedem Computerladen, bei Freunden, oder in der Videothek
- W32Dasm   (der Dissamemblierer)  ***    Gibts bei www.crackstore.com
- Hiew      (der Hexeditor)          ***    Gibts bei www.crackstore.com

- Dissambliererkenntnisse (muss nicht, wre aber besser/ asscodes.txt lesen!!)



INSTALLIEREN
-------------------
Als erstes musst du Quake II VOLLinstallieren und von der Datei "Quake.exe" eine Sicherheitskopie machen falls was 
schiefluft. Dann startest du Quake II OHNE CD. Du whlst "Game" und irgendeine Schwierigkeitsstufe. Sofort bricht das Spiel 
mit folgender Meldung ab : "You must have the Quake2 CD in the drive to play."
Diese Fehlermeldung notieren. Sie ist der anhaltspunkt anhand der wir die CD-Abfrage wiederfinden, denn diese wird VOR der 
Fehlermeldund durchgefhrt. Finden wir jetzt die Fehlermeldung im Spiel wieder, haben wir auch die CD-Abfrage!


W32DASM
-----------
Dann W32Dasm laden und die Datei Quake.exe Disassemblieren. Danach auf "StrnRef" drcken (befindet sich neben dem 
Druckersymbol) und in der darauf erscheinenden liste die Fehlermeld8ung suchen. In dieser Liste sind alle Strings, also Texte 
die im Spiel vorkommen, aufgefhrt. Da sie alphabetisch geordnet sind kannst du sofort nach ganz unten scrollen.
Aus Platzgrnden wird nicht die ganze Meldung angezeigt. Du msstest also : "You must have the Quake2 CD in " finden.
Darauf machst du einen Doppelklick und klickst dann auf "Close". Du landest dann im folgendem Bildausschnitt (muss eventuell 
mit Pfeiltasten zurechtgerckt werden):



* Referenced by a (U)nconditional or (C)onditional jump at Address:
|:0042B21E(C)
|
:0042B235   8A442404           mov al, byte ptr [esp+04]
:0042B239   FEC0               inc al
:0042B23B   3C7A               cmp al, 7A
:0042B23D   8A442404           mov byte ptr [esp+04], al
:0042B241   0F8E6AFFFFFF       jle 0042B1B1

* Possible StringData Ref from Data Obj -> "You must have the Quake2 CD in "
                                        -> "the drive to play."


Hier wird der Kasten mit der Fehlermeldung aufgebaut. Dieser teil ist fr uns unwichtig. Uns interessiert nur von wo der Befehl zum aufbau der Fehlermeldung stammt. Das sehen wir unter dem "Referenced by...".
Da steht : 0042B21E
Also auf "Goto" und "Goto Code Location" klicken und diese Nummer eintippen.
Dann landen wir an folgender stelle:



* Possible StringData Ref from Data Obj -> "r"
                                  |
:0042B20E   68A8474400         push 004447A8
:0042B213   50                 push eax
:0042B214   E897250000         call 0042D7B0
:0042B219   83C408             add esp, 00000008
:0042B21C   85C0               test eax, eax
:0042B21E   7415               je 0042B235
:0042B220   50                 push eax
:0042B221   E86A200000         call 0042D290
:0042B226   83C404             add esp, 00000004
:0042B229   8D4C2404           lea ecx, dword ptr [esp+04]
:0042B22D   51                 push ecx
:0042B22E   FFD6               call esi
:0042B230   83F805             cmp eax, 00000005
:0042B233   7421               je 0042B256


Hier braucht es ein paar erklrungen... also nochmal:



* Possible StringData Ref from Data Obj -> "r"      (unwichtig, nur zur orientierung hier...)
                                  |
:0042B20E   68A8474400         push 004447A8        (unwichtig)
:0042B213   50                 push eax             (unwichtig)
:0042B214   E897250000         call 0042D7B0        (unwichtig)
:0042B219   83C408             add esp, 00000008    (unwichtig)
:0042B21C   85C0               test eax, eax        (test?? Hier testet er wahrscheinlich ob ne CD vorhanden ist...)
:0042B21E   7415               je 0042B235          (und hier springt er zur Fehlermeldung wenn keine vorhanden ist)
:0042B220   50                 push eax             (push = Speichern / Warum speichert er das ergebnis der CDabfrage??)
:0042B221   E86A200000         call 0042D290        (und hier wird was aufgerufen... wahrscheinlich ne 2. CD-Abfrage)
:0042B226   83C404             add esp, 00000004    (unwichtig)
:0042B229   8D4C2404           lea ecx, dword ptr [esp+04]  (unwichtig)
:0042B22D   51                 push ecx             (unwichtig)
:0042B22E   FFD6               call esi             (unwichtig)
:0042B230   83F805             cmp eax, 00000005    (unwichtig)
:0042B233   7421               je 0042B256          (unwichtig)


Also nochmal zusammengefasst:

test eax, eax    <--- testet ob ne CD vorhanden ist
je 0042B235      <--- wenn nicht vorhanden springt er zur Fehlermeldung
push eax         <--- speichert das ergebnis
call 0042D290    <--- und ruft noch ne Routine auf

Es wre eigentlich unsinnig das ergebnis der CD-Abfrage zu speichern wenn er es nicht noch gebrauchen wrde. Wahrscheinlich 
wird bei "Call 0042D290" das ergebnis noch mal durchgecheckt... Also mssen sowohl das "JE" als auch das "Call" komplett 
verschwinden.

Also auf das je einen doppelklick machen. Die Zeile msste makiert sein... Dann am unteren Bildschirmrand die Zahl hinter 
"Offset" notieren. das kleine "h" kann weggelassen werden. Die Zahl msste "0002A61E" lauten.
W32Dasm wird nun nicht mehr gebraucht und kann geschlossen werden.


HIEW
----------
Nun Hiew laden und die Datei Quake.exe laden. Du msstest nun einen hnlichen Code wie in W32Dasm sehen. Wenn nicht dann F4 drcken und "Decode" whlen.
Dann F5 drcken und die gerade notierte Adresse "0002A61E" eintippen und besttigen.
In den oberen 3 Zeilen siehst du nun wieder das bekannte spiel:

0002A61E: 7415           je 00002A635
0002A620: 50             push eax
0002A621: E86A200000     call 00002C690

Aha, das kenn wir doch schon.
Also drcken wir F3 und berschreiben die "7415" mit "9090" (90 steht fr "nop" / no operation-keine funktion)
Damit wre das je schon mal weg... Dann drckst du F9 um zu speichern. Der Code sieht dann folgendermasen aus:

0002A61E: 90             nop
0002A61F: 90             nop
0002A620: 50             push eax
0002A621: E86A200000     call 00002C690

Nun bewegst du den Cursor mit den Pfeiltasten ber die "E8" von "Call". Dann drckst du wieder F3 und berschreibst die 
"E86A200000" mit "9090909090". Dann drckst du wieder F9 zum speichern und F10 zum beenden.
Danach startest du Quake II mit modifizierten Datei. Und siehe da... es luft.


SCHLUSSWORT
---------------
Nicht jedes Spiel ist so leicht zu cracken wie Quake II. Mach von jeder EXE-Datei die du editierst eine Sicherheitskopie!! Sollte mal was daneben gehen musst du's nicht neu installieren. Ich hoffe ich konnte dir das cracken etwas nherbringen. Das cracken erfordert allerdings viel bung. 
In der beiliegenden Textdatei "asscodes.txt" hab ich die hufigsten Anweisungen im Hex und Assemblerformat mal zusammengefasst.
Ich danke an dieser stelle Virus99 das er mich darauf aufmerksam gemacht hat das in Quake II ein kopierschutz existiert.
Da ich das AMDK6-2 3DNow Update installiert hatte ist mir das nie aufgefallen, da in dem Update die CD-Routine nicht mehr 
vorhanden ist.

Sollten noch fragen sein dann mail an Haplo20@gmx.de

Ich hoffe ich habs so einfach wie mglich erklrt, bei Kritik oder Wnschen fr mein nchstes Tutorial mail mir (Adresse schon erwhnt).

Ok, ich sag dann Ciao, werd ein guter cracker, und wenn du einer bist dann schreib Tutorials!!
So hab ich mir auch das Cracken beigebracht!


Haplo


