植物大战僵尸笔记

无限阳光

  1. 打开CE连接游戏程序,通过改变阳光找到阳光值的内存地址

  2. 把该地址添加到候选地址,右击找出是什么改写了这个地址,再回到游戏改变阳光

  3. 得到指令mov [edi+00005560],esi,指针基址可能是 edi=135F7788

  4. CE新的扫描,勾上Hex,数值填135F7788,新的扫描

  5. 扫描类型改未变动的数值,然后按再次扫描若干次

  6. 取左上角筛选出来的地址中的第一个为候选地址,本例为0487A6C8,右击找出是什么访问了这个地址

  7. 会发现很多+00000768的指令,点开第一条指令

  8. mov esi,[edi+00000768],指针基址可能是 edi=04879F60

  9. CE新的扫描,勾上Hex,查找04879F60,首次扫描

  10. 左上角筛选出来的地址中有四个是绿色的地址,下面列出来了:

  • PlantsVsZombies.exe+2A9EC0
  • PlantsVsZombies.exe+2A9F38
  • PlantsVsZombies.exe+2A9F78
  • PlantsVsZombies.exe+2AA00C
  1. 我这里取了第一个作为基地址,双击加入到下面的候选地址栏,得到他的地址006A9EC0

  2. 当然,你把00400000代入PlantsVsZombies.exe去计也是一样的

  3. 至此,基地址006A9EC0,一级偏移地址+768,二级偏移地址+5560,全部找出

  4. 创建MFC,拉一个按钮并双击,写实现代码

void CplantsprojectDlg::OnBnClickedButton1() {
   
	/*
		阳光基地址:0x6A9EC0
		阳光第1级偏移地址:[0x6A9EC0]0x768
		阳光第2级偏移地址:[[0x6A9EC0]+0x768]+0x5560
	*/
	UpdateData(TRUE);
	DWORD dwPid = FindGageProcessIdByWndTitle(_T("植物大战僵尸中文版"));
	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
	if (!hProcess) {
   
		MessageBox(_T("打开失败"), NULL, 0);
		return;
	}
	DWORD dwTemp = 0;	//基地址
	if (!ReadProcessMemory(hProcess, (LPVOID)0x6A9EC0, (LPVOID)&dwTemp, sizeof(DWORD), &dwPid)) {
   
		MessageBox(_T("读取失败"), NULL, 0);
		CloseHandle(hProcess);
		return;
	}
	dwTemp += 0x768;	//加偏移地址
	if (!ReadProcessMemory(hProcess, (LPVOID)dwTemp, (LPVOID)&dwTemp, sizeof(DWORD), &dwPid)) {
   
		MessageBox(_T("读取失败"), NULL, 0);
		CloseHandle(hProcess);
		return;
	}
	dwTemp += 0x5560;	//加偏移地址
	DWORD dwShine = 9999;	//是传入的值,表示修改后的阳光数
	DWORD dwLength = 0;		//是传出的值,表示修改了的字节数
	if (!::WriteProcessMemory(hProcess, (LPVOID)dwTemp, &dwShine, sizeof(DWORD),&dwLength)){
   
		MessageBox(_T("写入失败"), NULL, 0);
		CloseHandle(hProcess);
		return;
	}
	CloseHandle(hProcess);
}

在这里插入图片描述

无限金币

思路同无限阳光,CE连接游戏程序,通过金币改变找地金币的值的内存地址,加入到下面候选地址

右击,找出是什么改写了这个地址,然后回到游戏改变金币,得到更改金币指令,从而得到候选地址=某寄存器值+偏移地址28

新的扫描,16进制,刚刚得到的寄存器值,然后转未改变的数值再扫描若干次

取出左上角筛选地址的第一个到候选地址,右击,找出是什么访问了这个地址,会发现很多某寄存器值+偏移地址82C

新的扫描,16进制,刚刚得到的寄存器值,然后转未改变的数值再扫描若干次

取出左上角筛选地址的绿色地址(有四个任取其一即可),或者说是“本程序名”+0级偏移地址(程序基地址偏移)

至此,得到了金币基地址,一级偏移,二级偏移,在MFC程序中增加按钮,双击,写实现代码:

void CplantsprojectDlg::OnBnClickedButton2(){
   
	/*
		金币基地址:006A9EC0(或者说是:程序基地址00400000+0级偏移地址002A9EC0)
		金币1级偏移地址:[006A9EC0]+0x82C
		金币2级偏移地址:[[006A9EC0]+82C]+0x28
	*/
	UpdateData(TRUE);
	DWORD dwPid = FindGageProcessIdByWndTitle(_T("植物大战僵尸中文版"));
	HANDLE hProcess = OpenPro
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值