sn00pee's game cracking tutorial #1
06.12.1998
!THIS TUTORIAL IS COMPLETELY WRITTEN IN GERMAN!
!Am besten anzusehen mit Notepad und Zeilenumbruch!

Inhaltsverzeichnis:
==================

I. 	Vorbereitungen
II. 	Algemeines zum Cracken
III. 	Jetzt geht's endlich los!
IV.	Wie geht's jetzt weiter? 
___________________________________________________________


I.


Was ist das hier berhaupt?
===========================
Also als erste Hallo erstmal ;-)...Dies ist ein deutsches Tutorial, dass ber das Spiele-Cracken handelt.

Warum?
======
Ich finde, es gibt viel zu wenig deutsche Tutorials bers Cracken. Als Anfnger steht man meitens nur dumm da und mu sich das meiste selbst beibringen. Deshalb habe ich mich entschlossen die Sache mal selbst in die Hand zu nehmen.

Fr wen ist dieses Tutorial?
============================
Ich gehe davon aus, dass der Leser(also DU,falls du es noch nicht gemerkt hast ;-)...jaja ich wei der Witz ist bld) noch keine Erfahrung in Sachen Spiele-Cracken hat. Wer sich schon zu den fortgeschrittenen Crackern zhlt, kann den grten Teil einfach berfliegen und sich dann spter das Wesentliche anschauen.

Bentige ich irgendwelche spezielle Kentnisse?
================================================
Eigentlich nicht, etwas Programmierwissen oder noch besser noch Assemblerkentnisse knnen jedoch sehr hilfreich sein.

Welche Programme bentige ich?
==============================
- W32DSM 8.9 (Disassembler)
- Hiew 5.XX 
Beide Tools kann man unter www.crackstore.com runterladen.

Was ist unser Opfer?
===================
Diesmal cracken wir SIN(amerikanische Version, wenn es berhaupt eine deutsche gibt). Die Grnde dafr liegen auf der Hand: 1) SIN scheint sich zu einem der Renner der 3D-Shooter-Szene zu entwickeln. Deshalb sollte es eigentlich kein groes Problem sein an das Spiel heranzukommen. 2) SIN hat den wirklich einfachsten Kopierschutz, den ich je gesehen habe, also ideal fr Einsteiger!

Sorry, wenn ich ein paar Reschtchraibfehla eingebaut habe...ich nehm's manchmal nicht so genau...je nach Lust und Laune

__________________________________________________________

II.


Allgemeines
===========
Als erstes: NIEMAND(auer er heit gONZo ;-)) wird innerhalb eines Tages oder einer Woche zum Meistercracker. Erfahrung gehrt zu den wichtigsten Tugenden eines Spielecrackers. Jeder Kopierschutz ist anders aufgebaut und erfordert seine eigene Vorgehensweise. Es gibt also kein Patentrezept mit dem sich jedes Game einfach so knacken lt...des weiteren (huhjujui...mein Deutsch wird ja immer besser<g>) solltest du eine gehrige Portion Geduld mitbringen...manchmal dauert es Stunden, das anderen mal dann nur Sekunden bis ich ein Spiel gecrackt habe, also mach dich nicht zum Lamer und schmeit deine Kiste aus dem Fenster nur weil der Jump nach dem Fehlercode mal wieder zum Absturz fhrt(ich bernehme natrlich keine Verantwortung :-)). 
Noch was zum Spiele-Cracken: Meiner Meinung nach ist Spiele knacken immer noch die kurzweiligste und interessanteste Weise zu cracken, auerdem ist die ganze Sache im Vergleich zu Serials-Suchen mit SoftICE(ach ja...ich werde in keinen von meinen Tutorials SoftICE behandeln, da es fr Spiele sowieso uninteressant ist und ich es selbst noch nie benutzt habe) noch recht einfach und ziemlich leicht nachvollziehbar.   
So genug gelabert, los geht's!

__________________________________________________________

III.

Da du jetzt wahrscheinlich schon ganz heit bist und es kaum erwarten kannst dein erstes Spiel zu cracken, geht's jetzt endlich mal ans Eingemachte.
Vorrausetzung ist, dass du eine Full-Installation gemacht hast(600MB).

Also als erstes erstellen wir eine Kopie von der SIN.EXE(am besten einfach im Explorer anklicken und dann STR-C und danach STR-V drcken, nun solltest eine eine Datei namens "Kopie von SIN.EXE" sehen).

