Gamehacking – DLL Injection

Viele fragen sich, wie funktionieren Gamehacks. In diesem Artikel möchte ich auf eine der einfachsten Methoden des Gamehackings eingehen. Das „Hacking“ via DLL Injections. Das heißt wir werden eine DLL schreiben, die in das Spiel das „gehackt“ werden soll injeziert wird. Um das Injecten brauchen wir uns voerst keine gedanken machen, dafür gibt es „Winject“, dazu aber in Abschnitt 2 mehr.

1. Vorwort
Bevor es jetzt los geht, nehmen Sie sich am besten Zeit. Ich möchte dieses Tutorial so ausführlich wie möglich gestalten und alle Infos zentral bündeln. Bevor jetzt aber jeder denkt, diese Anleitung sei für jedermann der liegt falsch. Minimale C oder C++ Kentnisse sollten vorhanden sein (Pointer). Wer sich wirklich damit beschäftigen will sollte kein „Copy&Paste“ verwenden.

2. Software
Was benötigen wir alles? Zuerst einmal eine C++ IDE (Entwicklungsumgebung), in dem wir den Gamehack schreiben werden. Desweiteren brauchen wir CheatEngine oder eine vergleichbare Software. Nun brauchen wir noch einen DLL Injector. Die gibt es haufenweise, ich persönlich benutzte dafür aber Winject.

3. Das „CrackMe“
Ich hab mir lange überlegt welches Spiel ich für den beginn nehmen soll. Doch da kam mir eine viel bessere Idee. Wir programmieren uns selber in C++ ein CrackMe. Der Vorteil? Wir sehen den Aufbau eines „Spiels“ und verstehen so unseren ersten Gamehack eventuell besser.

Wir starten nun also unsere Entwicklungsumgebung und erstellen ein neues Projekt. Ich verwende als IDE „Microsoft Visual C++ 2010 Express“. Als Vorlage verwenden wir „Win32-Konsolenanwendung“. Den Namen können Sie beliebig vergeben, ich werde ihn CrackMe nennen.

Wir öffnen nun die „CrackMe.cpp“ Datei. Als erstes inkludieren wir den iostream mit dem befehl #include <iostream>. Als nächstes brauchen wir eine Variable die unser Gold beinhaltet, also „int Gold=100“. Damit der Spieler auch weiß wie viel Gold er gerade hat brauchen wir eine Ausgabe. „std::cout<<„Sie haben aktuell „<<Gold<<“ Gold.n“;. Damit wir auch eine veränderung sehen, sobald wir die Variable im Arbeitsspeicher verwenden packen wir das ganze in eine Schleife. Da das ganze nicht wirklich Professionell sein muss benutz ich dafür eine While-Schleife.  Am ende sieht das ganze Crackme so aus:

Unbenannt

4. CheatEngine – Die Speicheradresse herausfinden
Um später einen Pointer auf eine Speicheradressen zu setzten, brauchen wir natürlich erstmal den Namen der Speicheradresse. Den Namen finden wir mit dem oben schon genannten Programm CheatEngine heraus. Wir starten zuerst unser „CrackMe“. Die fertige Datei befindet sich hier: „C:Users<Benutzername>DocumentsVisual Studio 2010ProjectsCrackMeDebug„.

Sobald unser CrackMe gestartet ist, wählen wir in CheatEngine unseren Prozess aus.

UnbenanntNach dem der Prozess ausgewählt wurde können wir bei „Value“ 100 eingeben, klicken Sie dann auf „First Scan“. Warum „100“? Na, ist doch klar, weil wir 100 Gold haben und dieser Wert in den Arbeitsspeicher geschrieben wurde. Das ganze sieht dann so aus:

UnbenanntWir verändern nun den Wert der zweiten Adresse. Um das zu erledigen führen Sie einen Doppelklick auf die Adresse aus. Sie befindet sich dann im unteren Teil von CheatEngine. Führen Sie dort dann einen Doppelklick auf die Zahl „100“ aus, und es erscheint eine Abfrage in der Sie den neuen Wert eingeben können.

UnbenanntWechseln Sie nun zum CrackMe und klicken Sie einmal „Enter“. Sie werden sehen der Wert hat sich in ihre Zahl geändert. Falls nicht, haben Sie die falsche Adresse. Ändern Sie nun eine andere Adressen, solange bis sich die Zahl ändert. Notieren Sie sich nun die Adresse, in meinem Fall 00DCFE70.

