CCCCC RRRRR  AAAAAA CCCCC KKKKK II NNN NN GGGGGG   TTTTTT UU  UU TTTTTT          333333
CCCCC RR  RR AA  AA CCCCC KKK   II NNNNNN GG  GG   TTTTTT UU  UU TTTTTT   # #        33
CC    RR  RR AA  AA CC    KK    II NN NNN GG         TT   UU  UU   TT    #####   333333
CC    RRRRR  AAAAAA CC    KKK   II NN NNN GG GGG     TT   UU  UU   TT     # #        33
CCCCC RR RR  AA  AA CCCCC KKKK  II NN  NN GG  GG     TT   UUUUUU   TT    #####       33
CCCCC RR  RR AA  AA CCCCC KK KK II NN  NN GGGGGG     TT   UUUUUU   TT     # #    333333
____________________________________________________________________________________________

gONZo & sn00pee's game cracking tutorial # 3 (GSGCTUT#3)
18.01.1999
written by sn00pee

!THIS TUTORIAL IS COMPLETELY WRITTEN IN GERMAN!
!Am besten anzusehen mit Notepad und Zeilenumbruch!

Inhaltsverzeichnis
==================
I. Was wir heute machen und was fr Tools wir bentigen 
II. Los geht's!
III. Schluss...Anmerkungen...

____________________________________________________________________________________________

Was ist neu am Tutorial?
========================
Wie du sicher bemerkt hast, ist das hier nun eine Gemeinschaftsarbeit zwischen mir und meinem guten Freund *schleim* gONZo(GCG). Warum das? Weil wir glauben, dass wir zusammen mehr bewegen knnen und es dir leichter machen.


Was fr Programme bentigen wir?
================================
- W32DSM 8.9
- HIEW X.XX
beides bekommst du unter www.crackstore.com
- und natrlich das "Opfer" <eg>. Heute ist Mech Commander(diemal die deutsche Version) dran. Jaja ich wei, dass MC schon etwas angestaubt ist...aber momentan hab' ich nix anderes brauchbares.

Anmerkung
=========
Wer noch nie gecrackt hat oder wenig Ahnung vom Spiele-Cracken hat sollte sich UNBEDINGT mein erstes Tutorial lesen(GSCGTUT#1). Ich werde in diesem Teil nicht mehr auf die elementaren Dinge des cracken eingehen.

Was ist diesmal dran?
=====================
Heute erklr' ich mal wie man Spiele crackt, die keinen Fehlertext in der String Data haben.
Lange Rede kurzer Sinn, los geht's:

____________________________________________________________________________________________

Und ab geht die Post. Als erstes installieren wir Mech Commander mit allen mglichen Optionen-> also Vollinstallation.

Nach wir das erledigt haben machen wir eine Kopie von der mechcmdr.exe und disassemblen sie. Nach ein Weile sehen wir dann den Source Code vor uns.

Als Wannabe-Cracker(is nich bse gemeint ;-)) starten wir jetzt Mech Commander, wer sich jetzt wundern, weil er keine Fehlermeldung kriegt und das Spiel einwandfrei luft sollte mal scharf nachdenken und sein CD-Laufwerk nach einer MC-CD checken :-), das ist jedem Cracker schon mal passiert.
Jetzt aber Spa bei Seite(obwohl das mal wieder gar nicht witzig war), nachdem wir Mech Commander gestartet haben sollten wir folgenden Fehlertext bekommen:
_________________________________________________________
|                                                        |
|Bitte legen Sie die Mechcommander-CD in das CD-Laufwerk!|
|                                                        |
|  <Wiederholen>                   <Abbrechen>           |
|                                                        |
---------------------------------------------------------

Hmm...wir durchsuchen jetzt einfach mal die String-Data nach "Bitte legen Sie die Mechcommander-CD in das CD-Laufwerk!" und grosse berraschung: Keine Fehlertext!!! Da haben sich wohl einige freche Programmmierer einen netten Schutz eingebaut, aber jetzt kommt der Hammer: Auch solche Programme kann man cracken ;-), ich wei wie, ihr nicht hehe, wenn ich jetzt fies wre dann wrde das Tutorial hier an dieser Stelle enden! Aber du hast Glck, ich habe heute nmlich einen guten Tag und werde das Geheimnis lften.

