das mein Tutorial, wie man .dll Hacks erstellen kann. Das Opfer Programm ist das Online Spiel "FantasyTennis".(Bin auf dieses gekommen, da ichs grad zockte
Was brauche ich ?
- Grundlegende Kenntnisse in C++
- Einen C++ Compiler/IDE
- CheatEngine/T-Search/OllyDbg/.., halt ein Memory Search Programm
- Das Spiel verstehen
- Und Geduld^^
Wie finden wir die Adresse bzw. den Pointer(ggf in manchen fällen MultiPointer) ?
Was wollen wir machen ?
Wir möchten den Punkte Stand in dem Single Player Modus ändern bzw. den Punkte Stand ercheaten/erhacken. (Für Multiplayer Modus müsste man es mit Packet editing machen damit man sich die Punkte erhacken kann.)
Wie finden wir die Punkte Stand Adresse ?
Wir starten Fantasy Tennis und gehen in den SinglePlayer Modus und starten das Match. Wir öffnen zb: Cheat Engine 6.1(da sie zurzeit nicht detected wird) und attachen FT.
Wir suchen dann nach 0.
Sobald die Suche beendet ist haben wir in den Suchergebnissen viele Adressen.
Deswegen lassen wir im Spiel 1 Ball durch und wir haben somit den Punktestand 0:15
Zurück in der CE suchen wir nach 1.
Jetzt haben wir wieder viele Adressen aber nicht so viele wie vorher.
Also lassen wir wieder ein Ball durch, dass wir dann einen Punktestand 0:30 haben.
In der CE suchen wir nach 2.
Jetzt lassen wir noch einmal den ball durch und haben den Punktestand 0:40. In der CE suchen wir nach 3.
Jetzt haben wir da eine Adresse stehen ! Da sie kein Pointer ist ändert sie sich nach jedem neustart von FT, also müssen wir den Pointer Suchen.
Also ziehen wir diese Adresse runter und machen ein rechtklick drauf -> "Pointer Scan for this Adress". Jetzt haben wir ein neues Fenster offen und da machen wir ein hackerl auf "Improve pointerscan with gathared heap data" und auf "Only allow static and heap adresses in path" und starten den pointerscan mit "Ok".
Wenn die Suche beendet wurde haben wir da eine Adresse: FT_Client.exe+003C5448 und seine offsets. Wir machen ein doppel Klick drauf damit wir die adresse unten in unserer Liste haben.
Den Pointer haben wir jetzt und jetzt zum Coden =)
Wie erstellen wir nun unseren .dll hack ??
Der Typ unseres Pointers ist 4 Byte, was somit bedeutet das der typ long, int oder/und float ist. In den meisten fällen ist es ein long, also verwenden wir long in unserer dll.
Der Datentyp long ist ein signed long, also geht es von –2,147,483,648 to 2,147,483,647.
Da wir aber nicht in den minus wert gehen wollen verwenden wir unsigned long. unsigned long geht von 0 to 4,294,967,295. Da wir also unsigned long haben können wir DWORD verwenden. Der DWORD ist Äquivalent unsigned long.
Erstellt ein neues Win32 Pojekt und wählt DLL aus.
So nun fangen wir mit dem coden an, und so sieht unser Grundgerüst fürs erste aus:
Code:
/*
*Wir inkludieren die "stdafx.h und iostream(=input output)
*iostream ist aber nicht nötig^^
*/
#include "stdafx.h"
#include <iostream>
using namespace std;
DWORD BasePointer = 0; // Wir deklarieren den BasePointer und setzten ihm den Wert 0
#define Points 0x00000424 // Hier definieren wir unseren Offset des Pointers
bool State = false; // Brauchen wir später für das einschalten und auschalten des Hacks
void punkte() // unsere main funktion
{
}
Jetzt machen wir weiter mit unserer Funktion, denn wir wollen das sie auch was macht :P Wir werden mit unserem State werte setzen für das ein-und ausschalten unseres Hacks. Wir werden auch eine neue Pointer Variable definieren.
Code:
/*
*Wir inkludieren die "stdafx.h und iostream(=input output)
*ist aber nicht nötig^^
*/
#include "stdafx.h"
#include <iostream>
using namespace std;
DWORD BasePointer = 0; // Wir deklarieren den BasePointer und setzten ihm den Wert 0
#define Points 0x00000424 // Hier definieren wir unseren Offset des Pointers
bool State = false; // Brauchen wir später für das einschalten und auschalten des Hacks
void punkte() // unsere main funktion
{
if(State)
{
DWORD dwBasePointer = *(DWORD*)BasePointer; // Unser Pointer den wir als hilfe verwenden werden um einen Wert der Adresse hinzu zufügen
if(dwBasePointer != 0) // Wenn der Pointer nicht 0 ist wird der Wert zugewiesen
{
DWORD &dwPoints = *(DWORD*)(dwBasePointer + Points); // Hier machen wir eine neue Variable durch den Base Pointer und denn Offset und haben somit die Pointer Adresse
dwPoints = 4; // Hier bekommt der Pointer bzw. Adresse den Wert 4, 4 macht dann für dich einen ganzen set.
//Also ball durchlassen und du bekommst den Set (1:0)
}
}
else // Vom State, also deaktivieren wir hier den Hack
{
DWORD dwBasePointer = *(DWORD*)BasePointer; // machen wieder eine neue Variable wie oben
if(dwBasePointer != 0) // wenn der Pointer nicht 0 ist wird der Wert zugewiesen
{
DWORD &dwPoints = *(DWORD*)(dwBasePointer + Points); // wie oben definieren wir mithilfe des Pointers und Offsets die Adresse
dwPoints = 0; //setzt den wert 0, also ist der Hack deaktiviert
}
}
}
Code:
DWORD WINAPI HackThread(LPVOID unused)
{
//---Hier wird unser BasePointer ausgerechnet !
DWORD ImageBase = (DWORD)GetModuleHandle(0); //Die Image Adresse ist in diesem fall FT_Client, holen uns also den Module Handle
BasePointer = ImageBase + 0x003C5448; // Um den BasePointer zu bekommen nehmen wir die Image Adresse und unsere Modul Adresse
//---------------------------------------------
for(; ;) //Eine unendliche schleife weil wir die Adresse gefreezt haben wollen ;)
{
punkte(); //unsere main funktion wird ausgeführt
if(GetAsyncKeyState(VK_F1)&1)State =! State; // Mit F1 aktivieren und deaktivieren wir den Hack
Sleep(10);
}
}
Code:
BOOL WINAPI DllMain(HINSTANCE mod, DWORD DWORD_GRUND, LPVOID res)
{
switch(DWORD_GRUND)
{
case DLL_PROCESS_ATTACH: //Falls die dll erfolgreich injeziert wird
CreateThread(0, 0, &HackThread , 0, 0, 0); // Wir erstellen den Thread in dem dann später injezierten Process
break;
case DLL_PROCESS_DETACH: //Falls die dll den Process nicht mehr findet
MessageBoxA(0, "Not Loaded", "Info",0); //Eine Messagebox die sagt das dll nicht mehr geladen ist
break;
}
return TRUE;
}
Ich weiß, mag sein das ich vill etwas mehr in das Spiel eingegangen bin,für den Pointer und so^^, aber der rest funktioniert gleich für jedes Spiel.
Das Problem ist nur, dass die Pointer suche in jedem Spiel anders ist, aber das erstellen eines dll hacks funktioniert auf diesem Prinzip.
Also ich hoffe ihr habt was daraus gelernt
Nehme gern Verbesserungsvorschläge und Kritik an =)
Mfg XxharCs






