Windows 7 - WriteProcessMemory有效但无法看到效果

时间:2014-03-25 16:18:24

标签: c++ c windows

我知道有很多问题,但似乎都没有解决我的问题。

我正在玩WriteProcessMemory函数。这一切看起来都很简单,但我在这里遇到了一个问题,似乎无法找到解决方案。

我有什么:

1)“受害者” - 应该改变记忆的过程

#include <windows.h>
#include <stdio.h>

int main()
{

    SetConsoleTitle("MyTest");

    int var = 5;

    printf ("%p\n\n\n\n", &var);

    while (1)
    {
        printf ("%d\n", var);
        Sleep(1000);
    }

    return 0;
}

2)“攻击者” - 试图改变“var”变量的过程

#include <stdio.h>
#include <windows.h>

int main() {

    HWND hwnd;       
    HANDLE handle;   
    DWORD pid;       

    hwnd = FindWindow(0, "MyTest");
    GetWindowThreadProcessId(hwnd, &pid);
    handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);

    int NewVar = 89; 

    SIZE_T bytesWritten = 0;

    printf ("%d\n", WriteProcessMemory(handle, (void *)ADDRESS, &NewVar, 4, &bytesWritten)); 

    printf("%d\n", bytesWritten);

    return 0;
}

当然,ADDRESS就是“受害者”告诉我们“var”变量的位置。

问题:

当我启动受害者然后启动攻击者时,WriteProcessMemory返回1并且bytesWritten设置为4 - 所以,理论上,一切都很顺利。问题是客户端仍然printfs 5,5,5而不是89.我已经尝试了另一个例子,无济于事。我做错了什么?

不确定是否有必要,但操作系统是32位Windows 7 Ultimate。

1 个答案:

答案 0 :(得分:1)

试试volatile int var = 5;。编译器可能永远不会从RAM重新加载变量,而是将其保存在寄存器中。