*** German Cracking Tutorial for Jagged Alliance 2 by Haplo ***
Haplo's Cracking Tutorial #1, 27.6.99

Am besten zu sehen mit Vollbild und Zeilenumbruch.

Hallo ersteinmal. Ich bin Haplo und werde dir hiermit (hoffentlich) auf deinem weg als Cracker ein wenig helfen.
Was ist das hier berhaupt?? - Ein deutsches Tutorial wie man "Jagged Alliance 2" crackt, also die CD-Abfrage entfernt.
Ich habe Jagged Alliance 2 gewhlt weil die CD-Abfrage sehr simpel ist und das Spiel einfach klasse ist. Also, fangen wir mal an. Dies sind die Programme die du dafr bentigst:

- Jagged Alliance 2 (nur Install-CD reicht)      ***    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)
- Einen Rechner  (brauchst du auf jeden Fall!!)  ***    gibts in jedem PC-Laden   :)





INSTALLIEREN DES SPIELS
-----------------------
Als erstes installierst du "Jagged Alliance 2" (voll!!) und startest das Spiel OHNE CD.
Und?? Genau wie erwartet, ein hinweis sagt das du die PLAY-CD einlegen sollst. Diese Fehlermeldung wird vom Programm
nach der CD-Prfung aufgerufen, also haben wir einen hinweis wo die CD-Prfung ist! Also: Fehlermeldung merken, oder 
besser: notieren! Fehlermeldung lautet: "Die Jagged Alliance 2 PLAY CD wurde nicht gefunden. Das Programm wird jetzt 
beendet."

W32DASM
-------

Als nchstes machst du eine kopie von Ja2.exe falls was schiefluft. Dann startest du "W32Dasm" und klicken auf 
"Dissambler" und "Open File to Disassemble..." und whlst "Ja2.exe". W32Dasm wird eine weile brauchen um Ja2.exe einzulesen.
Wenn das Programm eingelesen ist, dann klickst du auf StrnRef. Der Knopf ist oben rechts neben dem Druckersymbol.
In der darauf erscheinenden Liste suchst du die Fehlermeldung. Der Text ist alphabetisch geordnet. Aus Platzgrnden
werden immer nur die ersten Wrter angezeigt. Nach ein wenig suchen wirst du : "Die Jagged Alliance 2 Play CD " finden.
Das klickst du doppelt an und schliesst das Fenster. Dann scrollst du mit den Pfeiltasten ein paar Zeilen hoch, bis du



* Referenced by a (U)nconditional or (C)onditional Jump Address:
|:0040B2B8(U)
|
:0040B2CC  84C0			test al, al
:0040B2CE  7534			jne 0040B30A

* Possible Stringdata Ref from Data Obj ->"Die Jagged Alliance 2 Play CD "
                                        ->"wurde nicht gefunden. Das Programm "
                                        ->"wird jetzt beendet."

findest. Hier wird das vorhandensein der CD berprft und das Spiel eventuell beendet. Hier nocheinmal vereinfacht 
ausgedrckt:


* Referenced by a (U)nconditional or (C)onditional Jump Address:
|:0040B2B8(U)
|
:0040B2CC  84C0			test al, al      <---- Teste ob CD nicht vorhanden
:0040B2CE  7534			jne 0040B30A     <---- wenn nicht keine CD vorhanden springe nach 0040B30A (start des Spiels)
                                                 <---- wenn keine CD vorhanden dann schreibe:
* Possible Stringdata Ref from Data Obj ->"Die Jagged Alliance 2 Play CD "  
                                        ->"wurde nicht gefunden. Das Programm "
                                        ->"wird jetzt beendet."


Das Krzel "jne" steht fr "Jump if not equal", also "springe wenn nicht gleich". Bei "TEST al, al" prft er ob keine CD 
vorhanden ist. Bei "JNE" prft er ob nicht keine CD vorhanden ist. Ist nicht keine CD vorhanden, also ist eine CD vorhanden
springt er nach 0040B30A, ansonsten schreibt er den Hinweis aus und schmeisst dich aus dem Programm raus. 

Klicke jetzt zweimal auf das "JNE". Der Balken sollte sich jetzt in diese Zeile bewegen. Wenn nicht, musst du ihn mit den 
Pfeiltasten in die richtige position bewegen. Am unteren Bildschirmrand stehen jetzt eine menge Sachen. Den Code der nach
dem "@Offset" steht musst du notieren. das kleine "h" kannst du weglassen. Das steht fr "hex". 
Er msste : "0000A6CE" lauten.

