IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言+CE修改植物大战僵尸阳光 -> 正文阅读

[C++知识库]C语言+CE修改植物大战僵尸阳光

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() {
	//植物大战僵尸外挂
	//找出植物大战僵尸的窗口句柄,唯一标识
	//查找窗口,参数1:窗口类型			参数2:窗口名字
	hGameWnd = FindWindow(L"MainWindow", L"Plants vs. Zombies");
	//如果窗口句柄是空,就是说没有运行程序
	if (hGameWnd == NULL) {
		printf("你没有运行该游戏\n");
		exit(0);
	}

	//根据窗口获取PID(ProcessID),进程id,也就是我们在ce中选择进程那一步
	//参数1:窗口句柄,参数2:要存储的PID的地址
	GetWindowThreadProcessId(hGameWnd, &dwPID);

	if (dwPID == 0) {
		printf("获取PID失败\n");
		exit(0);
	}

	//根据PID获取进程句柄,有了进程PID,我们就可以操作植物大战僵尸了
	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;

	//读取进程的内存,这一步将静态地址中的数据读到baseAddressValue中
	if (ReadProcessMemory(hProcess, (void*)baseAddress, &baseAddressValue, sizeof(unsigned long), &dwSize) == FALSE) {
		printf("读取静态地址失败\n");
		return;
	}

	//一级偏移,这一步是我们刚刚通过CE得到的
	unsigned long sunShineOffsetFirst = 0x868;
	unsigned long sunshineOffsetFirstValue = 0;
	//读取进程的内存
	//这一步参数2是要操作的地址,参数三是要把该地址的数据读到sunshineOffsetFirstValue中
	//也就是这一步把第一次偏移地址的值读到sunshineOffsetFirstValue中
	if (ReadProcessMemory(hProcess, (void*)(baseAddressValue + sunShineOffsetFirst), &sunshineOffsetFirstValue, sizeof(unsigned long), &dwSize) == FALSE) {
		printf("一级偏移获取失败\n");
		return;
	}

	//二级偏移,也是我们根据CE获取的,
	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使用多线程有问题,所以这个功能以后再弄。






如有错误,欢迎指出

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 08:51:02  更:2021-08-28 08:53:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:02:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码