2017-06-08 3 views
2

Wie nutze ich WriteProcessMemory, um die Munition meiner aktuellen Munitionsadresse zu ändern? Ich kann es lesen Ich weiß einfach nicht wie ich es schreiben soll. Ist SetAmmo. Ich dachte, ich mache alles richtig?Wie akzeptiert man Benutzereingaben für eine Konstante und verwendet writeprocessmemory?

Code:

#include <iostream> 
#include <math.h> 
#include <conio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <Windows.h> 
using namespace std; 

DWORD pid; 
DWORD Ammo = 0x07823C5EC; 
int MyAmmo; 
int SetAmmo = 1; 
int main(){ 

    HWND hwnd = FindWindowA(0, ("Garry's Mod")); 

    GetWindowThreadProcessId(hwnd, &pid); 
    HANDLE pHandle = OpenProcess(PROCESS_VM_READ, FALSE, pid); 

    ReadProcessMemory(pHandle, (LPVOID)Ammo, &MyAmmo, sizeof(MyAmmo), 0); 
    cout<<"Current Ammo = "<<MyAmmo<<endl; 

    WriteProcessMemory(pHandle, (LPVOID)Ammo, &SetAmmo, sizeof(SetAmmo), 0); 
    system("Pause"); 
    return 0; 
} 
+0

, warum dies nicht so aussehen wie Sie einen Hack zu machen versuchen, ? – Mischa

Antwort

0

Sie den Prozess mit Lesezugriff öffnen:

HANDLE pHandle = OpenProcess(PROCESS_VM_READ, FALSE, pid); 

Versuch:

HANDLE pHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); 
+0

danke soooo viel für das Aufräumen! –

+0

Verwenden Sie nicht 'PROCESS_ALL_ACCESS'. Fordern Sie nur die Mindestrechte an, die Sie tatsächlich benötigen. Um 'ReadProcessMemory' zu verwenden, brauchen Sie nur das 'PROCESS_VM_READ'-Recht. Um "WriteProcessMemory" zu verwenden, benötigen Sie nur die Rechte "PROCESS_VM_WRITE" und "PROCESS_VM_OPERATION". Dies ist in der Dokumentation beschrieben. Verwenden Sie stattdessen stattdessen: 'HANDLE pHandle = OpenProcess (PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION, FALSE, pid);' –

+0

Remy hat absolut Recht! – mattideluxe

Verwandte Themen