Dies ist ein kleines,sehr einfaches Tutorial, wie man den Speicher eines bestimmten Prozesses manipuliert.Ich werde dies über eine Dll Injection machen , da die/eine andere Methode bereits hier erklärt wurde.

1.Anforderungen/benötigte Software
Bevor wir anfangen benötigen wir folgende Dinge:
-Eine IDE (Entwicklungsumgebung) (ich benutze VC++ 2010)
Download:

-Cheatengine (oder TSearch oder was auch immer)
Download:

(Cheat Engine wird nicht für dieses Tutorial benötigt , jedoch ist es wichtig für eure späteren Projekte)
-Winject (zum injizieren der DLL)
Download:

-Ein Verständniss der Grundlagen von C++ (vorallem über Zeiger)
Zum Auffrischen verstaubter Erkentnisse :

2.Die Theorie
So dann hätten wir das auch hinter uns.Nun erstmal zur Theorie:
Prinzipiell wollen wir den Speicher eines bestimmten Spieles verändern.
Doch wie bewerkstelligen wir das ?
Man kann dies entweder über das Benutzen verschiedener Windows API Funktionen bewerkstelligen oder über eine Dll Injection.Und da letzteres wesentlich effektiver ist,wird diese Methode in diesem Tutorial behandelt.
2.1 Vorgehensweise
Doch eins nach dem Anderen.Ich werde nun erstmal die grundlegenden Fragen beantworten(falls dich dies langweilt überspring dieses kleine "FAQ"):
F:Was bedeutet den Speicher manipulieren?
A: Dies würde ich gerne am Beispiel eines kleinen Programmes erklären:
Zuerst schreiben wir ein kleines Programm,das den Wert eines normalen Integers ausgibt.
Code:
#include <iostream>
int main(void){
/*Highscore könnte natürlich auch die Menge der Ressourcen oder die Ammo
in einem FPS sein , das ist nur ein Beispiel*/
int highscore=100;
std::cout<<"Der Highscore liegt bei:"<<highscore<<"Punkten";
return 0;
}
F:Was ist eine DLL ?(Dynamic LinkLibrary)
A:. Dynamic Link Library oder
F:Prima, aber wie schreibe ich jetzt einen Hack , wie ist die Herangehensweise ?
A:Da eine injizierte DLL den selben Speicherberreich wie das Spiel/der Zielprozess hat müssen wir nur eine DLL schreiben , in der wir Pointer derreferenzieren.Nachdem wir diese injiziert haben sind wir fertig.(dazu logischerweiße später mehr)
F:Was zur Hölle versteht man unter Pointer dereferenzieren ?
A:Unter Pointer dereferenzieren versteht man das:
Code:
#include <iostream>
int main(void){
int x=0;
int *xptr;
//Adresse übergeben
xptr=&x;
//Derefernzieren über den Asteriks(*) Operator
*xptr=3;
//Wow x ist 3 wer hätte das gedacht ;-)
std::cout<<x;
return 0;
}
Eigentlich bin ich hier fertig, jedoch werden eure Fragen in dieses FAQ mit aufgenommen und beantwortet.
3.Die Praxis
Bevor wir mit dem "Hacken" anfangen schreiben wir uns eine kleine HackMe.
Code:
//HackMe.cpp
#include <iostream>
int main(void){
int Holz=100;
for(;;){
std::cout<<"Sie haben momentan"<<Holz<<"Holz\n";
//Damit wir nicht mühsam suchen müssen
std::cout<<"Die Adresse,die den Betrag an Holz haelt:"<<&Holz<<"\n";
getchar();
}
}
OUTPUT:Sie haben momentan 100 Holz
Die Adresse , die den Betrag an Holz haelt:0x28ff24
Nun zum eigentlichen Hack und somit zur DLL:
Code:
//1.
#include <windows.h>
//2.
#define Holz_Adress 0x28ff24
[B]
//3.
void RewriteValues(){
int *HolzPtr;
//Adresse übergeben
HolzPtr=(int *)Holz_Adress;
//Dereferenzieren
*HolzPtr=2000;
}
[/B]
//4.
BOOL WINAPI DllMain(HINSTANCE hinstDll,DWORD Reason,LPVOID Reserved){
switch(Reason){
//5.
case DLL_PROCESS_ATTACH:
[B]RewriteValues();[/B]
break;
//6.
case DLL_PROCESS_DETACH:
MessageBox(NULL,"DLL Hack detached","Heyho",0);
break;
}
return TRUE;
}
Wir werden nun den Source Code Schritt für Schritt durchnehmen.
1. Wir inkludieren den Windowsheader (gibt nichts zu erklären)
2. Wir "definen" unsere Adresse als Holz_Adresse somit gilt Holz_Adresse = 0x28ff24 (Holz_Adresse ist einfach nur besser zu benutzen)
3. Diese Funktion ist das Herzstück unseres kleinen Hacks.In dieser Funktion deklarieren wir einen Integer Pointer(HolzPtr*).Diesem Pointer übergeben wir unsere Holz_Adresse , die wir zuvor noch zu einem integer Zeiger casten müssen , da es sonst ,logischerweiße, eine Fehlermeldung vom Compiler geben würde. Der Letzte und Wichtigste Schritt ist die eigentlich Dereferenzierung ->
Code:
*HolzPtr=2000;
4.Das ist die typische Main Funktion einer jeden DLL(das equivalent zur "regulären" Konsolen Main Funktion)
Code:
int main(int argc, char* argv[])
)5.
Innerhalb des Switch Statements behandeln wir Zwei Fälle , die , einfach gesagt, beschreiben was mit der Dll "passiert".
Der erste Fall ist :
(engl."to attach" etwas anbringen) auf gut Deutsch : Sobald unsere DLL erfolgreich(via Winject) angebracht/injiziert wurde wird dieser Fall(engl."case") angesprungen und unsere Funktion wird aufgerufen.Quote:
DLL_PROCESS_ATTACH:
6.
Der Zweite Fall ist :
(hm was könnte wohl bedeuten ;-))Sobald unser Zielprozess beendet wird wird unsere DLL auch "abgebracht" und eine MessageBox wird ausgegeben)Quote:
case DLL_PROCESS_DETACH:
4.Kompilieren und Starten des Hacks
Um eine DLL zu Kompilieren müsst ihr unter VC++ ALT+F7 drücken.
und dort bei Projektstandarts unter Konfigurationstyp .dll auswählen.
Danach klickt ihr einfach auf Debuggen (den grünen Pfeil ;-))
Danach startet ihr WinJect und wählt eure DLL aus.
Dann wählt ihr den Zielprozess aus:
Screenshot:

Das Ergebnis:

Detach:

5. Ende
So das wars für heute , falls euch dieses Tutorial geholfen hat würde ich mich über ein Thanks freuen.Des Weiteren freue ich mich über konstruktive Kritik.
Peace Out Cooler7878