So weiter geht's. Nun starten wir W32DSM un klicken auf "Disassembler/Open File to disassemble". Jetzt whlen wir die Kopie von SIN.EXE aus und klicken auf OK(Wichtig!!! NICHT die original SIN.EXE!). 
...je nach gre der Datei kann das Disassemblen sehr unterschiedlich lang dauern. Da ein angehender Meister-Cracker sowieso Gedult habe sollte, kannst du dir ja in der Zwischenzeit 'ne Pizza reinstopfen.

So, irgendwann ist der Disassembler dann fertig und du solltest jetzt einen Haufen von Hyroglyphen(ich hoffe das war richtig geschrieben ;-)) sehen. Das liegt einfach daran, dass du noch keine Schriftart gewhlt hast, da wir so natrlich nicht arbeiten knnen, beheben wir den Bug einfach in dem wir unter "Disassembler/Font/Select Font" eine geeignete Schriftart whlen.

Sodele...jetzt geht's schon viel besser, aber wahrscheinlich bist du jetzt auch nicht viel schlauer als vorher :-). 
Nun starten wir SIN(die SIN.EXE, ohne die CD, W32DSM einfach nebenbei laufen lassen!)
Nach einigen wilden Auflsungsrumschaltorgien(wow, das kling cool ;-)) sollten wir uns jetzt im Hauptmen befinden. Nun starten wir ein neues Single-Player Spiel und TATA! Wir bekommen eine schne Fehlermeldung, die uns darauf hinweist, dass wir doch bitte die CD einlegen sollen. So eine Frechheit lassen wir uns natrlich nicht bieten, anstatt dessen merken wir uns einfach den Fehlertext("You must have the SIN CD in the drive to play"). Nachdem wir SIN beendet haben, befinden wir uns wieder im good-ol' W32DSM. 

Wir klicken auf den "String Data Reference" Button und es ffnet sich ein kleines Fenster mit vielen lustigen Texten. Wir whlen den Text von der Fehlermeldung("You must have the SIN CD in the drive to play") und schlieen das kleine Fenster wieder. 
So...nun solltest du ungefhr das da hier sehen:

* Referenced by a CALL at Address:
:004568B4   

:0045BBB0 E8CBFEFFFF              call 0045BA80
:0045BBB5 803800                  cmp byte ptr [eax], 00
:0045BBB8 750F                    jne 0045BBC9

* Possible StringData Ref from Data Obj ->"You must have the Sin CD in the "
                                        ->"drive to play."
                                  |
:0045BBBA 685C014800              push 0048015C
:0045BBBF 6A00                    push 00000000
:0045BBC1 E8DA16FCFF              call 0041D2A0
:0045BBC6 83C408                  add esp, 00000008

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045BBB8(C)
|
:0045BBC9 C3                      ret
:0045BBCA 90                      nop
:0045BBCB 90                      nop
:0045BBCC 90                      nop
:0045BBCD 90                      nop
:0045BBCE 90                      nop
:0045BBCF 90                      nop

Der Rest ist fr uns unwichtig. So...jetzt gut aufpassen: als erstes solltest du berhaupt einmal wissen, was da steht. Sehr interessant ist der Jump vor der Fehlermeldung. H, Jump was isn ds? Also, Du siehst ja sicherlich die Zeile vor dem Fehlertext. Sie lautet 
jne 0045BBC9
Doch was bedeutet das? ganz einfach. Alles was mit einem j anfngt steht fr Jump. Jumps springen immer zu einer bestimmten Stelle im Programm. Es gibt mehrere verschiedene Jumps, die nur bei Erfllung einer bestimmten Bedingung ausgelst werden (Ich habe am Ende dieses Kapitels alle Jump-Befehle aufgelistet). jne steht fr "Jump if not equal". Das Programm prft also, wenn es an dieser Stelle angekommen ist, ob eine bestimmte Bedingung erfllt ist und berspringt die Fehlermeldung, wenn diese Bedingung nicht(!) erfllt ist. Die Bedingung wird in der vorherigen Zeile festgelegt:
cmp byte ptr [eax], 00
cmp steht fr Compare also Vergleich. Dieser Befehl vergleicht irgendetwas und stellt die Bedingung fr den Jump-Befehl. Was "byte ptr [eax],00" im einzelen bedeutet ist fr einen Anfnger noch unwichtig. 
Doch was sollen wir jetzt tun? Wieder ganz einfach. Wie wre es, wenn wir diesen jne-(Jump if not equal) in einen je-Jump verndern(Jump if equal)? Das Programm wrde dann die Fehlermeldung berspringen, wenn die Bedingung erfllt ist. Einleuchtend oder?

