植物大战僵尸辅助

2019-10-25 06:24:36来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

植物大战僵尸辅助

        孩子一直迷恋植物大战僵尸这款游戏,从一开始的水平不行,到后来经常看植物大战僵尸的过关视频来提升自己的游戏水平,到现在游戏是玩的越来越好了,至少感觉植物大战僵尸这个游戏水平比我强很多。

        后来为了能让孩子在游戏里学到些知识,拿出 CE 教孩子改阳光,他不但学会了改阳光,还自己修改了金币(关键是学会用百度了),玩的更 High 了。为了希望他能进一步的在游戏中能够学习到知识,我为他写了一个简单的修改阳光和种植植物后免冷却时间的辅助工具。

 

修改阳光

        阳光可以通过 CE 逐步的查找基址,首先通过 ReadProcessMemory 函数将 CE 获取到的阳光地址找到,然后通过 WriteProcessMemory 函数将修改的阳光值写入即可。

 1 #define SUN_VALUE_ADDRESS   0x007794f8  // 阳光基址
 2 
 3 // 通过窗口名查找句柄
 4 HWND hGameWnd = NULL;
 5 hGameWnd = FindWindow(NULL, _T("Plants vs. Zombies GOTY "))->GetSafeHwnd();
 6 
 7 // 根据窗口句柄获得进程ID
 8 DWORD dwPid = 0;
 9 DWORD dwTid = 0;
10 dwTid = GetWindowThreadProcessId(hGameWnd, &dwPid);
11 
12 // 打开进程
13 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
14 
15 DWORD dwSunValue = 0;
16 DWORD dwAddr = 0;
17 DWORD dwReadWriteByte = 0;
18 
19 // 计算阳光地址
20 // [[[0x007794f8]+0x868]+0x5578]
21 ReadProcessMemory(hProcess, (LPCVOID)SUN_VALUE_ADDRESS, &dwAddr, sizeof(DWORD), &dwReadWriteByte);
22 dwAddr = dwAddr + 0x868;
23 ReadProcessMemory(hProcess, (LPCVOID)dwAddr, &dwAddr, sizeof(DWORD), &dwReadWriteByte);
24 dwAddr = dwAddr + 0x5578;
25 
26 // 读取当前阳光
27 ReadProcessMemory(hProcess, (LPCVOID)dwAddr, &dwSunValue, sizeof(DWORD), &dwReadWriteByte);
28 
29 // 获取修改的阳光值
30 dwSunValue = GetDlgItemInt(IDC_EDIT1);
31 WriteProcessMemory(hProcess, (LPVOID)dwAddr, &dwSunValue, sizeof(DWORD), &dwReadWriteByte);
32 
33 // 关闭进程
34 CloseHandle(hProcess);

 

种植植物免冷却时间
        种植植物免冷却的功能,可以通过 CE 找到格子所在的内存,然后找到修改该格子状态的代码,最后将该段代码用 NOP 指令替换掉即可。

 1 #define CD_PATCH_ADDRESS    0x004b4ca1  // 种植植物免冷却
 2 
 3 // 通过窗口名查找句柄
 4 HWND hGameWnd = NULL;
 5 hGameWnd = FindWindow(NULL, _T("Plants vs. Zombies GOTY "))->GetSafeHwnd();
 6 
 7 // 根据窗口句柄获得进程ID
 8 DWORD dwPid = 0;
 9 DWORD dwTid = 0;
10 dwTid = GetWindowThreadProcessId(hGameWnd, &dwPid);
11 
12 // 打开进程
13 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
14 
15 DWORD dwOldByte = 0;
16 DWORD dwReadWriteByte = 0;
17 
18 // 读取免冷却代码
19 ReadProcessMemory(hProcess, (LPCVOID)CD_PATCH_ADDRESS, &dwOldByte, sizeof(DWORD), &dwReadWriteByte);
20 
21 // PATCH免冷却
22 DWORD dwPatchByte = 0x90909090;
23 WriteProcessMemory(hProcess, (LPVOID)CD_PATCH_ADDRESS, &dwPatchByte, sizeof(DWORD), &dwReadWriteByte);
24 
25 // 关闭进程
26 CloseHandle(hProcess);

 

想法是好的
        作为孩子的家长,我并没有限制孩子玩游戏,只是和孩子约定了玩游戏的时间,当然了如果他能从游戏中学到知识,那是最好的了。我满怀着兴奋给他演示了我摆弄出来的辅助工具,然而……他并没有如我所愿的去学习简单的编程知识,只是希望我能够在他爷爷的电脑上也装个辅助工具!

 


我的微信公众号:“码农UP2U”


原文链接:https://www.cnblogs.com/tosser/p/11701103.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:【洛谷】P1478 陶陶摘苹果(升级版)-全AC题解

下一篇:QT攻略——我在QT中遇到的那些坑