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 Anfänger steht man meißtens nur dumm da und muß sich das meiste selbst beibringen. Deshalb habe ich mich entschlossen die Sache mal selbst in die Hand zu nehmen. Für 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 blöd) noch keine Erfahrung in Sachen Spiele-Cracken hat. Wer sich schon zu den fortgeschrittenen Crackern zählt, kann den größten Teil einfach überfliegen und sich dann später das Wesentliche anschauen. Benötige ich irgendwelche spezielle Kentnisse? ================================================ Eigentlich nicht, etwas Programmierwissen oder noch besser noch Assemblerkentnisse können jedoch sehr hilfreich sein. Welche Programme benötige 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 Gründe dafür liegen auf der Hand: 1) SIN scheint sich zu einem der Renner der 3D-Shooter-Szene zu entwickeln. Deshalb sollte es eigentlich kein großes Problem sein an das Spiel heranzukommen. 2) SIN hat den wirklich einfachsten Kopierschutz, den ich je gesehen habe, also ideal für 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(außer er heißt gONZo ;-)) wird innerhalb eines Tages oder einer Woche zum Meistercracker. Erfahrung gehört 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 läßt...des weiteren (huhjujui...mein Deutsch wird ja immer besser) solltest du eine gehörige 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 schmeißt deine Kiste aus dem Fenster nur weil der Jump nach dem Fehlercode mal wieder zum Absturz führt(ich übernehme natürlich keine Verantwortung :-)). Noch was zum Spiele-Cracken: Meiner Meinung nach ist Spiele knacken immer noch die kurzweiligste und interessanteste Weise zu cracken, außerdem ist die ganze Sache im Vergleich zu Serials-Suchen mit SoftICE(ach ja...ich werde in keinen von meinen Tutorials SoftICE behandeln, da es für 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 heißt 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 drücken, 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 wählen wir die Kopie von SIN.EXE aus und klicken auf OK(Wichtig!!! NICHT die original SIN.EXE!). ...je nach größe 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 gewählt hast, da wir so natürlich nicht arbeiten können, beheben wir den Bug einfach in dem wir unter "Disassembler/Font/Select Font" eine geeignete Schriftart wählen. 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 Auflösungsrumschaltorgien(wow, das kling cool ;-)) sollten wir uns jetzt im Hauptmenü befinden. Nun starten wir ein neues Single-Player Spiel und TATA! Wir bekommen eine schöne Fehlermeldung, die uns darauf hinweist, dass wir doch bitte die CD einlegen sollen. So eine Frechheit lassen wir uns natürlich 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 wählen den Text von der Fehlermeldung("You must have the SIN CD in the drive to play") und schließen das kleine Fenster wieder. So...nun solltest du ungefähr 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 für 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 däs? 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 anfängt steht für Jump. Jumps springen immer zu einer bestimmten Stelle im Programm. Es gibt mehrere verschiedene Jumps, die nur bei Erfüllung einer bestimmten Bedingung ausgelöst werden (Ich habe am Ende dieses Kapitels alle Jump-Befehle aufgelistet). jne steht für "Jump if not equal". Das Programm prüft also, wenn es an dieser Stelle angekommen ist, ob eine bestimmte Bedingung erfüllt ist und überspringt die Fehlermeldung, wenn diese Bedingung nicht(!) erfüllt ist. Die Bedingung wird in der vorherigen Zeile festgelegt: cmp byte ptr [eax], 00 cmp steht für Compare also Vergleich. Dieser Befehl vergleicht irgendetwas und stellt die Bedingung für den Jump-Befehl. Was "byte ptr [eax],00" im einzelen bedeutet ist für einen Anfänger noch unwichtig. Doch was sollen wir jetzt tun? Wieder ganz einfach. Wie wäre es, wenn wir diesen jne-(Jump if not equal) in einen je-Jump verändern(Jump if equal)? Das Programm würde dann die Fehlermeldung überspringen, wenn die Bedingung erfüllt 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 Veränderungen kann man nicht vornehmen. Dazu nehmen wir einfach ein anderes hilfreiches Programm: HIEW. HIEW erlaubt es uns den Programmcode zu verändern. 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/Ausführen. OK, wenn HIEW gestarted ist drücken wir F4 und wählen "Decode". Nun gehen wir wieder kurz zurück 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(für 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 für uns die Adresse nach @Offset also 0005AFB8. Diese Adresse merken wir uns und gehen wieder zurück in HIEW. Nun drücken wir F5 und geben diesen Offset ein(0005AFB8). Jetzt sehen wir im Prinzip das gleiche wie in W32DSM, jedoch etwas unübersichtlicher. Um den Code nun zu verändern drücken wir F3 und geben den HEX-Code für "je" ein(siehe Tabelle am Ende dieses Kapitels). Dieser Code lautet 74. Nachdem wir diese Zahlenfolge eingegeben haben verändert sich wie von Geisterhand der Befehl rechts in "je 00005AFC9". Jetzt drücken wir F9 um die Datei zu updaten und dann F10 um HIEW wieder zu verlassen. So...jetzt kommt der große Augenblick. Wir starten SIN(mit der original SIN.EXE) und natürlich ohne CD ;-). Wir wählen Game/New Game und oh Wunder, KEINE Fehlermeldung! Das Spiel läuft völlig normal und ohne CD. So jetzt klopfen wir uns erst mal kräftig auf die Schulter und genießen diesen tollen 3D-Shooter. Eine weitere Möglichkeit SIN zu cracken ======================================= Eigentlich sollte man es ja in einem Anfänger-Tutorial nicht gleich übertreiben aber es gibt wie schon erwähnt immer mehrere Möglichkeiten 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" heißt 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 natürlich genauer an. Wir wählen "Goto Code Location" unter dem Menüpunkt "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 könnten doch einfach diesen call ausschalten, so dass die CDCheck-Routine gar nicht erst ausgeführt 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 drücken wir wieder F4 und wählen "Decode". Danach drücken wir F5 und geben die Adresse ein(0055CB4). Nun sind wir an dem Call angelangt, doch wie mache ich diesen nun unschädlich? Dazu benutzen wir den nop-Befehl. NOP steht für "No-Operator". NOP- Befehle werden bei der Programmausführung 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 drücken wir F3 um den Programmcode zu verändern...jetzt bitte gut aufpassen: Der HEX-Code für nop lautet 90. Nun können wir aber nicht einfach eine 90 reinschreiben und dann hoffen, dass alles gut geht, dies würde i.A. zu einem schweren Ausnahmefehler führen, an dem ausnahmsweise mal nicht Microsoft schuld wäre ;-). Wir müssen beachten, dass der Hex-Code für den auszunopenden call E8F7520000 lautet. Da dies 10 verschieden Stellen sind müssen wir auch 5 NOPs reinschreiben, da sonst der darauffolgende Code beeinflußt würde. Also tippen wir jetzt 9090909090 ein und drücken 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 böse :-)) ===================================================================================== 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, wäre 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(mögliche Themen wären 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 || Für alle die schon immer mal wissen wollten, wie man das Spiel mit dem blöden 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 StörCraft MAHADMA - dein Nick ist scheiße, laß dir mal was anderes einfallen Milhouse - SIMPSONS 4EVER!!! Harlequin - MMMUUUUHHHHHHH! 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!