Doch nun geraten wir schon an die Grenzen von W32DSM. Zwar kann man mit diesem tollen Tool in den Code "hineinschnuppern", aber Vernderungen kann man nicht vornehmen. Dazu nehmen wir einfach ein anderes hilfreiches Programm: HIEW. HIEW erlaubt es uns den Programmcode zu verndern.
Wir rufen nun Hiew gefolgt von dem Verzeichnis und dem Dateinamen, in dem sich die SIN.EXE befindet(z.B. Du hast SIN in C:\SIN\ kopiert, in diesem Fall starten wir HIEW mit 
"hiew.exe C:\sin\sin.exe", wichtig! NICHT die Kopie sonder die original SIN.EXE). Am besten machst du das unter Start/Ausfhren. 
OK, wenn HIEW gestarted ist drcken wir F4 und whlen "Decode". Nun gehen wir wieder kurz zurck in W32DSM und bringen den Auswahlbalken mit Hilfe der Hoch/Runter Tasten auf den 
:0045BBB8 750F                    jne 0045BBC9
Befehl. In der Statusleiste unten sollte folgendes stehen(fr alle Dummies: die Leiste ganz unten in W32DSM):

Line:173525 Pg 2066 and 2067 of 2613 Code Data @ 0045BBB8 @Offset 0005AFB8h in File...

Wichtig ist fr uns die Adresse nach @Offset also 0005AFB8. Diese Adresse merken wir uns und gehen wieder zurck in HIEW. Nun drcken wir F5 und geben diesen Offset ein(0005AFB8).
Jetzt sehen wir im Prinzip das gleiche wie in W32DSM, jedoch etwas unbersichtlicher. Um den Code nun zu verndern drcken wir F3 und geben den HEX-Code fr "je" ein(siehe Tabelle am Ende dieses Kapitels). Dieser Code lautet 74. Nachdem wir diese Zahlenfolge eingegeben haben verndert sich wie von Geisterhand der Befehl rechts in "je 00005AFC9". Jetzt drcken wir F9 um die Datei zu updaten und dann F10 um HIEW wieder zu verlassen.

So...jetzt kommt der groe Augenblick. Wir starten SIN(mit der original SIN.EXE) und natrlich ohne CD ;-). Wir whlen Game/New Game und oh Wunder, KEINE Fehlermeldung! Das Spiel luft vllig normal und ohne CD.

So jetzt klopfen wir uns erst mal krftig auf die Schulter und genieen diesen tollen 3D-Shooter.  

Eine weitere Mglichkeit SIN zu cracken
=======================================
Eigentlich sollte man es ja in einem Anfnger-Tutorial nicht gleich bertreiben aber es gibt wie schon erwhnt immer mehrere Mglichkeiten ein Spiel zu cracken. Diesmal schalten wir den CD-Check durch ausNOPen eines calls aus. Dazu schauen wir uns noch einmal den Programmcode mit der Fehlermeldung an:

* Referenced by a CALL at Address:
|:004568B4   
|
:0045BBB0 E8CBFEFFFF              call 0045BA80
:0045BBB5 803800                  cmp byte ptr [eax], 00
:0045BBB8 750F                    jne 0045BBC9

* Possible StringData Ref from Data Obj ->"You must have the Sin CD in the "
                                        ->"drive to play."
                                  |
:0045BBBA 685C014800              push 0048015C
:0045BBBF 6A00                    push 00000000
:0045BBC1 E8DA16FCFF              call 0041D2A0
:0045BBC6 83C408                  add esp, 00000008

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0045BBB8(C)
|
:0045BBC9 C3                      ret
:0045BBCA 90                      nop
:0045BBCB 90                      nop
:0045BBCC 90                      nop
:0045BBCD 90                      nop
:0045BBCE 90                      nop
:0045BBCF 90                      nop

Wir richten unser Hauptaugenmerk auf die ersten beiden Zeilen:

* Referenced by a CALL at Address:
|:004568B4   

Doch was bedeutet das? Nun gut, ein call ruft immer einen bestimmten Teil des Programmcodes auf. "Referenced by a CALL" heit einfach, das dieser Programmteil von einem Befehl von einem anderen Programmpunkt aufgerufen wird. Dieser Befehl wird an der Adresse 004568B4 aufgerufen. Das schauen wir uns natrlich genauer an.
Wir whlen "Goto Code Location" unter dem Menpunkt "Goto" und geben 004568B4 ein. Nun landen wir hier:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00456895(U)
|
:004568B4 E8F7520000              call 0045BBB0

