CE实例教程之《植物大战僵尸》阳光的基址查找

首先大家想学的好就要耐心的看下去制作游戏修改器,应该有很多人对这类内容感兴趣吧。发现这个游戏纯属巧合,一日我在百度搜索“植物”这个词时,搜索框下方就列出一大堆“植物大战僵尸”的相关内容,于时就下载来玩了一下,挺有意思的,玩到最后就有了修改的念头,本人对于游戏的态度是:能改则改,现实生活中我是穷人,在游戏中至少也要变富人吧。费话不说了,准备开始,先看一下游戏截图,好让大家有一些总体认识,此修改器的目的是要实现修改阳光值(如上图中的数值:1950),因此要找出游戏中存放“阳光”的内存地址,然后使用API函数WriteProcessMemory进行内存修改,但是每次运行游戏时这个内存地址都会不一样,所以要找出基址,我使用的工具是CheatEngine5.4简体中文版(以下简称CE),步骤如下:1、打开游戏并运行在窗口模式,再打开CE,点击左上角电脑图标->选中进程->确定,如下图:2、在数值框中输入当前阳光数50,点击首次扫描;切换到游戏中种一棵向日葵,使阳光数变成0;再切换回CE,在数值框中输入0,点击再次扫描;将会搜索到一个结果,如下图所示:3、双击此地址添加到下方的地址列表中,在列表中双击“数值”下面对应的内容可以修改此内存值;我们将值改成1000试试看,如下图:再看看游戏中的值,修改成功了,如下图:如上图所示,内存地址“0CD29FB8”就是存放阳光的地址,我们可以随意的修改此内存中的数值,比金山游侠还要好用。但是此地址是动态的,下次运行游戏时它存放的肯定就不是阳光了,我们要继续查找不会变的静态地址,看下一步。4、在此地址上点右键->查找写入该地址的代码,会看到一个对话框“下列代码更改选择的地址”,里面是空白的;切换回游戏,随便种一棵植物(目的是让阳光变少,好找出哪些代码修改了此内存);再回到CE,会看到刚才的空白对话框中已经有内容了,双击或点“更多信息”出现下图内容:注意看红色汇编代码:mov是传送指令,把esi的值传送到EDI+5560,ESI的值是16进制的320,等于10进制的800,恰好就是阳光值,而EDI指向的地址0CD24A58偏移加5560刚好等于0CD9FB8,此地址保存着当前阳光值,很显然这就是改变内存的赋值代码了,红色代码上面那行,很显然就是减法运算。记住EDI的值“0CD24A58“,下一步5、将上面的搜索框前的16进制勾选上—>将EDI的值填进去—>首次扫描,如下图所示:搜索出一堆地址,刚开始时我也是毫无头绪,搜索了几次都发现有这个值“010D84E0”,以为这个就是基址了,其实不是的,但这个值是怎么来的呢?我们继续下一步。6、将上一步搜索出的值添加到地址列表—>右键—>查找所有访问此地址的代码,稍等一下就出一大堆代码出来了,如下图:双击第一个mov指令查看更多信息,如下图:原来ESI的值是EDI+768得来的,EDI的值是010D7D78,我们继续搜索010D7D78,如下图:大功告成,查找到了绿色内存地址,绿色内存地址表明该地址在游戏中是静态的,它就是我们要找的基址了。7、下面我们试着把这些内存地址连接起来,内存地址006a9ec0(值为010D7D78)+偏移768=010D84E0,地址010D84E0(值为0CD24A58)+偏移5560=0CD9FB8(此地址就是我们第二步搜索出来的阳光地址)。好了,我们用CE测试一下是否正确,如下图,手动填加地址进行测试:结果完全正确,最终地址指向的内存值为800,继续下一步。8、有了内存基址,现在我们就可以写程序了,相对于找基址,写代码就简单得多。核心代码如下:1.HWNDhWnd=::FindWindow(NULL,"植物大战僵尸中文版");//查找窗口句柄2.if(hWnd==0)return;3.HANDLEhProc;4.DWORDproID;5.GetWindowThreadProcessId(hWnd,proID);//取得进程ID6.hProc=OpenProcess(PROCESS_ALL_ACCESS,false,proID);//打开进程7.if(hProc==NULL)8.{9.//m_sunny=(int)hWnd;10.//UpdateData(false);11.//MessageBox("cannotopenprocess!");12.return;13.}14.15.DWORDads_ps=0x006a9ec0;//读取内存地址16.DWORDvalue;17.ReadProcessMemory(hProc,(void*)ads_ps,value,4,NULL);18.ads_ps=value+0x768;19.ReadProcessMemory(hProc,(void*)ads_ps,value,4,NULL);20.ads_ps=value+0x5560;21.UpdateData();22.value=m_sunny;//阳光...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?