从作弊引擎到C++的指针
Pointer From Cheat Engine To C++
我正在寻找一种将指针地址从作弊引擎传递到一行代码的方法。
作弊引擎地址为 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
程序中内置的作弊引擎教程涵盖了多级指针。先做你的工作。如果已找到指针,则表示具有要查找的地址:指向包含要修改的值的地址的静态地址。
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错