我正在寻找一种将指针地址从作弊引擎传递到一行代码的方法。
作弊引擎地址为 P-> 0C86D240。
代码行如下:
WriteProcessMemory(handle,(LPVOID)P->0C86D240,).
最后我想改变指针地址的值。
更新:我将 P-> 更改为 0x0C86D240 并且我能够为该游戏会话写入内存。关闭然后再次打开时,十六进制数不同
我正在寻找一种将指针地址从作弊引擎传递到一行代码的方法。
作弊引擎地址为 P-> 0C86D240。
代码行如下:
WriteProcessMemory(handle,(LPVOID)P->0C86D240,).
最后我想改变指针地址的值。
更新:我将 P-> 更改为 0x0C86D240 并且我能够为该游戏会话写入内存。关闭然后再次打开时,十六进制数不同
P->0C86D240
在作弊引擎中意味着该条目是一个指针链,最终解析为地址0x0C86D240
。如果您在作弊引擎中双击此部分,您将看到一个弹出对话框,显示该指针链的组成部分。例如,让我们调用起始指针P0
和一系列偏移量offset0, offset1, offset2, ...
。指针链是获取地址处的值P0 + offset0
,将其用作下一个指针P1
,然后获取地址处的值P1 + offset1
,将其用作下一个指针P2
……这个链最终会为您提供地址0C86D240
。如果你重置你的游戏,你希望你的游戏P0
不会改变,但之后的一切都会动态变化(即P1, P2, P3,
......)并一直跟踪到所需的值。
如果您知道指针链是如何工作的,那么将其转换为 C++ 就很简单了。您只需要记下基本指针和所有偏移量(如双击P->0C86D240
零件弹出对话框所示)。然后,跟踪直到用完所有偏移量值。
您编写了一个遍历多级指针的函数,每一步它都会取消引用指针并添加相对偏移量。
对于这个例子,我将使用我制作的一个简单的攻击立方体作弊
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;
您可以在此处找到我的答案的更完整版本,但您似乎已经知道其余部分。
第 1 步:使用作弊引擎搜索您要更改的值。
第 2 步:如果您找到了正确的地址,请右键单击它并对该地址进行指针扫描。现在你应该得到许多带有一些偏移量的基地址。
第 3 步:关闭游戏并重复第 1 步。现在复制新地址并单击重新扫描指针扫描(在从第 2 步打开的窗口中)。将新地址粘贴到重新扫描地址字段并重新扫描。那么你应该只得到正确的基地址+偏移量。
第 4 步:要始终找到正确的地址,请执行以下操作:readprocessmemory(baseaddress+offset)
首先,我无法弄清楚 P-> 的含义可能会删除它并将值设为 0x 的十六进制
关闭然后再次打开时,十六进制数不同
我猜你说的是游戏,如果我错了,请不要继续阅读
因此,您从作弊引擎获得的地址可能是动态地址,这意味着每次您关闭或打开它时,该值都会改变,程序将被分配到内存中的另一个位置
那你该怎么办.....
你可以找到静态地址这个过程有点复杂我建议你看一个教程https://www.youtube.com/watch?v=hfWOAFsYnFA
程序内置的作弊引擎教程涵盖了多级指针。先做你的工作。如果您已经找到了指针,那么您就有了正在寻找的地址:一个静态地址,指向包含您要修改的值的地址。