Songhi 发表于 2024-3-21 13:46

小白CE关于游戏基址访问的两个问题

问题一:最近在学习游戏相关的内容,用 CE 指针扫描找到了一系列地址,如图1

是一个关于"PlantsVsZombies.exe"的地址,据我目前所学,"PlantsVsZombies.exe"+00331DA0 形式的指针其基址就是 00331DA0,然后我再写代码实现对其读写:


   HANDLE hprocess = ::OpenProcess(PROCESS_ALL_ACCESS,false,ProcessId);
   LPVOID pBase = (LPVOID)3349920;
    int target = 0;
    LPVOID pTarget = (LPVOID)⌖
    SIZE_T byred;
    ::ReadProcessMemory(hprocess,pBase,pTarget,4,&byred);
    pBase = (LPVOID)(target+800);
    cout << byred << endl;
    ::ReadProcessMemory(hprocess,pBase,pTarget,4,&byred);
    pBase = (LPVOID)(target+24);
    ::ReadProcessMemory(hprocess,pBase,pTarget,4,&byred);
    pBase = (LPVOID)(target+0);
    ::ReadProcessMemory(hprocess,pBase,pTarget,4,&byred);
    pBase = (LPVOID)(target+8);
    ::ReadProcessMemory(hprocess,pBase,pTarget,4,&byred);
    pBase = (LPVOID)(target+21880);

但是发现根本读取不了这个地址,在第一个ReadProcessMemory中 byred返回的值是0,这是游戏加了防护的原因吗?

问题二:

在这些指针中还存在基址形式是"THREADSTACK0"-00000184这样的,我大致理解是这是基于线程的访问。然后我就试图获取线程地址,就用到了ThreadStackFinder来定位THREADSTACK 0 的地址,也尝试用thread-stack-finder来定位,但是结果都是否定的,不是错的就是无法读取(就是byred返回的是0)

啊好难受啊,到底是什么情况

Songhi 发表于 2024-3-25 21:45

找到问题了,需要把这个地址双击到下面列表,就可以直接看到基址地址的十六进制值了

你若欢喜 发表于 2024-4-4 12:48

Songhi 发表于 2024-3-25 21:45
找到问题了,需要把这个地址双击到下面列表,就可以直接看到基址地址的十六进制值了

指针扫描出来的结果,双击到列表也不显示呀,我现在也是遇到这个问题,求解

donier 发表于 2024-6-17 18:45

应该是你找的基址不对。

cyn123 发表于 2024-6-18 13:43

本帖最后由 cyn123 于 2024-6-18 13:45 编辑

[[+768]+5560]
16进制前面加个0x直接就可以读取,你这改成十进制多此一举
页: [1]
查看完整版本: 小白CE关于游戏基址访问的两个问题