CE运用之以休闲游戏植物大战僵尸为例-制作无限阳光修改器

上传人:桔**** 文档编号:499443935 上传时间:2023-04-29 格式:DOC 页数:13 大小:848.50KB
返回 下载 相关 举报
CE运用之以休闲游戏植物大战僵尸为例-制作无限阳光修改器_第1页
第1页 / 共13页
CE运用之以休闲游戏植物大战僵尸为例-制作无限阳光修改器_第2页
第2页 / 共13页
CE运用之以休闲游戏植物大战僵尸为例-制作无限阳光修改器_第3页
第3页 / 共13页
CE运用之以休闲游戏植物大战僵尸为例-制作无限阳光修改器_第4页
第4页 / 共13页
CE运用之以休闲游戏植物大战僵尸为例-制作无限阳光修改器_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《CE运用之以休闲游戏植物大战僵尸为例-制作无限阳光修改器》由会员分享,可在线阅读,更多相关《CE运用之以休闲游戏植物大战僵尸为例-制作无限阳光修改器(13页珍藏版)》请在金锄头文库上搜索。

1、以休闲游戏植物大战僵尸为例,制作无限阳光修改器.制作游戏修改器,应该有很多人对这类内容感兴趣吧.发现这个游戏纯属巧合,一日我在百度搜索植物这个词时,搜索框下方就列出一大堆植物大战僵尸的相关内容,于时就下载来玩了一下,挺有意思的,玩到最后就有了修改的念头,本人对于游戏的态度是:能改则改,现实生活中我是穷人,在游戏中至少也要变富人吧.费话不说了,准备开始,先看一下游戏截图,好让大家有一些总体认识,此修改器的目的是要实现修改阳光值如上图中的数值:1950,因此要找出游戏中存放阳光的内存地址,然后使用API函数WriteProcessMemory进行内存修改,但是每次运行游戏时这个内存地址都会不一样,

2、所以要找出基址,我使用的工具是Cheat Engine 5.4简体中文版以下简称CE,步骤如下:1、打开游戏并运行在窗口模式,再打开CE,点击左上角电脑图标-选中进程-确定,如下图:2、在数值框中输入当前阳光数50,点击首次扫描;切换到游戏中种一棵向日葵,使阳光数变成0;再切换回CE,在数值框中输入0,点击再次扫描;将会搜索到一个结果,如下图所示:3、双击此地址添加到下方的地址列表中,在列表中双击数值下面对应的内容可以修改此内存值;我们将值改成1000试试看,如下图:再看看游戏中的值,修改成功了,如下图:如上图所示,内存地址0CD29FB8就是存放阳光的地址,我们可以随意的修改此内存中的数值,

3、比金山游侠还要好用.但是此地址是动态的,下次运行游戏时它存放的肯定就不是阳光了,我们要继续查找不会变的静态地址,看下一步.4、在此地址上点右键-查找写入该地址的代码,会看到一个对话框下列代码更改选择的地址,里面是空白的;切换回游戏,随便种一棵植物将EDI的值填进去首次扫描,如下图所示:搜索出一堆地址,刚开始时我也是毫无头绪,搜索了几次都发现有这个值010D84E0,以为这个就是基址了,其实不是的,但这个值是怎么来的呢?我们继续下一步.6、将上一步搜索出的值添加到地址列表右键查找所有访问此地址的代码,稍等一下就出一大堆代码出来了,如下图:双击第一个mov 指令查看更多信息,如下图:原来ESI的值

4、是EDI+768得来的,EDI的值是010D7D78,我们继续搜索010D7D78,如下图:大功告成,查找到了绿色内存地址,绿色内存地址表明该地址在游戏中是静态的,它就是我们要找的基址了.7、下面我们试着把这些内存地址连接起来,内存地址006a9ec0值为010D7D78+偏移 768 = 010D84E0,地址010D84E0值为0CD24A58+偏移5560=0CD9FB8此地址就是我们第二步搜索出来的阳光地址.好了,我们用CE测试一下是否正确,如下图,手动填加地址进行测试:结果完全正确,最终地址指向的内存值为800,继续下一步.8、有了内存基址,现在我们就可以写程序了,相对于找基址,写代

5、码就简单得多.核心代码如下:主要代码 HWND hWnd = :FindWindow; /查找窗口句柄if return; HANDLE hProc; DWORD proID; GetWindowThreadProcessId; /取得进程ID hProc=OpenProcess; /打开进程if /m_sunny = hWnd; /UpdateData; /MessageBox;return; DWORD ads_ps=0x006a9ec0; /读取内存地址 DWORD value; ReadProcessMemoryhProc,ads_ps,&value,4,NULL; ads_ps =

6、value + 0x768; ReadProcessMemoryhProc,ads_ps,&value,4,NULL; ads_ps = value + 0x5560; UpdateData; value = m_sunny; /阳光值 WriteProcessMemoryhProc,ads_ps,&value,4,NULL; /写内存 CloseHandle; 的VC和汇编都是刚学的,以上读取指针的代码我自己看了都觉得怪怪的,呵呵.将就用着先吧.最终做出来的程序运行界面如下图所示:后记:刚开始我只做了修改与锁定,但后面觉得这样太麻烦,干脆就做了安放植物不减阳光,反而获得阳光的功能,个人感觉这

7、个功能更有意思,这个功能实现起来更简单,还记得第4步的sub 减法指令吗?只要将 sub 改成 add就行了,呵呵.当然写到我们的程序中是要用16进制的,这个16进制的获得也在CE中获得,如下图:仔细看了,sub esi,ebx 对应的16进制代码为 2b f3 ,我改成add esi,ebx 后代码为01 de,大家可以自己改改看了.不过在我们的程序要修改其它程序的代码是要有权限才行的,直接拿上面的代码来用是行不通的,我在上面代码基础上加了个函数vrtualProtectEx,代码如下:代码 DWORD ads_ps=0x0041ba74; /程序内存地址 WORD value; value

8、 = 0xde01; VirtualProtectExhProc,ads_ps,2,PAGE_READWRITE,&oldFlag; WriteProcessMemoryhProc,ads_ps,&value,2,NULL; VirtualProtectExhProc,ads_ps,2,oldFlag,&oldFlag; CloseHandle; 好了,一个简单的游戏修改器制作完成,我用同样的方法也做了红色警戒2的修改器点击查看,期间碰到一个问题,就是无法用SPY获取游戏的窗口句柄,因为红警是全屏运行了,后来我瞎猜了一个 Red Alert 2,竞然成功了,呵呵.还请哪位高手指点一二,如何获取全屏程序的句柄,或者进程ID. /

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号