-1

我正在寻找一种将指针地址从作弊引擎传递到一行代码的方法。

作弊引擎地址为 P-> 0C86D240。

代码行如下:

WriteProcessMemory(handle,(LPVOID)P->0C86D240,).

最后我想改变指针地址的值。

更新:我将 P-> 更改为 0x0C86D240 并且我能够为该游戏会话写入内存。关闭然后再次打开时,十六进制数不同

4

5 回答 5

4

P->0C86D240在作弊引擎中意味着该条目是一个指针链,最终解析为地址0x0C86D240。如果您在作弊引擎中双击此部分,您将看到一个弹出对话框,显示该指针链的组成部分。例如,让我们调用起始指针P0和一系列偏移量offset0, offset1, offset2, ...。指针链是获取地址处的值P0 + offset0,将其用作下一个指针P1,然后获取地址处的值P1 + offset1,将其用作下一个指针P2……这个链最终会为您提供地址0C86D240。如果你重置你的游戏,你希望你的游戏P0不会改变,但之后的一切都会动态变化(即P1, P2, P3,......)并一直跟踪到所需的值。

如果您知道指针链是如何工作的,那么将其转换为 C++ 就很简单了。您只需要记下基本指针和所有偏移量(如双击P->0C86D240零件弹出对话框所示)。然后,跟踪直到用完所有偏移量值。

于 2017-11-25T06:51:48.830 回答
2

您编写了一个遍历多级指针的函数,每一步它都会取消引用指针并添加相对偏移量。

对于这个例子,我将使用我制作的一个简单的攻击立方体作弊

FindDMAAddy 函数(查找动态内存分配地址):

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

主要代码:

    uintptr_t moduleBase = GetModuleBaseAddress(procId, L"ac_client.exe");

    //Get Handle to Process
    HANDLE hProcess = 0;
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, NULL, procId);

    //Resolve base address of the pointer chain
    uintptr_t dynamicPtrBaseAddr = moduleBase + 0x10f4f4;

    std::cout << "DynamicPtrBaseAddr = " << "0x" << std::hex << dynamicPtrBaseAddr << std::endl;

    //Resolve our ammo pointer chain
    std::vector<unsigned int> ammoOffsets = { 0x374, 0x14, 0x0 };
    uintptr_t ammoAddr = FindDMAAddy(hProcess, dynamicPtrBaseAddr, ammoOffsets);

    std::cout << "ammoAddr = " << "0x" << std::hex << ammoAddr << std::endl;

您可以在此处找到我的答案的更完整版本,但您似乎已经知道其余部分。

于 2019-11-12T04:58:47.380 回答
1

第 1 步:使用作弊引擎搜索您要更改的值。

第 2 步:如果您找到了正确的地址,请右键单击它并对该地址进行指针扫描。现在你应该得到许多带有一些偏移量的基地址。

第 3 步:关闭游戏并重复第 1 步。现在复制新地址并单击重新扫描指针扫描(在从第 2 步打开的窗口中)。将新地址粘贴到重新扫描地址字段并重新扫描。那么你应该只得到正确的基地址+偏移量。

第 4 步:要始终找到正确的地址,请执行以下操作:readprocessmemory(baseaddress+offset)

于 2018-02-27T15:28:36.193 回答
-1

首先,我无法弄清楚 P-> 的含义可能会删除它并将值设为 0x 的十六进制

关闭然后再次打开时,十六进制数不同

我猜你说的是游戏,如果我错了,请不要继续阅读

因此,您从作弊引擎获得的地址可能是动态地址,这意味着每次您关闭或打开它时,该值都会改变,程序将被分配到内存中的另一个位置

那你该怎么办.....

你可以找到静态地址这个过程有点复杂我建议你看一个教程https://www.youtube.com/watch?v=hfWOAFsYnFA

于 2017-07-23T09:46:39.643 回答
-1

程序内置的作弊引擎教程涵盖了多级指​​针。先做你的工作。如果您已经找到了指针,那么您就有了正在寻找的地址:一个静态地址,指向包含您要修改的值的地址。

于 2019-04-30T17:35:33.113 回答