Nun klickst du nocheinmal auf StrnRef und whlst nocheinmal "Die Jagged Alliance 2 Play CD " aus. Sollte es zwei 
CD-Abfragen geben, wrden wir die zweite jetzt finden. Und voila! Es gibt wirklich eine zweite.
Nun drfte der Bildschirm folgendermassen aussehen:


* Referenced by a (U)nconditional or (C)onditional Jump Address:
|:0040B4C5(C), :0040B5C1(C), :0040B50A(C), :0040B513(C)
|

[...] <--- Hir steht nichts wichtiges

:0040B55A    84C0		test al, al
:0040B55C    7535		jne 0040B593
                                                       
* Possible Stringdata Ref from Data Obj ->"Die Jagged Alliance 2 Play CD "  
                                        ->"wurde nicht gefunden. Das Programm "
                                        ->"wird jetzt beendet."
                                  |

Hier ist genau diegleiche Abfrage wie du sie schon einmal gesehen hast. Also, wieder auf "JNE" klicken und die Nummer
hinter "@Offset" notieren. Das kleine "h" kannst du wieder weglassen. Der Code msste "0000A95C" lauten.
Nun klickst du nocheinmal auf StrnRef und whlst schonwieder "Die Jagged Alliance 2 Play CD " aus. Sollte es noch eine 
dritte CD-Abfrage geben, wrden wir die auch jetzt finden. Und schonwieder voila! Es gibt wirklich noch eine dritte.
Nun drfte der Bildschirm folgendermassen aussehen:


* Referenced by a (U)nconditional or (C)onditional Jump Address:
|:0052CEF8(U)
|
:0052CF3C  84DB			test al, al
:0052CF3E  753C			je 0052CF7C

* Possible Stringdata Ref from Data Obj ->"Die Jagged Alliance 2 Play CD "
                                        ->"wurde nicht gefunden. Das Programm "
                                        ->"wird jetzt beendet."
                                  |

Die Abfrage ist so hnlich wie die vorherigen, nur hier wird nicht abgefragt ob nicht keine CD vorhanden ist, sondern hier wird Abgefragt ob eine CD vorhanden ist. Sollte eine CD vorhanden sein dann springt er. Das Krzel "JE" steht fr "Jump if equal", "springe wenn gleich". Auch hier auf "je" klicken und die nummer hinter "@Offset" notieren. Das kleine "h" kann auch hier weggelassen werden. Der Code msste "0012C33E" lauten. Nun wieder auf StrnRef klicken und wieder auf "Die Jagged Alliance 2 PLAY CD " klicken. Wer htte es gedacht, es existiert noch eine CD-Abfrage. Der Bildschirm sollte folgndermassen aussehen:

* Referenced by a (U)nconditional or (C)onditional Jump Address:
|:0052CFA8(C), :0052CFE8(C)
|
:0052CFEC  84DB			test al, al
:0052CFEE  753C			je 0052CF7C

* Possible Stringdata Ref from Data Obj ->"Die Jagged Alliance 2 Play CD "
                                        ->"wurde nicht gefunden. Das Programm "
                                        ->"wird jetzt beendet."
                                  |

Diese Abfrage ist genau wie die 3. Abfrage. Also, wieder auf "JE" klicken und nummer hinter "@Offset" notieren.
Hier msste der Code "0012C3EE" lauten.
Dann wieder auf StrnRef klicken und wieder auf "Die Jagged Alliance 2 PLAY CD " klicken. Ein Blick auf die Scroll-
leiste an der Seite zeigt uns das wir wieder am Anfang des Programms sind. Zur Sicherheit in dem erschienenden Bildschirm
auf das "JNE" ber der Fehlermeldung klicken und die "@Offset"-Nummer ansehen. Stimmt, es ist dieselbe wie die der ersten Fehlermeldung. Also sind wir durch. Du msstes nun 4 Codes notiert haben: 0000A6CE
									  0000A95C
									  0012C33E
									  0012C3EE

Nun kannst du W32Dasm beenden und Hiew laden. Dann die Datei "JA2.EXE" laden. Du msstes einen hnlichen Code wie in W32dasm sehen, wenn nicht dann drckst du F4 und whlst im folgenden Men mit den Pfeiltasten "DECODE" und besttigstmit RETURN.
Dann drckst du F5 und gibst den ersten der Codes ein. 
Du msstes nun in folgender Zeile sein:  0000A6CE: 753A		jne	00000A70A   --------- (1)



