gpt4 book ai didi

c++ - Windows 7 - WriteProcessMemory 有效但看不到任何效果

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:24 33 4
gpt4 key购买 nike

我知道有很多关于此的问题,但似乎没有一个能解决我的问题。

我正在研究 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。

最佳答案

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

关于c++ - Windows 7 - WriteProcessMemory 有效但看不到任何效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22640422/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com