|
You last visited: Today at 22:43
Advertisement
ProcessMemoryRead
Discussion on ProcessMemoryRead within the C/C++ forum part of the Coders Den category.
05/20/2015, 17:20
|
#1
|
elite*gold: 0
Join Date: Oct 2010
Posts: 233
Received Thanks: 2,324
|
ProcessMemoryRead
CODE
HANDLE hProc;
int key;
ReadProcessMemory(hProc, (LPCVOID)dwStr, &key, sizeof(int), &numBytesRead);
dwStr=key+15;
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
|
#2
|
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
|
Ein Blick in die Dokumentation hilft weiter  .
|
|
|
05/20/2015, 17:58
|
#3
|
elite*gold: 0
Join Date: Oct 2010
Posts: 233
Received Thanks: 2,324
|
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
|
#4
|
elite*gold: 0
Join Date: Jan 2015
Posts: 62
Received Thanks: 13
|
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
|
#5
|
elite*gold: 0
Join Date: Oct 2010
Posts: 233
Received Thanks: 2,324
|
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
|
#6
|
elite*gold: 0
Join Date: Jan 2015
Posts: 62
Received Thanks: 13
|
Kurz gesagt: Ja.
ReadProcessMemory() & co. brauchst du wirklich nur dann, wenn du einen external Cheat programmierst
|
|
|
05/21/2015, 02:55
|
#7
|
elite*gold: 0
Join Date: Oct 2010
Posts: 233
Received Thanks: 2,324
|
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
|
#8
|
elite*gold: 130
Join Date: Apr 2012
Posts: 1,173
Received Thanks: 670
|
Quote:
Originally Posted by FroZenBabE
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
|
#9
|
elite*gold: 0
Join Date: Oct 2010
Posts: 233
Received Thanks: 2,324
|
Quote:
Originally Posted by Terrat
Hast du key initialisiert? Key =0;?
|
Jop ändert auch nichts... :/
|
|
|
05/21/2015, 16:49
|
#10
|
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
|
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
|
#11
|
elite*gold: 0
Join Date: Oct 2010
Posts: 233
Received Thanks: 2,324
|
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
|
#12
|
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
|
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
|
#13
|
elite*gold: 0
Join Date: Oct 2010
Posts: 233
Received Thanks: 2,324
|
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
|
#14
|
elite*gold: 0
Join Date: Jan 2015
Posts: 62
Received Thanks: 13
|
Quote:
Originally Posted by FroZenBabE
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
|
#15
|
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
|
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:  (habe ich früher immer benutzt, funktioniert tadellos)
Padmak
|
|
|
All times are GMT +1. The time now is 22:43.
|
|