从作弊引擎到C++的指针

Pointer From Cheat Engine To C++

本文关键字:C++ 指针 引擎      更新时间:2023-10-16

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

作弊引擎地址为 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部分的弹出对话框中所示。 然后,向下跟踪,直到用完所有偏移值。

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

对于此示例,我将使用我制作的简单攻击立方体作弊

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

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 步:要始终找到正确的地址,请执行以下操作:读取进程内存(基址+偏移量(

我无法弄清楚 P-> 是什么意思,也许删除它并使十六进制的值为 0x

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

我猜你在谈论游戏如果我错了,那就不要继续阅读

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

那你应该怎么做.....

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

程序中内置的作弊引擎教程涵盖了多级指针。先做你的工作。如果已找到指针,则表示具有要查找的地址:指向包含要修改的值的地址的静态地址。