5. Der Gamehack
Wir erstellen uns nun wieder ein neues Projekt. Ich werde es kreativer Weise „Gamehack“ taufen. Wir wählen nun wieder eine „Win32-Konsolenanwendung“ aus, aber im nächsten Fenster wählen wir „DLL“ an, wie hier im Screenshot zu sehen ist:

UnbenanntWichtig ist auch bei den Zusätlichen Optionen „Leeres Projekt“ anzuwählen.

Sobald unsere leere Projektmappe dann erstellt wurde, müssen wir erst mal eine main.cpp Datei erstellen. Drücken Sie dazu Strg+Umschalt+A. Wählen Sie dann „C++-Datei(.cpp)“ aus, und bennen Sie diese main.cpp. Das selbe machen Sie jetzt nur mit einer Headerdatei.

Unbenannt

Wenn Sie alles richtig gemacht haben, sollte im Projektmappen-Explorer das ganze so aussehen:

UnbenanntIn die „main.h“ Datei schreiben wir nur „#include <iostream>“. Wechseln Sie dann zur „main.cpp“ Datei. Hier wird das ganze schon aufwendiger. Hier der Quellcode:

Unbenannt

#define: Einer der wichtigsten Befehle dieser .dll Datei. Hier wird die Speicheradresse definiert, in der das Gold gespeichert ist. Zu dieser Speicheradresse muss ich im letzen Abschnitt noch etwas sagen.

int *GoldPtr;: Hier erstellen wir einen Pointer, dem wir später die Zuweisung auf unsere Speicheradresse geben.

GoldPtr=…: Wie oben schon angesprochen, verweisen wir hier auf die Gold Adresse, die oben durch den Befehl #define definiert wurde.

*GoldPtr=256;: Hier weisen wir dem Pointer (der auf die Speicheradresse zeigt) den Wert 256 zu. Das ist also der Befehl der das „Gold“ im Arbeitsspeicher „ändert“.

Das waren die wichtigsten Befehle, die anderen Befehl haben nichts mit Gamehacking am Hut, deswegen werde ich diese hier aussenvor lassen.

6. Die DLL Injection
Kommen wir nun zum lang ersehnten Finale. Doch bevor wir die DLL Datei nun verwenden können müssen wir sie noch compilen. Dazu klicken Sie in der IDE einfach auf F5. Die Fehlermeldung die dabei ausgegeben wird können Sie ignorieren, sofern die „Ausgabe:“ in MS Visual C++ „Erstellen: 1 erfolgreich, …“ ausgibt.

Zur Sicherheit schließen Sie nun alles, bis auf das GameHack DLL Projekt. Starten Sie das CrackMe nun neu. Lesen Sie nun mit CheatEngine die Speicheradresse mit dem Wert 100 erneut aus. Prüfen Sie ob Sie die richtige Speicheradresse gewählt haben, und passen Sie diese dann in ihrer .dll Datei an. Compilen Sie die .dll Datei nun nochmals.

Starten Sie nun Winject. Bei „Target Process“ wählen Sie die crackme.exe aus. Bei DLL to Inject die gerade erstellte gamehack.dll. Diese befindet sich hier: C:Users<Benutzer>DocumentsVisual Studio 2010ProjectsGameHack DllDebug. Klicken Sie dann auf „Inject (+)“.

UnbenanntWenn alles gut gelaufen ist sollte es im CrackMe nun so aussehen:

Unbenannt

7. Weiteres zu Speicheradressen
Sie haben es sicherlich schon gemerkt. Die Speicheradressen ändern sich bei jedem Start. Deshalb muss der Gamehack (die .dll) auch jedesmal angepasst werden. Wenn Sie ein Professionellen Gamehack schreiben wollen, bei der die Speicheradresse nicht jedesmal angepasst werden soll, müssen Sie den Basepointer mit CheatEngine herausfinden.

Desweiteren muss beim #define Befehl in C++ vor der Speicheradresse ein 0x stehen. Wenn ich also als Beispiel folgende Speicheradresse habe: 004BFF00, dann lautet diese in C++ so:
0x004BFF00.

2 Gedanken zu „Gamehacking – DLL Injection

  1. expl0

    Ziemlich interessantes Tutorial, würde mir eins wünschen um den Basepointer rauszufinden. Btw Rss Feed & Email Kontakt geht nicht

    Antworten
    1. admin Beitragsautor

      Um ein Tutorial über den Basepointer werde ich mich noch kümmern.

      Danke für den Hinweis.
      Sollte jetzt wieder funktionieren.

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.