"GetDriveType" heit das Zauberwort! "Nan! So was gab's bei uns frher net!" <-- Ossi
Nun stellt sich eben die Frage was GetDriveType bedeutet? Also...GetDriveType ist eine API-Funktion, alle Win-Programmierer sollten eigentlich wissen von was ich rede, an alle anderen: API Funktionen sind vom Betriebssystem(Win9x) bereitgestellte Funktionen fr Windows-Programmierer. Mit ihrer Hilfe kann man z.B. Fenster erstellen und Nachrichten von Fenster zu Fenster schicken. 
GetDriveType ist eine von Programmierern hufig in CD-Check Routinen verwendete Funktion. Glcklicherweise kann man mit W32DSM diese API-Funktionen leicht aufspren.

Also was schlieen wir daraus??? Ganz einfach(wie immer): Wir suchen einfach mit Hilfe von W32DSM nach einer GetDriveType-Funktion im MC-Code. Und so geht's:

Wir klicken in W32DSM auf den "Imports"-Button und es ffnet sich ein Fenster wie bei der String Data Reference. Wir scrollen runter bis zu "Kernel32.GetDriveTypeA" und machen einen Doppelklick darauf. Nun sollten wir uns hier befinden:


:0041EA32 8B3534025700            mov esi, dword ptr [00570234]

* Reference To: USER32.MessageBoxA, Ord:0195h                         <- ebenfalls API
                                                                         
:0041EA38 8B1D64025700            mov ebx, dword ptr [00570264]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041EB3C(C)
|
:0041EA3E 807C24105A              cmp byte ptr [esp+10], 5A
:0041EA43 7F61                    jg 0041EAA6

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041EAA4(C)
|
:0041EA45 85FF                    test edi, edi
:0041EA47 0F85F5000000            jne 0041EB42
:0041EA4D 8D442410                lea eax, dword ptr [esp+10]
:0041EA51 50                      push eax

* Reference To: KERNEL32.GetDriveTypeA, Ord:00DFh                     <- das issa! 
                                  |
:0041EA52 FF15F0005700            Call dword ptr [005700F0]
:0041EA58 83F805                  cmp eax, 00000005
:0041EA5B 753B                    jne 0041EA98

* Possible StringData Ref from Data Obj ->".smk"
                                  |
:0041EA5D 682C575800              push 0058572C
:0041EA62 8D4C2414                lea ecx, dword ptr [esp+14]

* Possible StringData Ref from Data Obj ->"\data\movies\opening"        <-interessant gell?
                                  |
:0041EA66 6834575800              push 00585734
:0041EA6B 51                      push ecx
:0041EA6C 8D4C2420                lea ecx, dword ptr [esp+20]
:0041EA70 897C2420                mov dword ptr [esp+20], edi
:0041EA74 E887BE0200              call 0044A900
:0041EA79 8B542414                mov edx, dword ptr [esp+14]
:0041EA7D 52                      push edx
:0041EA7E E87D330000              call 00421E00
:0041EA83 83C404                  add esp, 00000004
:0041EA86 85C0                    test eax, eax
:0041EA88 7405                    je 0041EA8F

Wir haben es hier mit einem ganz typischen CD-Check-GetDriveType zu tun. Zum besseren Verstndnis nochmal der Code:

* Reference To: KERNEL32.GetDriveTypeA, Ord:00DFh                    
                                  |
:0041EA52 FF15F0005700            Call dword ptr [005700F0]
:0041EA58 83F805                  cmp eax, 00000005
:0041EA5B 753B                    jne 0041EA98

