Brauche Hilfe bei Offsets

10/26/2012 21:17 marykillsjane#1
Also ich habe ein sehr gutes Tutoral gefunden womit man die Speicheraddressen mittels Cheat engine auslesen kann und dann ein Programm schreiben kann welches auf diese Adresse zugreift und das Value ändern kann das hat auch alles einwandfrei funktioniert hier mal der code :
// Gamehack.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"

#include <windows.h> // Hier sind die Funktionen die wir später noch brauchen
#include <iostream> // Sollte klar sein

using namespace std; // Sollte auch klar sein ...

int main() // Unsere Main Funktion...
{
HWND hwnd; // Unsere Variable die das Fensterhandle speichert.
hwnd = FindWindow(0,L"Solitär");

// Der Fenstertitel vom Solitärfenster ist "Solitär". Das erste Parameter ist der "ClassName" den wir aber getrost ignorieren können. Das zweite Parameter ist unser Fenstername. Das "L" steht für eine Typkonvertierung..
DWORD Id; // Die ID wird in einer Variable des Typ's DWORD gespeichert.
HANDLE ProcessHandle;
int value; // Der Wert den wir schreiben wollen.
unsigned adress = 0x000BB038; // Unsere Adresse


if(!hwnd) // Also das Fenster nicht vorhanden ist...
{
cout << "Solitär nicht gefunden!" << endl; // Gebe das aus
}
else // ansonsten...
{
cout << "Solitär gefunden!" << endl; // gebe das aus
cout << "Fensterhandle: " << hwnd << endl; // Wir können uns das Handle auch nochmal angucken ...
GetWindowThreadProcessId(hwnd,&Id); // Mit GetWindowThreadProcessId kann man die ID herausfinden. Das erste Parameter ist unser Fensterhandle. Das zweite gibt an, wo die ID gespeichert werden soll.
cout << Id << endl;
ProcessHandle = OpenProcess(PROCESS_VM_WRITE |PROCESS_VM_OPERATION ,false,Id);

cout << "ProcessHandle: " << ProcessHandle << endl;

cout << "How much points to add? "; // Wieviel Punkte sollen geschrieben werden ???
cin >> value; // Den Wert übernehmen
fflush(stdin);



WriteProcessMemory(ProcessHandle,(LPVOID)adress,&v alue,sizeof(int),NULL); // Den Wert schreiben !
cout << "Wert geschrieben" << endl;
}


cin.get(); //Damit sich unser Programm nicht sofort schließt...
}