Zur erklrung nocheinmal:     0000A6CE: 753A	       	jne	00000A70A   --------- (1)
                                  |       |              |          |
                             Position in  |         Anweisung im    |
                            der EXE Datei |        Assemblerformat  |
                                          |      (jump if not equal)|
                                    Anweisung im                    |
                                     Hexformat                Gibt an wohin er 
                                                             springen soll wenn
                                                        nicht keine CD vorhanden ist

Zu Deutsch steht in dieser Zeile : "Springe wenn nicht keine CD vorhanden ist zum Start des Spiels"
Wenn wir das "springe wenn nicht" (jne) in ein "springe wenn" (je) ndern steht da: "Springe wenn keine CD vorhanden ist 
zum Start des Spiels" Also muss anstelle von JNE ein JE hin. 
Der Code im Hexformat fr diese Zeile lautet : 753A
Das 75 steht fr "JNE", das 3A steht fr die Position wohin er springen soll.
Also mssen wir das 75 (was jne heisst) in ein 74 (was je heisst) ndern. Eigentlich logisch, oder?? Wenn nicht, dann 
letzten Absatz sooft lesen bis er klar ist!! Er ist das wichtigste am Tutorial.
Dazu drckst du in Hiew F3, und bewegst den Cursor mit den Pfeiltasten unter die "5" von "75". Dann drckst du "4". Die Zeile msste nun wie folgt aussehen: 0000A6CE: 743A	       	je 	 00000A70A   --------- (1)
Nun mit F9 speichern. 
Dann F5 drcken und den zweiten Code eingeben. Nun nach selben prinzip vorgehen. F3 drcken, "75" in "74" ndern und mit F9 speichern.
Nun F5 drcken und den dritten Code eingeben. Diese Zeile sieht wie folgt aus:

        0012C33E: 743C	         je	  00012C37C   --------- (1)
           |       |              |          |
      Position in  |         Anweisung im    |
     der EXE Datei |        Assemblerformat  |
                   |        (jump if equal)  |
             Anweisung im                    |
              Hexformat                Gibt an wohin er 
                                      springen soll wenn
                                    keine CD vorhanden ist

Hier steht auf Deutsch: "Springe wenn keine CD vorhanden ist zur Fehlermeldung". Daraus machen wir "Springe nicht wenn keine CD vorhanden ist zur Fehlermeldung" Also machen wir aus "springe wenn" (je) ein "springe nicht wenn" (jne).
Dazu wieder F3 drcken und aus "74" ein "75" machen und mit F9 speichern.
Nun F5 drcken und den vierten und letzten Code eingeben. Diese Abfrage funktioniert nach demselben Prinzip wie die dritte.
Wieder F3 drcken, aus "74" ein "75" machen und mit F9 speichern. Dann F10 drcken um Hiew zu beenden. Die EXE-Datei nun ins Jagged Alliance-Verzeichniss kopieren und starten. VORSICHT: Dieser Crack kehrt die CD-Abfrage nur um! Sollte sich die Jagged Alliance 2 CD im Laufwerk befinden kommt die Fehlermeldung. Bei diesem Crack wurde die CD-Abfrage nur vertauscht. Sollte sich eine CD im Laufwerk befinden kommt die Fehlermeldung, sollte sich keine im Laufwerk befinden startet er das Spiel.

Also Ja2.exe starten und voila! Das Spiel luft ohne CD.
Jetzt nur noch mit irgendeiner Programmiersprache einen Patch programmieren (oder mit einer Patchengine) und verffentlichen.


Schlusswort
-----------
Nicht jedes Spiel ist so leicht zu cracken wie Jagged Alliance 2. 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. Solltest du noch mehr bers cracken erfahren wollen, dann lies mein nchstes Tutorial : "Cracking StarWars Monopoly". Es wird wahrscheinlich mitte August erscheinen.
In der beiliegenden Textdatei "asscodes.txt" hab ich die hufigsten Anweisungen im Hex und Assemblerformat mal zusammengefasst.

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

Man kann das Spiel auch so cracken das es egal ist ob du eine CD eingelegt hast oder nicht, das heisst, die CD-Abfrage wird nicht umgekehrt sondern komplett entfernt. Solltest du wissen wollen wie das geht, 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 2x 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