Problem mit ReadProcessMemory
-
es geht zwar schneller aber ich finde auch nur 200 Addressen statt 600...
dafür ist der Preis zu hoch
-
ist ja auch logisch du MUSST jedes byte durchlaufen um die meisten addressen zu erhalten sonst überspringst du die ja
-
wie mache ich es dann schneller
-
Indem du dir einen grösseren Block, sagen wir 64KB oder sowas, mit ReadProcessMemory holst, und in dem Block dann "direkt" suchst.
-
DWORD read = 0; LPBYTE buffer = new BYTE[end - start]; ReadProcessMemory(hackProcess, (LPVOID)start, &buffer, end-start, &read); delete[] buffer;
das würde ich ja gerne, nur das Programm beendet sich nachdem ReadProcessMemory ausgeführt wurde. (auch ohne delete)
-
mittlerweile habe ich das Problem behoben nur wie kann ich dann aus diesem rießen array die werte wie früher finden? wäre für code dankbar
-
ach mist das ist zwar sehr schnell aber ich kann es trotzdem nicht so machen -.-
ich muss ja die addresse wissen an der dieser wert gefunden wurde
-
Markus20 schrieb:
ach mist das ist zwar sehr schnell aber ich kann es trotzdem nicht so machen -.-
ich muss ja die addresse wissen an der dieser wert gefunden wurdeund wo ist das problem?
-
wenn ich gleich nen ganzen block einlese weiß ich ja nicht wo was gefunden wurde
-
so schätze ich dich auch ein, ja
-
Markus20 schrieb:
ach mist das ist zwar sehr schnell aber ich kann es trotzdem nicht so machen -.-
ich muss ja die addresse wissen an der dieser wert gefunden wurde1.Du merkst die die Adresse die du ReadProcessMemory übergibst (damit ist die Adresse gemeint wo ReadProcessMemory im Prozess anfängt die Daten auszulesen).
2.Jetzt suchst du im Array (welches du von ReadProcessMemory bekommst) nach deinen Gewünschten Daten, wenn es ein char ist, überprüfst du immer 1 byte und gehst dann 1 byte weiter (bei doubel byte character set immer 2 bytes überprüfen und 1 weiter gehen).
3. Wenn du den Wert gefunden hast, merkst du dir an welcher Stelle im Array zb. 42.
Jetzt addierst du dazu die Adresse die du ReadProcessMemory übergeben hast, und schon hast du die Adresse im Speicher.
-
ich habe es jetzt so gemacht, aber er findet damit viel mehr addressen als eigentlich da sind. ( er findet 500 andere 50)
hier mal mein Code:void ScanMem(DWORD start, DWORD end, LPVOID value) { DWORD read = 0; LPBYTE buffer = new BYTE[end-start]; TCHAR foundet[200]; int address; ReadProcessMemory(hackProcess, (void*)start, buffer, end - start, &read); for(int i = 0; i < (end-start); ++i) { if(buffer[i] == (int)value) { address = start + i; _stprintf(foundet, TEXT("Address: %.8X Value: %d"), address, value); SendMessage(GetDlgItem(hwndMainDlg, IDC_LIST2), LB_ADDSTRING, 0, (LPARAM)foundet); ++zaehler; } } delete[] buffer; }