EnigmA's game cracking tutorial #1 (13.4.2000) {This Tutor is completly written in German and best viewed in notepad} _________________________________________________________________________________________________ Autor: EnigmA Cracking-Group: ACG (Artful Cracking Group) Spielname: Dethkarz Version: 1.0.1.0 Schutz: Safedisc + CD-Check Anspruch: für Newbies mit grundlegenden Vorkenntnissen (Bedienung von Win32Dasm und Hexeditor) Benötigte Zeit: 5-15 min _________________________________________________________________________________________________ Inhaltsverzeichnis: """"""""""""""""""" I. Vorwort II. Benötigte Tools III. Theorie über Safedisc IV. Let's go!! V. Nachwort VI. Anhang VII. The End?? _________________________________________________________________________________________________ I. Vorwort: """"""""""" Hi erstmal vorne weg! ;-) Dieses Tutor beschäftigt sich mit dem Schreiben eines No-CD-Cracks für Dethkarz. Es richtet sich an etwas erfahrenere Newbies, die aber noch nie mit Safedisc gearbeitet haben. Ihr solltet euch also schon ein wenig mit der Materie auskennen (d.h., dass ihr schon so 2-3 Tuts vorher gemacht habe solltet). Auch Programmiererfahrung, vorzugsweise in Assembler, wäre hilfreich. SoftIce (ein Debugger) wird für dieses Tutor nicht benötigt. _________________________________________________________________________________________________ II. Benötigte Tools: """""""""""""""""""" - W32Dasm 8.9x (Dissassembler) - Hexeditor (z.B. Hview oder Hexworkshop oder einen anderen eurer Wahl) - Unwrapper für Safedisc (ich nehme Blackcheck's Bruteforcer, weil man keine orig. CD benötigt) _________________________________________________________________________________________________ III. Theorie über Safedisc: """"""""""""""""""""""""""" Safedisc hat sich in den letzten Monaten zu dem Kopierschutz schlechthin entwickelt. Sehr viele Spiele nutzen derzeit eine Version von Safedisc (z.B. Age of Empires2, Mechwarrior3, C&C3, uvm.). Erst einmal ein bißchen Theorie zu Safedisc: """""""""""""""""""""""""""""""""""""""""""" Bei einem Spiel, welches mit Safedisc geschützt ist, muss immer die Original-CD eingelegt sein. Safedisc umfasst zwei Schutzmechanismen: 1. Einer Digitalen Signatur auf der CD-Rom 2. Eine aufgeteilte, verschlüsselte Datei Die Digitale Signatur wird bei der Herstellung der CD auf die CD gepresst und wird bei Verviel- fältigungen nicht mitkopiert. Somit kann man also von keiner kopierten CD spielen. Wie erkenne ich ein Spiel, das Safedisc geschützt ist? """""""""""""""""""""""""""""""""""""""""""""""""""""" Die folgenden Dateien sollten auf jeder Safedisc geschützten Orignal-CD vorhanden sein: 00000001.TMP CLCD16.DLL CLCD32.DLL CLOKSPL.EXE GAME.EXE <--- Game= Name des Spiels // Loader für die .icd Datei GAME.ICD <--- Game= Name des Spiels // Originale EXE-Datei _________________________________________________________________________________________________ Let's go!!!: """""""""""" Okay, ich glaub das genügt erst einmal, ihr wollt jetzt bestimmt endlich anfangen, oder? Gut! Schritt 1: Als erstes mal eine Vollinstallation von Dethkarz auf die Festplatte machen. Nun die CD raus- nehmen (vielleicht auch ne kopierte dafür einlegen) und schauen, ob's vielleicht nicht auch ohne cracken läuft...überrascht ?? ;-) Also gut, nachdem das nicht so ganz geklappt hat, nehmen wir einen Unwrapper (den von Blackcheck oder den von r!sc) und entfernen Safedisc. Wie lange der Unwrapper braucht, hängt 1. von der benutzen Safedisc Version ab und 2. von der Geschwindigkeit eures Rechners. Glücklicherweise handelt es sich bei Dethkarz um eine sehr alte Version von Safedisc und es dauert nur ein paar Minuten (Auf meinem PII-300 hat es nicht einmal 30 Sekunden gedauert). Schritt 2: So, nun kommen wir zum eigentlich cracken, denn dass, was wir bis jetzt gemacht haben, ist kein cracken! Hättet ihr den Schutz manuell entfernt, dann wäre das cracken gewesen, aber so habt ihr nur auf die Arbeit von anderen zurückgegriffen! Also weiter im Text: Wir starten jetzt unseren Dissassembler und schauen nach Einträgen in den String Data Referenzen. Nichts zu finden, was nun? Wieder etwas Theorie: Windows benutzt API Funktionen um z.B. Fehlermeldungen oder ähnliches auszugeben. Das können wir uns zu nutze machen, denn es gibt auch für CD-Checks API Funktionen. Eine sehr verbreitete API Funktion für CD-Checks ist die Funktion: GetDriveTypeA. Ist gibt auch noch andere, die einen CD-Check machen können. Dies sind z.B. : CreateFileA GetDiskFreeSpaceA GetFullPathNameA GetVolumeInformationA und noch einige andere (schaut euch einfach auf unserer HP um, dort findet ihr eine komplette Referenz über die für Cracker wichtigen API Funktionen). Um zu gucken, ob ein Programm bestimmte API Funktionen benutzt, schaut man in W32Dasm unter Functions -> Imports nach. Wir scrollen da also ein wenig und finden es dann auch: Kernel32.GetDriveTypeA wir klicken es nun doppelt an und landen im Quellcode: * Referenz To: KERNEL32.GetDriveTypeA, Ord: 00DFh I : 004732E0 FF1528A14E00 Call dword ptr [004EA128] : 004732E6 83F805 cmp eax, 00000005 <----------- CD-Check : 004732E9 756D jne 00473358 <---------------- Springe, wenn keine CD gefunden : 004732EB 8B15C0FF4F00 mov edx, dword ptr [004FFFC0] : 004732F1 6A00 push 00000000 : 004732F3 8D442410 lea eax, dword ptr [esp+10] : 004732F7 8954240C mov dword ptr [esp+0C], edx : 004732FB 6A00 push 00000000 : 004732FD 8D4C241C lea ecx, dword ptr [esp+1C] : 00473301 50 push eax : 00473302 8D54241C lea edx, dword ptr [esp+1C] : 00473306 51 push ecx : 00473307 52 push edx : 00473308 8D44242C lea eax, dword ptr [esp+2C] : 0047330C 6804010000 push 00000104 : 00473311 8D4C2420 lea ecx, dword ptr [esp+20] : 00473315 50 push eax : 00473316 51 push ecx : 00473317 885C2428 mov byte ptr [esp+28], bl * Referenz To: Kernel32.GetVolumeInformationA, Ord:014Fh : 0047331B FF1520A14E00 Call dword ptr [004EA120] : 00473321 8B842424010000 mov eax, dword ptr [esp+00000124] : 00473328 85C0 test eax, eax <--------------------CD-Check : 0047332A 741F je 0047334B <----------------------Springe, wenn CD gefunden : 0047332C 8D542418 lea edx, dword ptr [esp+18] : 00473330 52 push edx : 00473331 50 push eax : 00473332 E819780500 call 004CAB50 : 00473337 83C408 add esp, 00000008 : 0047333A 85C0 test eax, eax <-------------------CD-Check : 0047333C 751A jne 00473358 <--------------------Springe, wenn keine CD gefunden : 0047333E B801000000 mov eax, 00000001 : 00473343 5B pop ebx : 00473344 81C4118010000 add esp, 00000118 : 0047334A C3 ret Gut, anhand der Beschriftungen, die ich an die für uns wichtigen Stellen gemacht habe, können wir jetzt folgendes Erkennen: Der erste CD-Check (004732E6) ist für uns der erste Anhaltspunkt, dass hier nach der CD gecheckt wird. Warum? Nun, man kann es an dem Vergleich sehen, der in dieser Zeile gemacht wir: cmp eax, 00000005 <-- Die '5' am Ende ist entscheident, da die '5' für das CD-Rom Laufwerk steht So, nachdem der Computer also gecheckt hat, ob die richtige CD eingelegt ist, macht er danach einen SPRUNG, falls KEINE CD eigelegt ist: jne 00473358 <-- jne (jump if not equal == Springe, wenn nicht gleich) Und da bei uns nicht die original/keine CD eingelegt ist, springt er und landet dann irgendwann bei der Fehlermeldung. Bei dem zweiten CD-Check (00473328) ist es diesmal genau umgekehrt. Denn falls wir die CD ein- gelegt hätten, würden wir den ersten jump ja einfach überspringen. Also wir noch einmal gecheckt, ob eine CD eingelegt wurde (test eax, eax ) und es wird gesprungen, falls die Ausgabe "wahr" ist, d.h. falls die richtige CD im Laufwerk liegt. Der dritte CD-Check entspricht wieder dem ersten CD-Check (Springe, wenn keine CD gefunden). War doch gar nicht soo schwer, oder? Okay, ich hoffe, ihr wisst was ihr jetzt machen müsst... oder etwa nicht? Die Bedienung eines Hexeditors ist leider für dieses Tutorial Voraussetzung :-( Ich werde euch hier nur die möglichen Wege darlegen: 1. Offset Adresse aus WinDasm notieren (Achtung ohne das h am Ende) 2. Hexeditor starten 3. zu notierten Offset gehen 4. die Sprünge wie folgt ändern: a) 756D --> wird zu --> 9090 (Adresse : 004732E9 I Offset : 000726E9) b) 741F --> wird zu --> EB1F (Adresse : 0047332A I Offset : 0007272A) c) 751A --> wird zu --> 9090 (Adresse : 0047333C I Offset : 0007273C) zu a) Wir nopen diesen jump aus, da wir ja nicht wollen, dass dieser jump jemals (wenn eine CD im Laufwerk liegt oder wenn keine eingelegt ist) ausgeführt wird. Deshalb überschreiben wir den jump mit 9090, da eine 90 für no operation point (ist mit einem Loch im Programm zu vergleichen) steht. zu b) Diesen jump werden wir zu einem JMP (jump directly to) umschreiben, was bewirkt, das dieser jump IMMER ausgeführt wird. Der Hexcode für einen JMP lautet: EB zu c) Dieser Jump ist, nachdem wir a) und b) umgeschrieben haben völlig unwichtig geworden, da wir bei b) einen JMP aus dem JE gemacht haben. Das heißt also, dass alles was hinter b) kommt, nicht mehr ausgeführt wird, da ja zu einem anderen Punkt im Programm gesprungen wird. Wir patchen ihn aber trotzdem, weil's Spass macht ;-) Fertig! Ihr habt es geschafft! Nun sollte das Spiel ohne CD im Laufwerk laufen. _________________________________________________________________________________________________ V. Nachwort: """""""""""" Nachdem ihr diesem Tutorial erfolgreich gefolgt seid, seid ihr leider noch lange keine Cracker! Dies ist wirklich ein sehr einfacher CD-Check und das entfernen des Safedisc-Schutzes kann auch wirklich jeder Dummkopf! Ihr seid allerdings auf dem richtigen Weg und werdet sehen, dass es mit der Zeit immer besser klappt mit dem Cracken und werdet auch bald auf Tutorials verzichten können. Ach ja, bevor ich es vergesse: Es gibt natürlich noch einige andere Techniken, dieses Game zu cracken [man hätte z.B. den Vergleich am Anfang umschreiben können (funktioniert hier leider nicht) oder den call, der diese API Funktion überhaupt aufruft, umschreiben können]. Allerdings habe ich mich für diese Variante entschieden, da man an diesem CD-Check gut die vorgehensweise erklären kann und so mehr lernt. Noch ein kleiner Tip: """"""""""""""""""""" Um ein wirklich guter Cracker zu werden, musst du lesen, lesen, ausprobieren, lesen, üben und vor allem lesen! Sammle soviele Erfahrungen wie möglich, denn: The more you know, the better you crack! _________________________________________________________________________________________________ VI. Anhang: """"""""""" Erst einmal natürlich unsere Site: www.acg-world.de Dann noch ein paar sehr gute Links: http://blackcheck.bizland.com/ <---- Blackchecks Site http://fly.to/ncg <---- Eine Site für Beginnende Cracker http://www.crackstore.com <---- hier bekommst du Tuts und die Programme, die du zum Cracken brauchst http://www.hello.to/lazarus <---- Lazarus's Site sollte man besucht haben My Greetz fly out to: """"""""""""""""""""" Ahlman, Firestar, r!sc, Blackcheck, LaZaRuS, C_DKnight, Keyboard Junky, and to all i forgot! _________________________________________________________________________________________________ The End?? """"""""" Hat euch mein Tut gefallen? Und vor allem: Hat es euch ein bißchen geholfen? Mailt mir und sagt mir eure Meinung! Dies ist mein erstes Tutorial und wenn ich genügend Feedback bekomme, schreibe ich vielleicht auch noch eins. Mailto: EnigmA2k@gmx.net _________________________________________________________________________________________________