Ein GetDriveType gefolgt von einem "cmp eax, 00000005"-Befehl ist zu 99% ein CD-Check, da 00000005 fr CD-Laufwerk steht. Doch was macht die GetDriveType-Funktion berhaupt??? Also sie berprft was fr ein Gert sich hinter einem Laufwerksbuchstaben versteckt, z.B. setzt man diese Funktion auf den Laufwerksbuchstaben d: an, dann verrt sie, ob d: eine Festplatte, ein CD-Laufwerk oder sonstiges ist. So lt sich als Programmierer natrlich ganz einfach checken, ob der Spieler sein Spiel von einer CD oder von einer Festplatte aus installiert hat, trifft letzteres zu, dann schnappt die Falle zu. 
Doch jetzt kommt was ganz wichtiges, wenn man erst mal in der CD-Check Routine ist(so wie wir jetzt), dann ist der GetDriveType vllig uninteressant! Wir benutzen ihn nur, um die Stelle im Programm zu finden, in der sich der widerporstige(ich liebe dieses Wort) Kopierschutz befindet.

hmm...doch was was machen wir jetzt nur? Wir schauen uns einmal den letzten Jump vor dem GetDriveType etwas genauer an:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041EAA4(C)
|
:0041EA45 85FF                    test edi, edi
:0041EA47 0F85F5000000            jne 0041EB42
:0041EA4D 8D442410                lea eax, dword ptr [esp+10]
:0041EA51 50                      push eax

* Reference To: KERNEL32.GetDriveTypeA, Ord:00DFh             

Der Jump an der Adresse 0041EA47 scheint ja ziemlich weit nach unten zu gehen. Wenn wir ihn umstellen, knnte der ganze CD-Check mit all seinen GetDriveTypes und APIS und was wei ich noch so alles bersprungen werden. OK, los geht's:
Wir ffnen HIEW gefolgt vom Pfad und Dateinamen der mechcmdr.exe. 
Dann drcken wir F4 und danach F5 um Decode zu whlen. Jetzt geben wie den Offset des jump-Befehls ein, solte "1DE47" lauten(ich benutze die Version mit dem Multiplayer Fix, wenn du also eine andere Version von MC benutzt kann der Offset abweichen). Flux wie wir sind verndern wir "0F85F5000000" in "0F84F5000000".
Der groe Augenblick ist gekommen...wir starten Mech Commander...die Stimmung steigt... TATATATATATATAAAAAAAAAAAAAAAAA wir haben's mal wieder geschafft!

Nachdem wir MechCommander in die ewigen Jagdgrnde der Ex-Cd-Checks geschickt haben noch ein paar Anmerkungen
     ===========
1.) Bei ist das Original immer vor dem Hauptmen abgestrzt, das war aber auch schon bei der ungecrackten Version mit der Original-CD so, deshalb sollte der Crack, wie ich ihn beschrieben habe eigentlich funktionieren.
2.) Wahrscheinlicht hast du es gar nicht gemerkt: Wir haben eben gerade nebenbei das Intro-Movie mit gerippt! 

____________________________________________________________________________________________

Noch ein Tip von mir: Wenn du wirklich mal ein guter Cracker werden willst, brauchst du VIEL Erfahrung. Also krall dir jedes Spiel, das dir unter die Ngel kommt und versuch es zu cracken!!!!

GrErTz:
gONZo - Du hast es also doch in die GCG geschafft!
milhouse - SIMPSONSSIMPSONSSIMPSONSSIMPSONS4EVER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
mahadma - NDER BITTE DEINEN NAMEN!!!! MaHaDmA ist * * * * * * * * (<-indiziert)
hotrod - Ich schwr'!!! RLW HAT einen CIH-Virus ;-)
spidermike - eigentlich hast du es ja gar nicht verdient, dass ich so jemand wie dich hier               vor allen leuten gre ;-), aber wie gesagt, heute hab ich nen guten Tag :-))
long ding dong - wollt ihr den...? <-ebenfalls indiziert

an alle die ich vergessen habe!


UND !KEINEN! GRU AN:
THE CROW - du hast keine Freunde mehr!! Kapierst du das nicht?
Axe_Man - Wenn ihr diesen Typen mal irgendwann im GCG-Chat seht dann bombt ihn, nuked ihn,            killt ihn oder macht was immer ihr wollt mit ihm! Ich bernehme die Verantwortung!

____________________________________________________________________________________________

written by sn00pee (sn00pee@gmx.net) 18.Januar 1999
