[C++] Memory

05/27/2014 22:28 Nils94#1
Hallo, wenn ich in die Memory schreiben möchte, crasht immer das Spiel...
Der Code:
Code:
DWORD dwValue = 1000;
		DWORD dwOffset1 = *(DWORD*)("game.exe" + 0x00811768);
		DWORD dwOffset2 = *(DWORD*)(dwOffset1 + 0x28);
		DWORD dwOffset3 = *(DWORD*)(dwOffset2 + 0x2C);
		*(DWORD*)dwOffset3 = dwValue;
Info: Es ist eine dll-Datei und wird in das Spiel injected.
05/27/2014 22:33 snow#2
Code:
*(DWORD*)("game.exe" + 0x00811768);
Hier wird keine gültige Adresse dereferenziert. Wieso sollte "game.exe" die korrekte Imagebase returnen? Schau dir mal GetModuleHandle an.
05/27/2014 22:39 Nils94#3
Quote:
Originally Posted by snow911 View Post
Code:
*(DWORD*)("game.exe" + 0x00811768);
Hier wird keine gültige Adresse dereferenziert. Wieso sollte "game.exe" die korrekte Imagebase returnen? Schau dir mal GetModuleHandle an.
Habe es jetzt mit dwGetModuleBaseAddress gemacht, trotzdem crasht es.

Code:
DWORD baseAddress = dwGetModuleBaseAddress(GetPidFromName(TEXT("game.exe")), "game.exe");
05/27/2014 22:51 snow#4
Ich habe keine Ahnung, warum du eine solche Funktion verwendest & welchen Sinn GetPidFromName haben soll, wenn du bereits im Adressraum bist.

Schon mit einem Debugger nachgeschaut, woran es liegt? Oder die Adressen, die du nach dem Dereferenzieren mit denen, die CE anzeigt, verglichen?
05/28/2014 07:51 ​Tension#5
Quote:
Originally Posted by Nils94 View Post
Habe es jetzt mit dwGetModuleBaseAddress gemacht, trotzdem crasht es.

Code:
DWORD baseAddress = dwGetModuleBaseAddress(GetPidFromName(TEXT("game.exe")), "game.exe");
warum so kompliziert?
Code:
DWORD Base = (DWORD)GetModuleHandleA("game.exe");
05/28/2014 15:13 phize#6
"**CODER**"

[Only registered and activated users can see links. Click Here To Register...]
05/28/2014 15:58 +Yazzn#7
Quote:
Originally Posted by Tension
warum so kompliziert?
Code:
DWORD Base = (DWORD)GetModuleHandleA("game.exe");
warum so kompliziert?

Quote:
Originally Posted by snow911
Ich habe keine Ahnung, warum du eine solche Funktion verwendest & welchen Sinn GetPidFromName haben soll, wenn du bereits im Adressraum bist.
05/28/2014 18:42 Crossside#8
@op
Ganz ehrlich?
Bevor du irgendwelche Gamehacks versuchst zusammenzukopieren und dich dann wunderst warum das Game crasht, LERNE DIE SPRACHE.

Dein Code sieht so im Arsch aus.. du hast meiner Meinung nach keinerlei verständiss davon was du da zusammenwurschtelst, und scheinbar auch nicht was die einzelnen Funktionen machen und wie man sie nutzt.

BITTE tu uns & dir den Gefallen und lern C++ richtig.. und damit meine ich nicht irgendwelchen Code zusammenzukopieren auf gut Glück. Es ist einfach tierisch ätzend zu sehen das Leute "Hacks coden" wollen aber 0 Verständniss für die Sprache ansich haben.
Und wenn dann jemand von dir verlangt nen Bug zu fixen oder so "Bug fixen? Ich? Wie denn? Habs doch nur zusammenkopiert - ich kann nicht programmieren"..

Sorry aber - wie gesagt, so gehts defintiv nicht.. Gehs bitte richtig an, sonst machste hier noch zig tausend Threads auf mit "C++ Programm funzt nicht HELP" usw..
Für jede mini Frage die sich von selbst geklärt hätte wenn du es anständig lernen würdest.

Grüße
05/28/2014 19:23 ​Tension#9
Quote:
Originally Posted by Peter File View Post
warum so kompliziert?
Was ist an meiner Variante kompliziert?
05/28/2014 19:30 +Yazzn#10
Kleine Verbesserung: Warum so dämlich?

Quote:
Originally Posted by snow911
Ich habe keine Ahnung, warum du eine solche Funktion verwendest & welchen Sinn GetPidFromName haben soll, wenn du bereits im Adressraum bist.
05/28/2014 20:36 ​Tension#11
Quote:
Originally Posted by Peter File View Post
Kleine Verbesserung: Warum so dämlich?
Afaik bezieht sich snow auf die Funktionen:
dwGetModuleBaseAddress
GetPidFromName
welche meiner Vermutung nach auf Enumeration von den Modulen und Prozessen basieren ( oder GetModuleInformation aus der psapi.lib ), anstatt dieser Funktionen aber könnte er:
Code:
DWORD Base = (DWORD)GetModuleHandleA("game.exe");
verwenden, ich weiß also nicht was du daran nicht verstehst?
05/28/2014 21:38 +Yazzn#12
Quote:
Info: Es ist eine dll-Datei und wird in das Spiel injected.
Sollte also so funktionieren:

Code:
DWORD dwValue = 1000;
DWORD dwOffset1 = *(DWORD*)(0x811768);
if (dwOffset1)
	DWORD dwOffset2 = *(DWORD*)(dwOffset1 + 0x28);
	if (dwOffset2)
		DWORD dwOffset3 = *(DWORD*)(dwOffset2 + 0x2C);
		if (dwOffset3)
			*(DWORD*)dwOffset3 = dwValue;
Sollte das nicht funktionieren (auch nicht mit GetModuleHandle(NULL) + 0x811768) poste mal mehr Informationen (z.B. wann es crasht). Evtl. page protection an der Stelle von dwOffset3 auf PAGE_EXECUTE_READWRITE setzen.