hmm...interessant. An dieser Stelle wird also der Programmcode mit der Fehlermeldung aufgerufen. Wir knnten doch einfach diesen call ausschalten, so dass die CDCheck-Routine gar nicht erst ausgefhrt wird! Kein Problem. Wir bringen den Auswahlbalken auf die Zeil mit dem call Befehl und notieren uns den Offset mit Hilfe der Statusleist(die Adresse lautet 00055CB4). Wir starten wieder HIEW gefolgt von dem Ort der SIN.EXE. Wenn HIEW erfolgreich gestarted ist drcken wir wieder F4 und whlen "Decode". Danach drcken wir F5 und geben die Adresse ein(0055CB4). Nun sind wir an dem Call angelangt, doch wie mache ich diesen nun unschdlich? Dazu benutzen wir den nop-Befehl. NOP steht fr "No-Operator". NOP- Befehle werden bei der Programmausfhrung wie ihr Name schon sagt einfach bersprungen, da sie keine Anweisungen beinhalten. 
OK jetzt machen wir uns an den Widerporst(ein Fachausdruck der leider nur sehr selten benutzt wirsd ;-)). In HIEW drcken wir F3 um den Programmcode zu verndern...jetzt bitte gut aufpassen: Der HEX-Code fr nop lautet 90. Nun knnen wir aber nicht einfach eine 90 reinschreiben und dann hoffen, dass alles gut geht, dies wrde i.A. zu einem schweren Ausnahmefehler fhren, an dem ausnahmsweise mal nicht Microsoft schuld wre ;-). Wir mssen beachten, dass der Hex-Code fr den auszunopenden call E8F7520000 lautet. Da dies 10 verschieden Stellen sind mssen wir auch 5 NOPs reinschreiben, da sonst der darauffolgende Code beeinflut wrde. Also tippen wir jetzt 9090909090 ein und drcken F9 gefolgt von F10. Wir starten SIN und siehe da! Keine CD-Check mehr.

Eine wichtige Anmerkung vom Autor
=================================
Du solltest jetzt nicht berheblich werden. SIN ist mit seinem sehr einfachen CD-Check eher eine Ausnahme. Du kannst ja mal versuchen, andere Spiele zu cracken und ich bin sicher, dass deine Erfolgsquote nicht ber 5% liegen wird. Aber das hier sollte ja auch nur ein Einstieg ins Spiele-Cracken sein, der Weg zum Super-Cracker ist oft sehr zeitaufwendig.

Jump Befehle(Hab ich aus tKC's Tutor #1 geklaut, ich hoffe, er ist mir nicht bse :-))
=====================================================================================
Hex:          Asm:      Means:
75 or 0F85    jne       jump if not equal
74 or 0F84    je        jump if equal
EB            jmp       jump directly to
90            nop       no operation
77 or 0F87    ja        jump if above
0F86          jna       jump if not above
0F83          jae       jump if above or equal
0F82          jnae      jump if not above or equal
0F82          jb        jump if below
0F83          jnb       jump if not below
0F86          jbe       jump if below or equal
0F87          jnbe      jump if not below or equal
0F8F          jg        jump if greater
0F8E          jng       jump if not greater
0F8D          jge       jump if greater or equal
0F8C          jnge      jump if not greater or equal
0F8C          jl        jump if less
0F8D          jnl       jump if not less
0F8E          jle       jump if less or equal
0F8F          jnle      jump if not less or equal

__________________________________________________________

IV.

Wie geht's jetzt weiter?
========================
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).

Links
=====
- http://www.crackstore.com ||Die Crack-Seite schlechthin! Unbedingt mal vorbeischauen!
- http://come.to/gcg || German Cracking Group. Mit coolem Brennboard!
- http://come.to/gsr || German Software Revenge, hnlich wie GCG
- http://welcome.to/CDR_ZONE || Fr alle die schon immer mal wissen wollten, wie man das 			        Spiel mit dem blden Kopierschutz brennt.
- http://home.pages.de/~hotrod114 || Du suchst Warez-CDs aus Deutschland??? Keine Problem! 				     Schau mal bei Hotrod vorbei.

Greetz
======

gONZo [gsr] - HA!!! Irgendwann schlag' ich dich doch noch in StrCraft
MAHADMA - dein Nick ist scheie, la dir mal was anderes einfallen <eg>
Milhouse - SIMPSONS 4EVER!!!
Harlequin - MMMUUUUHHHHHHH! <vbg>
HotRod - Mach weiter so und la dich nicht erwischen ;-)

Und an alle, die ich vergessen habe!

__________________________________________________________

written by sn00pee (independent cracker)
!Watch out for more SGC Tuts, coming soon!
