ProcessMemoryRead

05/20/2015 17:20 FroZenBabE#1
CODE

Hey zusammen ich habe folgendes Problem ich möchte eine DLL in ein Process injecten, den Wert einer bestimmten Adresse auslesen und zudem einen neuen Wert Addieren.Das injecten is soweit kein Problem.
Nun kenne ich mich damit nich besonders aus und jetz weis ich nicht genau was hProc ist bzw wie ich diesen Definiere soweit ich das weis ist darin der Process angegeben aber ich weis nicht wie ich das mache da ich meine dll injecte

Bin für jede Hilfe dankbar :)
05/20/2015 17:44 alpines#2
Ein Blick in die Dokumentation hilft weiter [Only registered and activated users can see links. Click Here To Register...].
05/20/2015 17:58 FroZenBabE#3
Hab ich schon reingekuckt kann ich aber iwi nix mit anfangen
Ich versteh auch nich was genau ein Handle ist gibt nirgends ne anständige erklärung
05/20/2015 19:13 hazejp#4
Probier es mal so (angenommen, dein Wert ist 4 Bytes lang)

Code:
#include <Windows.h>

DWORD ReadValue(DWORD pid, PVOID addr)
{
	HANDLE hProcess;
	DWORD x;

	if ( ! (hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid) )
		return (DWORD)-1;

	if (FALSE == ReadProcessMemory (hProcess, addr, &x, sizeof(DWORD), NULL))
	{
		CloseHandle(hProcess);
		return (DWORD)-1;
	}

	CloseHandle(hProcess);
	return x;
}
PS: Da sich dein Code in der DLL befindet, musst du ReadProcessMemory() gar nicht benutzen;
Der Code & die Daten befinden sich im selben virtuellen Speicherbereich.
05/20/2015 19:21 FroZenBabE#5
Achso d.h ich kann mir eigentlich einfach den wert der adresse in ner Variablen speichern und kann mir somit den ganzen rest schenken ?
05/20/2015 19:26 hazejp#6
Kurz gesagt: Ja.
ReadProcessMemory() & co. brauchst du wirklich nur dann, wenn du einen external Cheat programmierst
05/21/2015 02:55 FroZenBabE#7
Code:
		int key;
		DWORD dwBasePointerStr = *(DWORD*)BasePointer;
		DWORD *dwStr = (DWORD*)(dwBasePointerStr + OffsetStr);
		key = *dwStr;
		*dwStr =key + 10;
Kann mir irgendjemand helfen ? Anstatt das +10 Addiert werden kommt irgendein riesengroßer Müll raus also würde der Wert immer mit 123142312 Multipliziert werden... Kein Schimmer wodrans liegt.
05/21/2015 07:13 Terrat#8
Quote:
Originally Posted by FroZenBabE View Post
Code:
		int key;
		DWORD dwBasePointerStr = *(DWORD*)BasePointer;
		DWORD *dwStr = (DWORD*)(dwBasePointerStr + OffsetStr);
		key = *dwStr;
		*dwStr =key + 10;
Kann mir irgendjemand helfen ? Anstatt das +10 Addiert werden kommt irgendein riesengroßer Müll raus also würde der Wert immer mit 123142312 Multipliziert werden... Kein Schimmer wodrans liegt.
Hast du key initialisiert? Key =0;?
05/21/2015 13:26 FroZenBabE#9
Quote:
Originally Posted by Terrat View Post
Hast du key initialisiert? Key =0;?
Jop ändert auch nichts... :/
05/21/2015 16:49 Padmak#10
Natürlich ändert das nichts, du weist doch key direkt danach wieder zu

Bist du dir sicher, dass du einen int haben willst?
Ein DWORD würde wesentlich mehr Sinn machen hier ;)
Wenn es dann immer noch nicht geht, stell erst mal sicher ob deine anderen Variablen alle die korrekten Werte haben

Padmak
05/21/2015 17:07 FroZenBabE#11
Code:
                DWORD key = 0;
		DWORD dwBasePointerStr = *(DWORD*)BasePointer;
		DWORD *dwStr = (DWORD*)(dwBasePointerStr + OffsetStr);
		key = *dwStr;
		*dwStr =key + 10;
Selbes Ergebnis also *dwStr ist 10 und key wird dann = *dwstr gesezt also müsste Key = 10 sein und *dwStr = key+10 = 20
Die Adresse muss eigentlich richtig sein da er ja auch in diese Adresse hineinschreiben kann.. aber anstatt 20 steht dort halt irgendne fantasie zahl
05/21/2015 17:32 Padmak#12
Ich meine dass du dir mal *dwStr ausgeben lässt bevor du irgendwas änderst, und ob BasePointer, dwBasePointerStr und OffsetStr richtig sind
Vermutlich nämlich nicht

Padmak
05/21/2015 19:02 FroZenBabE#13
dwBaseStr und OffsetStr sind 100% richtig hab ich auch grad gesagt... schlieslich gibt es die adresse an in der die Value liegt und wenn ich z.b *dwStr = 500 setze ist der Wert auch ingame zu sehen also alles paletti
Wie geb ich *dwStr aus ? is ja ne DLL
05/21/2015 19:16 hazejp#14
Quote:
Originally Posted by FroZenBabE View Post
dwBaseStr und OffsetStr sind 100% richtig hab ich auch grad gesagt... schlieslich gibt es die adresse an in der die Value liegt und wenn ich z.b *dwStr = 500 setze ist der Wert auch ingame zu sehen also alles paletti
Wie geb ich *dwStr aus ? is ja ne DLL
Am einfachsten per MessageBox, oder über die Konsole (vorher mit AllocConsole() erstellen)
05/22/2015 10:30 Padmak#15
Nur weil du an eine Adresse schreiben kannst, heißt das noch lange nicht dass sie korrekt ist :P
Achso? Du kannst den Wert setzen, aber wenn du auf ihn zugreifst und ihn verändern willst dann funktioniert es nicht? Interessant...
Mach mal was hazejp gesagt hat, falls du keine Lust hast nachzudenken wie du eine Konsole erstellst: [Only registered and activated users can see links. Click Here To Register...] (habe ich früher immer benutzt, funktioniert tadellos)

Padmak