在具有多级指针和偏移的C++中使用WriteProcessMemory()

Using WriteProcessMemory() in C++ with Multilevel Pointers and Offsets?

本文关键字:C++ WriteProcessMemory 多级 指针      更新时间:2023-10-16

WriteProcessMemory()的一个参数显然要求指向基地址的指针。但如果它是一个多级指针呢?例如,假设我必须找到一个指针三次才能最终得到静态地址,第一个偏移量是0,第二个偏移量57,第三个偏移量268。现在,如果我想写到那个确切的位置,我该如何将偏移量包括在WriteProcessMemory()函数中?我必须包括所有三个偏移量,还是只包括最后一个导致我到达静态地址的偏移量?为了澄清问题,我基本上是在PC上的第一人称射击游戏中练习操纵记忆。我的目标并不是真的制造黑客或其他什么。我只是想练习把记忆写进一个过程中。(例如,我会尝试将新值写入"health"地址或"ammo"地址。)我主要想知道如何计算多级指针中的偏移量。

地址就是地址。如果你用多级指针(一个指向一个指针的指针)来访问它,那也没关系。

基址是你要写入的地址。你的多级指针指向的地址都在这个参数中。

WriteProcessMemory将绝对数据放入内存。如果你想在内存中写入多级结构,例如在元素中有指针,那么你需要根据远程lpBaseAddress和你正在写入的数据量来写入指针值,并且你需要写入放置在内存中的数据。

如果您正在写入的结构中有指针,那么除非您将它们重写为正在写入的目标数据的一部分,否则它们将不起作用。

不能在对WriteProcessMemory()的调用中"包含"偏移量来遍历指针链。多级指针或指针链是指指向指向某个指针的指针。在大多数情况下,必须在每个指针被取消引用后添加相对偏移。

WriteProcessMemory只写入一个地址,它的目的是单一的。

但您必须取消引用每个指针并添加偏移量。要执行此操作,必须使用ReadProcessMemory。您可以使用此函数来遍历指针链,它将取消引用每个指针并正确添加偏移量:

uintptr_t FindDMAAddy(HANDLE hProc, uintptr_t ptr, std::vector<unsigned int> offsets)
{
    for (unsigned int i = 0; i < offsets.size(); ++i)
    {
        ReadProcessMemory(hProc, (BYTE*)ptr, &ptr, sizeof(ptr), 0);
        ptr += offsets[i];
    }
    return ptr;
}

调用函数的示例如下:

uintptr_t ammoAddr = FindDMAAddy(hProcess, dynamicPtrBaseAddr, { 0x374, 0x14, 0x0 });

此函数的结果将是要读取或写入的变量的地址。剩下要做的就是根据您想要做的操作对ReadProcessMemory或WriteProcessMemory进行后续调用

相关文章:
  • 没有找到相关文章