当前位置:   article > 正文

植物大战僵尸——纯C实现无限阳光_植物大战僵尸2 cheat engine c++

植物大战僵尸2 cheat engine c++

大致思路: 

1.获取游戏窗口,使用FindWindow函数

2.获取游戏PID(ProcessID),使用GetWindowThreadProcessId函数

3.获取游戏进程句柄,使用OpenProcess函数

4.读取游戏阳光基址    5.读取后修改阳光数值

大家查看源码后可能疑惑的问题:

 1.上图源码中的窗口信息是怎么找到的?解析如下↓↓

打开VS中的Spy++,将准星拖入植物大战僵尸窗口上,方可一键获取窗口信息,操作如下↓↓

2.源码中阳光的基址和偏移是怎么找到的? 

这涉及游戏逆向相关的基础:需看得懂汇编和熟练运用调试器,如CE(CheatEngine)

以后会增加更多有趣功能,麻烦点点关注

源码如下:

本人癖好源码内不喜欢出现中文(包括注释)如果有地方看不懂可以用翻译软件

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include <stdio.h>
  3. #include <Windows.h>
  4. int main()
  5. {
  6. //My thinking:
  7. //1.Get game window
  8. //2.Get game process id
  9. //3.Get process handle
  10. //4.Get sunshine address
  11. //5.Modify sunshine data
  12. HWND hGameWnd = FindWindow(L"MainWindow", L"Plants vs. Zombies");
  13. if (hGameWnd == NULL)
  14. {
  15. printf("Failed to get Window\n");
  16. return 0;
  17. }
  18. DWORD GamePid;
  19. GetWindowThreadProcessId(hGameWnd, &GamePid);
  20. printf("PID:%d\n", GamePid);
  21. if (GamePid == 0)
  22. {
  23. printf("Failed to get ProcessId\n");
  24. return 0;
  25. }
  26. HANDLE Hprocess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GamePid);
  27. if (Hprocess == NULL)
  28. {
  29. printf("Failed to open game process.Error code:%d\n",GetLastError());
  30. }
  31. DWORD SunshineBaseAddress = 0x00731C50;
  32. DWORD SunshineAddressValue = 0;
  33. DWORD Size = 0;
  34. if (FALSE == ReadProcessMemory(Hprocess, (void*)SunshineBaseAddress, &SunshineAddressValue, 4, &Size))
  35. {
  36. printf("Failed to Read BaseAddress.Error:%d", GetLastError());
  37. }
  38. DWORD SunshineFirstOffset = 0x868;
  39. DWORD SunshineFirstOffsetValue = 0;
  40. if (FALSE == ReadProcessMemory(Hprocess, (void*)(SunshineAddressValue + SunshineFirstOffset), &SunshineFirstOffsetValue, 4, &Size))
  41. {
  42. printf("Failed to Read FirstOffset.Error:%d", GetLastError());
  43. }
  44. DWORD SunshineSecondOffset = 0x5578;
  45. DWORD SunshineValue = 0;
  46. if (FALSE == ReadProcessMemory(Hprocess, (void*)(SunshineFirstOffsetValue + SunshineSecondOffset), &SunshineValue, 4, &Size))
  47. {
  48. printf("Failed to Read SunshineValue.Error:%d", GetLastError());
  49. }
  50. printf("Sunshine:%d", SunshineValue);
  51. while (1)
  52. {
  53. int ModifySunshineValue = 9999;
  54. WriteProcessMemory(Hprocess, (void*)(SunshineFirstOffsetValue + SunshineSecondOffset), &ModifySunshineValue, 4, &Size);
  55. }
  56. return 0;
  57. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/744216
推荐阅读
相关标签
  

闽ICP备14008679号