[辅助制作]寻找植物大战僵尸卡槽冷却基址

您所在的位置:网站首页 植物大战僵尸卡片扫不了 [辅助制作]寻找植物大战僵尸卡槽冷却基址

[辅助制作]寻找植物大战僵尸卡槽冷却基址

2024-06-25 03:42| 来源: 网络整理| 查看: 265

实验工具:

CE

DEV C++

 

首先我们得找到冷却的动态地址,再找基址

一、打开CE

 

找到植物大战僵尸的进程,并装载

然后我们搜索1(植物拿起是0,放下是1)

我们就先拿起,然后点再次搜索0。然后放下,然后再次搜索1。

我们搜到7条地址

然后再一个个排除

怎么排除呢

我们随便找一个地址,右键,查看是什么改写了这个地址。

然后出现这样一个窗口

这时候我们再回到界面,拿起植物,再放下植物。发现窗口并没有数据出现,我们就可以排除掉这个窗口了。

 

随后我们找到地址为0BEE8648的地址有写入数据

00488E73 - C6 45 48 00 - mov byte ptr [ebp+48],00 00488E7D - 88 45 49 - mov [ebp+49],al 0040CDEA - C6 44 08 70 01 - mov byte ptr [eax+ecx+70],01

 

我们分析放下的数据,也就是mov byte ptr [eax+ecx+70],01

双击打开详细信息

这里可以看到,关键代码处就是mov byte ptr [eax+ecx+70],01

后面那个[]中间装的就是我们的偏移值

其中地址指针是0BEE85D8

我们再到CE 中去搜索这个值(搜索的时候记住是HEX--十六进制)

我们点再次扫描,去掉会变动的值

找到一处地址为0F26B60C的数据

这回我们要点击是什么访问了这个地址(点改写你会发现没有数据)

然后再拿起放下植物,找到最后一行数据

找到下一个偏移量是144,地址是0F26B4C8

再按照上面的操作搜索

发现没有静态的地址

继续往下面找

找到后点开最后放下植物所留下的数据

mov esi,[esi+00000768]

可以看到偏移量是768

访问它的地址是002326F0

再去搜索这个地址看看

往下面拖一点就会看到有几个地址是绿色的,这个绿色的地址代表静态地址,也就是基址

我们找到基址后,记录下来,并点击手动添加地址

从上所知

基地址为:006A9EC0

一级偏移为:768

二级偏移为:144

三级偏移为:70

 

 

经过尝试,发现第一个卡槽的三级偏移是 70+ eax(此时eax的值为0)

卡槽二的三级偏移为 70+ 50

卡槽三的三级偏移为 70 + 50*2

也就是说卡槽是从零开始算起,依次加50的偏移量就可以了

下面我们测试下,先将地址添加后 激活,让该地址的值一直为1

成功修改后,我们用C做一个简单的写入

#include #include int main(){ HWND hWnd; //窗口句柄 DWORD pid; //进程句柄 HANDLE hProcess = 0; DWORD addr = 0x006A9EC0; //基地址 DWORD offset2 = 0x144; //二级偏移 DWORD offset3 = 0x768; //一级偏移 int s; printf("输入要冷却的卡槽:\n"); scanf("%d",&s); hWnd = FindWindow(NULL,"植物大战僵尸中文版"); if (hWnd != 0){ GetWindowThreadProcessId(hWnd, &pid); hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);//打开进程,取得句柄 if(hProcess == 0){ printf("打开游戏进程失败!\n"); }else{ printf("打开游戏进程成功!\n"); } }else{ printf("游戏未运行,或请使用管理员运行辅助.\n"); } if(hProcess == 0){ printf("请先打开游戏进程\n"); }else{ DWORD buf; DWORD value; DWORD offset1; int t = 1; value = (DWORD)s; ReadProcessMemory(hProcess, (LPVOID)addr, &buf, 4, 0); offset1=value*0x50 + 0x70; ReadProcessMemory(hProcess, (LPVOID)(buf + offset3), &buf, 4, 0); //计算三级偏移 printf("buf3=%x\n",buf); ReadProcessMemory(hProcess, (LPVOID)(buf + offset2), &buf, 4, 0);//计算二级偏移 printf("buf2=%x\n",buf+ offset1); DWORD res = WriteProcessMemory(hProcess, (LPVOID)(buf + offset1), &t, 4, 0); //计算一级偏移并写入 if (res == 0) { printf("修改失败"); }else{ printf("修改成功"); while(1){ WriteProcessMemory(hProcess, (LPVOID)(buf + offset1), &t, 4, 0); } } } return 0; }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3