读取进程内存

时间:2010-02-20 03:16:44

标签: c++ winapi memory

我正在尝试使用ReadProcessMemory()API函数读取控制台程序的进程内存。

更新代码:

    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 个答案:

答案 0 :(得分:3)

你使用一个固定的地址,这通常是一个非常糟糕的主意,现在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);