Чтение памяти процесса - PullRequest
       7

Чтение памяти процесса

2 голосов
/ 20 февраля 2010

Я пытаюсь прочитать память процесса консольной программы, используя функцию API ReadProcessMemory ().

Обновленный код:

    HWND hWnd = FindWindow(NULL, "Read Memory Window");
    DWORD ProcessId;
    ProcessId = GetProcessId(hWnd);
    GetWindowThreadProcessId(hWnd, &ProcessId);
    HANDLE hProcess = OpenProcess(PROCESS_VM_READ,FALSE, ProcessId);

    SIZE_T NumberOfBytesRead;
    CHAR Buffer[128] = {0};
    dwAddr = 0x0012FD6C; //address of array to get
    BOOL sucess = ReadProcessMemory(hProcess, &dwAddr, &Buffer, 128, &NumberOfBytesRead);

Я получаю значения NULL и мусора, когда запускаю программу вместе с программой для чтения массива.

1 Ответ

3 голосов
/ 20 февраля 2010

вы используете фиксированный адрес, что, как правило, очень плохая идея, тем более что теперь Windows Vista и Windows 7 используют ASLR , что делает его небезопасным даже для модулей на фиксированной основе (даже без ASLR это небезопасно потому что изображение может перераспределяться по разным причинам).

также, этот адрес выглядит очень хитрым, как вы узнали этот адрес? и корректно ли он настроен как виртуальный адрес, а не как относительный адрес?

наконец, и самое главное, вы не должны передавать адрес и буфер, как вы это делаете, они должны передаваться так:

BOOL sucess = ReadProcessMemory(hProcess, (LPVOID)dwAddr, &Buffer[0], 128, &NumberOfBytesRead);

или

BOOL sucess = ReadProcessMemory(hProcess, (LPVOID)dwAddr, Buffer, 128, &NumberOfBytesRead);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...