Gå til innhold

WriteProcessMemory med flere Offsets?, C++


Anbefalte innlegg

Jeg har hatt problemer med et svært irriterende problem i det siste...Hvordan bruker jeg WriteProcessMemory funksjonen i C++ med flere Offsets?

 

Dette bildet viser hvordan ("client.dll" + 04AF4B34) med alle offsettsa henviser til addressen ("06D1FD34")

 

SLW1zg7.png'

 

Så hvordan skal jeg egentlig bruke WriteProcessMemory, med så mange offsets?

Mitt forslag til hvordan man gjør dette ser noe sånt ut:

DWORD offset1 = 0x1C;
DWORD offset2 = 0x20;
DWORD offset3 = 0x568;
DWORD offset4 = 0x134;

DWORD base = 0x04AF3C94;
DWORD pointer;
DWORD pointer2;
DWORD pointer3;
DWORD pointer4;
DWORD pointer5;
ReadProcessMemory(handle, LPVOID(base), &pointer, sizeof(pointer), 0);
ReadProcessMemory(handle, LPVOID(pointer + offset1), &pointer2, sizeof(pointer2), 0);
ReadProcessMemory(handle, LPVOID(pointer2 + offset2), &pointer3, sizeof(pointer3), 0);
ReadProcessMemory(handle, LPVOID(pointer3 + offset3), &pointer4, sizeof(pointer4), 0);
ReadProcessMemory(handle, LPVOID(pointer4 + offset4), &pointer5, sizeof(pointer5), 0);

int value = 500;
WriteProcessMemory(handle, LPVOID(pointer5), &value, sizeof(value), 0);

Som du sikkert ser, så adderer jeg hver "pointer" med en ny offset hver gang...Men dette fungerer jo ikke? Hva kan det store problemet til dette mysteriet være?

Endret av 1EDA70
Lenke til kommentar
Videoannonse
Annonse

Det kan være forskjellige ting som gjør at noe ikke fungerer som forventet. Jeg anbefaler å starte med å begrense de mulige årsakene til problemet. Lag helst den enkleste kodesnutten som reproduserer problemet og finn ut hvorfor du ikke får forventet resultat.

 

Har du f.eks. sjekket at ReadProcessMemory ikke feiler? Du bør også sjekke verdiene/adressene du leser inn med det du ser i Cheat Engine.

 

Du kan også ikke regne med at adressen til client.dll er den samme hver gang den lastes inn i prosessen. Er adressen base (0x04AF3C94) relativ til client.dll eller er det en «absolutt» adresse?

 

Jeg husker ikke i farten om det er greit å bruke resultatet fra GetModuleHandle/Ex (samme som «base of image» tror jeg) for å gjøre de relative adressene du ser i Cheat Engine om til «absolutte» adresser, eller om du også må bruke «base of code» fra PE-strukturen (se ImageNtHeader og IMAGE_OPTIONAL_HEADER).

Endret av ahw_
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...