Der Bereich war so leer, da wollte ich mal ein Einstieg-Tutorial schreiben
Vorwort
Ihr kennt das vielleicht: Ihr wollt in das Thema einsteigen und werdet erst mal mit einem Haufen Theorie zugeschüttet (Das geht von verschiedenen Zahlentypen bis hin zu dem Aufbau einer PE-Datei). Dieses Tutorial soll das völlige Gegenteil sein. Ich werde ganz direkt anfangen und die Theorie so kurz wie möglich halten (ohne geht es natürlich nicht).
Sollte ich evtl. noch weitere Folgen machen, wird natürlich auch nach und nach immer mehr Theorie folgen.
Wer also nicht sehr praxisseitig und auf Deutsch zu dem Thema etwas lernen will, dem empfehle ich lenas-Cracking-Tutorials. Sie sind auf Englisch und mit viel Theorie. Dafür sind sie viel umfangreicher. Ich habe vieles aus diesen Tuts gelernt, jedoch fand ich es nicht unbedingt leicht. Daher wollte ich einen leichten Einstieg und evtl. Fortsetzungen schreiben.
Voraussetzungen
Also im Voraus: Das Cracken (oder allgemein Reverse Engineering) ist meiner Meinung nach das genaue Gegenteil des Spreadens. Es ist geistig ansprechende und kreative Arbeit und hat nichts mit Fleißarbeit zu tun. Ihr müsst kreativ sein und nachdenken - Im Gegensatz zum Spreaden.
Daher sind Grips & Kreativität unablässig.
Des Weiteren braucht ihr einen guten Debugger. Er wird unser wichtigstes Hilfsmittel sein. Ich benutze OllyDbg 1.10.
Ich habe ihn für euch geuppt inklusive meinem Beispiel-Programm (VT siehe unten), einer Ini-Datei, welche für eine übersichtliche Formatierung sorgt und einer speziellen Zusatz-Hilfe-Datei:
http://rapidshare.co...ing-Tut-001.rar
Das Passwort ist gemäß Boardregeln 1.g): “
www.Sceneground.info“
Das Programm kommt von der Herstellerseite, deshalb spare ich mir mal den VT-Link. Hinzugefügt habe ich nur Hilfe- und Ini-Datei. Wer mir nicht glaubt, lädt ihn sich hier:
http://www.ollydbg.de/odbg110.zip
Es geht los!
Wir starten (für manche zum ersten Mal) unseren Debugger. Evtl. kommen euch jetzt ein paar Fehlermeldungen entgegen. Eine dafür, dass ihr das Programm mit Administrator-Rechten starten sollt und andere, weil ein paar Pfade nicht existieren. Euch wird gesagt, wo ihr den Pfad zu OllyDbg einstellen müsst (ich selbst weiß leider nicht mehr, wo ich das damals machen musste). Nachdem ihr das gemacht habt, nehmen wir noch eine weitere Änderung vor: Wir klicken
auf „Help“->“Select API Help File“. Dann geht ihr in das Verzeichnis, in das ihr OllyDbg installiert habt und wählt die „WIN32.HLP“ aus. Wenn wir bestimmte Befehle nicht verstehen, können wir sie uns anzeigen lassen.
Nun haben wir unseren Debugger eingerichtet. Als nächstes öffnen wir meine Beispielprogramm.exe, indem wir auf das Ordner-Symbol klicken. Nun habt ihr einen Haufen Assembler-Code vor euch.
In der ersten Spalte seht ihr die Offsets. Daneben steht das Ganze im Hex-Code. Eine Spalte weiter seht ihr den Assembler-Code. In der letzten Spalte stehen Kommentare, die das Verstehen der Befehle leichter machen.
Vertraut machen mit dem zu crackenden Programm
Bevor wir auch nur einen Schritt mehr im Debugger machen, starten wir zuerst das Programm ganz normal in Windows. Ihr seht nun ein kleines Fenster, in dem ihr zur Eingabe einer Pin aufgefordert werdet. Abhängig von der Richtigkeit kommt entweder eine Meldung, dass das Passwort leider falsch sei und das Programm beendet sich. War die Pin richtig… Naja ihr werdet sehen.
An dieser Stelle merken wir, dass ich beim Programmieren absichtlich einen törichten Fehler gemacht habe: Beim Falsch-Zustand wird eine Messagebox mit einem festgelegten String ausgegeben. Das werden wir uns jetzt zu Nutze machen…
Analyse des Programms
Wir gehen wieder zu OllyDbg. Wir haben ja gerade eben gesehen, dass eine Meldung mit einem Text ausgegeben wird. Daher klicken wir jetzt rechts in den Assemblercode rein und
wählen: „Search For“-> „All referenced text strings“. Es öffnet sich jetzt ein weiteres Fenster. In der Spalte der Text-Strings fallen uns 2 Einträge auf:
ASCII „Du hast es geschafft!“
ASCII „Leider falsch!“
Wir klicken doppelt auf den ersten Eintrag und landen wieder im Assembler-Code. Folgende Zeile ist markiert:
MOV EDX,Beispiel.004506D0
Der Assembler-Befehl MOV (=move=bewegen) bedeutet, dass der Inhalt der
Quelle „Project1.004506A8“ (Also unser String) in das Register EDX kopiert wird.
Wir werden ab hier rückwärts arbeiten und ein paar Schritte zurückgehen. Uns fällt als nächstes folgender Befehl auf:
JNZ SHORT Beispiel.00450678
Der Assembler-Befehl JNZ (=Jump if not zero=Springe wenn nicht null) ist ein bedingter Sprungbefehl. Jedem bedingten Sprungbefehl muss immer ein Befehl vorausgehen, der die Flags bzw. (E)CX verändert. Der Befehl wertet nun die Register aus (Flags bzw. ECX) und springt dann an eine bestimmte Stelle im Code (Sprungmarke).
Als Nächstes kommt der Befehl, der die Flags für den JNZ-Befehl verändert:
CMP EAX,539
CMP (=Compare=Vergleichen) überprüft 2 Werte und setzt dementsprechend die Flags. Im
EAX-Register steht unsere Eingabe. Das sieht man, wenn man noch weiter zurück geht, jedoch will ich an dieser Stelle nicht weiter darauf eingehen.
Wir knacken das Programm
Wir haben gesehen, dass unsere Eingabe mit dem HEX-Wert 539 verglichen wird. Wer kein HEX kann, muss das jetzt irgendwo umrechnen. Wir kommen auf die Zahl 1337. Wir starten ganz normal das Programm und geben 1337 als Pin ein und: Tada!!! Wir kommen in den „geheimen“ Bereich.
Im letzten Schritt wollen wir noch das Programm patchen, damit man irgendein Passwort eingeben kann. Wir klicken doppelt auf den JNZ-Befehl, ersetzen den Inhalt mit „NOP“ und klicken auf „Assemble“. NOP heißt so viel wie „tue einfach gar nichts“. Nun machen wir einen Rechtsklick auf unseren geänderten Befehl und wählen „Copy to executable“ -> „Selection“ aus. Hätten wir mehr als einen Befehl geändert, hätten wir „All modifications“ auswählen müssen. In dem neuen Fenster klicken wir erneut rechts, wählen „Save file“ und speichern anschließend das Programm unter einem neuen Namen ab. Nun könnt ihr das neue Programm unter Windows ausführen und irgendeine Pin eingeben und er wird euch sagen, dass es die richtige Pin war.
Schlusswort
Ihr solltet nun einen kleinen Einblick in die Welt des Reverse-Engineerings erhalten haben. Es gibt noch andere Arten, verschiedene Schütze zu umgehen, so z.B. das Keygenning oder die Programmierung eines Loaders. Auch auf den hier behandelten Gebieten gibt es noch sehr viel mehr zu lernen.
Vermutlich werdet ihr jetzt auch noch nicht in der Lage sein, irgendein Spiel oder Programm zu cracken, aber das sollte auch nicht der Sinn dieses Tutorials sein.
Alles in allem hoffe ich, dass ihr einen guten Einstieg erhalten habt und falls euch mein Tutorial gefällt und es erwünscht ist, werde ich noch weitere Tutorials schreiben. Evtl. mache ich auch noch ein Anti-Cracking-Tutorial für Programmierer, die ihre Programme besser schützen wollen.
Copyright
Das Tutorial ist zu 100% von mir geschrieben. Ich selbst habe das Wissen in den letzten Jahren aus verschiedensten Quellen gelernt. Das Kopieren dieses Tutorials ist erlaubt, jedoch nur absolut unverändert.
Copyright © 2010 by mafia97, All rights reserved
Der Scan von meinem Beispielprogramm:
Ich hab keine Ahnung, warum das eine Antivirenprogramm was erkennt, versichere euch jedoch, dass es vollkommen in Ordnung ist.
Ich hoffe auch auf Feedback.Und auch wenn es keinen Hide-Hack gibt, so könnt ihr trotzdem auf das kleine "+" unten rechts klicken.