So mein Problem ist nun das sich diese Adresse ja natürlich bei jedem neustart von Solitär ändert und ich somit erstmal den BasePointer + die Offsets mit Cheat Engine suchen muss was auch funktioniert.
Allerdings weiß ich nun nicht genau wie ich die Offsets in meinen Code einbringen kann.
Ich habe i-wo gelsen das i-wie mit ReadProcessmemory dann die Base Addresse und die Offsets zusammenaddieren muss ,die Endaddresse dann in einer Variablen speichern muss und mit dieser Variablen dann z.b. auch das Value verändern kann.
Hätte da jmd ein Code beispiel ( am besten natürlich eins zu dem Code den ich gepostet habe) wie ich das ganze nun lösen kann?
10/27/2012 13:16 Sk1dr0w#2
Bitte lern doch einfach die Grundlagen.
10/27/2012 13:22 marykillsjane#3
Quote:
Originally Posted by Sk1dr0w View Post
Bitte lern doch einfach die Grundlagen.
Danke der Spruch hat mir jetzt wesentlich bei meinem Problem geholfen-.-.
Ich habe die einfachen Grundlagen drauf und habe soweit alles an dem Programm verstanden,jetzt habe ich aber ein Problem wie ich das mit den Offsets mache ( wie ich das im code schreiben soll da ich gehört habe sie werden i-wie zur Base Addresse addiert,aber kein Beispiel gefunden habe.
Dein Spruch bringt dir und mir nichts warum kannst du mir nicht einfach mit nem kleinen Beispiel helfen statt hier so nen Spruch abzulassen?
Ich hab zu nem bestimmten Thema ne Frage und suche dazu entweder ein tut oder ein Beispiel von jmd warum soll ich mir jetzt deiner meinung nach die Grundlagen nochmal angucken? In meinem Buch was ich gekauft habe ist nichts von Offsets beschrieben usw,da kann mir doch bst jmd hier mal ein Beispiel geben ....
10/27/2012 13:34 °Remus°#4
Quote:
Originally Posted by marykillsjane View Post
Danke der Spruch hat mir jetzt wesentlich bei meinem Problem geholfen-.-.
Ich habe die einfachen Grundlagen drauf und habe soweit alles an dem Programm verstanden,jetzt habe ich aber ein Problem wie ich das mit den Offsets mache ( wie ich das im code schreiben soll da ich gehört habe sie werden i-wie zur Base Addresse addiert,aber kein Beispiel gefunden habe.
Dein Spruch bringt dir und mir nichts warum kannst du mir nicht einfach mit nem kleinen Beispiel helfen statt hier so nen Spruch abzulassen?
Ich hab zu nem bestimmten Thema ne Frage und suche dazu entweder ein tut oder ein Beispiel von jmd warum soll ich mir jetzt deiner meinung nach die Grundlagen nochmal angucken? In meinem Buch was ich gekauft habe ist nichts von Offsets beschrieben usw,da kann mir doch bst jmd hier mal ein Beispiel geben ....
Wenn du dich ernsthafter mit sowas beschäftigen willst sollstest du einfach lernen Informationen selbst zu finden, sonst wirst du nicht weit kommen.
Wenn du EPVP nach Sachen wie "Pointer benutzen" durchsuchst solltest du mit etwas Anstrengung selbst drauf kommen. Oder du lernst am besten einfach die Grundlagen...
10/27/2012 14:12 marykillsjane#5
Quote:
Originally Posted by °Remus° View Post
Wenn du dich ernsthafter mit sowas beschäftigen willst sollstest du einfach lernen Informationen selbst zu finden, sonst wirst du nicht weit kommen.
Wenn du EPVP nach Sachen wie "Pointer benutzen" durchsuchst solltest du mit etwas Anstrengung selbst drauf kommen. Oder du lernst am besten einfach die Grundlagen...
Naja danke dir erstmal fürs stichwort Pointer hab danach gesucht und auch was gefunden jetzt was ich auch gut verstehe .
#include "stdafx.h"
#include <Windows.h>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
DWORD adresse1 = 0x00645378;
DWORD offset1= 0x4;
DWORD adresse2;
DWORD offset2= 0x51F4;
DWORD adresse3;

int value;
DWORD pid;

HWND hwnd = FindWindow(NULL, "STREET FIGHTER IV");

GetWindowThreadProcessId(hwnd, &pid);
HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);

if(!phandle)
{
printf("SF4 nicht gefunden!\n");
system("Pause");
return 0;
}
else
{
printf("SF4 Fenster gefunden, PID: %d\n\n", pid);
}
if(ReadProcessMemory(phandle, (LPCVOID)adresse1, &adresse2, sizeof(DWORD), 0))
printf("Succes!\n");
else
printf("Failed!\n");
adresse2 = adresse2+offset1;

if(ReadProcessMemory(phandle, (LPCVOID)adresse2, &adresse3, sizeof(DWORD), 0))
printf("Succes!\n");
else
printf("Failed!\n");
adresse3 = adresse3+offset2;

if(ReadProcessMemory(phandle, (LPCVOID)adresse3, &value, sizeof(int), 0))
printf("Succes!\n\n");
else
printf("Failed!\n\n");

printf("%d\n", value);
system("Pause");
return 0;
}


Werde das nachher in meinen Code einbauen und testen so wie er es hier gemacht hat.
Also mit readprocessmemory .