1. CE使用
思路,通过CE找到阳光的静态基址和偏移值,也就是基址+偏移值 = 阳光数目的地址
1、打开植物大战僵尸和CE
2、 打开植物大战僵尸进程
3、开始游戏
4、 在CE中输入阳光数,点击新的搜索
6、回到游戏,改变阳光的数目,然后再次搜索,最终看到只有一个数据
7、右击->找出是什么访问了这个地址
8、双击第二个查看详细信息,获取偏移值和地址,复制地址指针数值
9、回到搜索界面,以16进制,点击新的搜索搜索复制的地址
10、这里找到第一个不是00的地址,我在网上看到说00开头的是操作系统的一些操作,这里我也不太清除。找到后右键,找出是什么访问了这个地址。
11、 点击第一个查看详细信息,记住红色地方的偏移值,同样复制
12、 主页面搜索该地址,找到绿色的地址,就是静态地址了
双击,下方会出现绿色的静态地址的信息
13、验证上面步骤圈出的红色的是第几次偏移,然后使用c语言代码实现
14、打开VS2019, 点击工具->Spy++(+)->点击搜索,把红色的那部分用鼠标拖动到植物大战僵尸的窗口上,获取窗口名字和窗口类型,这一步没有VS的话到网上下载一个也行。
2. C语言代码
1、初始化
void init() {
hGameWnd = FindWindow(L"MainWindow", L"Plants vs. Zombies");
if (hGameWnd == NULL) {
printf("你没有运行该游戏\n");
exit(0);
}
GetWindowThreadProcessId(hGameWnd, &dwPID);
if (dwPID == 0) {
printf("获取PID失败\n");
exit(0);
}
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
if (hProcess == NULL) {
printf("获取进程句柄失败\n");
exit(0);
}
};
2、修改阳光
void modifySunshine() {
unsigned long baseAddress = 0x00755EAC;
unsigned long baseAddressValue = 0;
unsigned long dwSize = 0;
if (ReadProcessMemory(hProcess, (void*)baseAddress, &baseAddressValue, sizeof(unsigned long), &dwSize) == FALSE) {
printf("读取静态地址失败\n");
return;
}
unsigned long sunShineOffsetFirst = 0x868;
unsigned long sunshineOffsetFirstValue = 0;
if (ReadProcessMemory(hProcess, (void*)(baseAddressValue + sunShineOffsetFirst), &sunshineOffsetFirstValue, sizeof(unsigned long), &dwSize) == FALSE) {
printf("一级偏移获取失败\n");
return;
}
unsigned long sunshineOffsetSecond = 0x5578;
unsigned long sunshine = 0;
if (ReadProcessMemory(hProcess, (void*)(sunshineOffsetFirstValue + sunshineOffsetSecond), &sunshine, sizeof(unsigned long), &dwSize) == FALSE) {
printf("一级偏移获取失败\n");
return;
}
printf("当前阳光值=%d,", sunshine);
printf("请输入新的阳光值:");
scanf("%d", &sunshine);
if (WriteProcessMemory(hProcess, (void*)(sunshineOffsetFirstValue + sunshineOffsetSecond), &sunshine, sizeof(unsigned long), &dwSize) == FALSE) {
printf("修改失败\n");
return;
}
printf("已修改\n");
}
一级二级偏移怎么确定的:
上面就是代码了,在c语言编译器中创建一个类,直接复制粘贴,然后填上自己的地址就可以用了。而且最终操作的是静态地址,就算关闭植物大战僵尸再打开也可以用。、
3. 效果
最后,其实拿到了内存地址,我们还可以修改僵尸冷却时间、自动收集阳光…自动收集阳光需要多线程操作,并且搜索的过程有点复杂,而且我的VS2019使用多线程有问题,所以这个功能以后再弄。
如有错误,欢迎指出
|