植物大战僵尸辅助之重叠植物

视频教程的地址:植物大战僵尸辅助视频教程付VC/易语言源代码

流程:

判断植物是否可以被种植,如果可以,则阳光值减少,如果不可以,则返回。

分析步骤:

1.       找到阳光减少的CALL

2.       分析程序开头的关键跳转

       种植成功后,阳光值会减少,所以我们必须找出阳光值减少的call(而不是阳光值增加的call)。

       首先通过CE找到存储“阳光值”的内存地址,然后通过CE找出是什么改写了这个地址。

在弹出的窗口中没有信息,此时阳光值未减少,所以改内存地址暂时未被访问。

返回到游戏中,种植下植物,让阳光值减少,随后我们发现CE中捕获到了1条指令:

mov [edi+00005560],esi,如图所示:

记录下该条指令的内存地址,如上图所示,

mov [edi+00005560],esi指令的内存地址为:0041BA76(重要)

以上工作我们都是在CE中完成的,主要是通过CE得到“阳光值”减少的指令所在的内存地址(0041BA76)

接下来,我们需要使用OD附加该游戏。

转到0041BA76处,如下图所示

转到了0041BA76后,需要在此下断点(F2)

然后返回到游戏中,种植植物,此时程序会在断点处断下来。

接下来,通过查看“调用堆栈”(快捷键ALT+K),我们可以得到代码执行过的Call的调用层级。

此时,堆栈窗口中的数据如下:

其中,

调用堆栈:     主线程

地址       堆栈       函数过程                              调用来自                      结构

0018FB74   00410876   PlantsVs.0041BA60                     PlantsVs.00410871

是最外一层调用的call

0018FC20   0041220E   PlantsVs.0040FD30                     PlantsVs.00412209

是第2层调用的call

通过分析,程序的开头第2层调用Call的PlantsVs.0040FD30处。

我们在PlantsVs.0040FD30处下断点,然后删除之前的断点(0041BA76处)。

接着返回到游戏中,种植植物,在PlantsVs.0040FD30断点处停下。

然后F8单步步过,单步执行一直到最外一层call为止。

在此期间,在每一处实现跳转的位置处,做下标记,如果所示:

直到执行到最外一层call停止单步执行:

到这里我先总结下以上的分析,

实现“重叠种植”的突破口:

游戏中,想在已经种植过的地方再次种植植物的时候,是无法种植的。很明显,游戏自身的代码有自己的判断

a.如果要种植的地方已经有植物了,则无法种植,阳光值不减少

b.如果要种植的地方还没有植物,则可以种植,并且阳光值会减少

简单的流程图就是:

种植植物    允许种植    阳关值减少

反过来,我们只需在阳光值减少的地方(0041BA76)下断点,然后查看调用堆栈,得到在执行到“阳光值减少”代码时,游戏程序还调用到了哪些函数(如:是否已经种植植物了)

通过查看调用堆栈,我们能够得到游戏过程中“种植植物”的程序入口。

因为,在种植植物的时候,需要判断,当前位置是否已经有植物了,在汇编指令中就是通过跳转指令来实现的。

显然,当前位置有无植物,游戏的执行过程肯定不一样。

我们只需在种有植物和没有植物的地方分别进行跟踪,在每一处实现跳转的指令出做标记。

然后前后进行对比,就能得到“有种植植物则跳过”的代码指令,这就是关键所在。找到了该指令,我们只需无条件跳转(jmp)即可。

如下图所示,即是关键代码:

修改指令后:

至此,程序修改成功!

最后,将修改的代码复制到字节集。

原创文章

转载请注明出处:http://blog.youkuaiyun.com/php_fly/article/details/8913656

提供国人写的强大的html5植物大战僵尸(源码) 写得很棒~占用资源少。 JSPVZ 程序制作进度(2011.1.5) 本程序提供源码由HTML5中文网整理打包下载,该下载包可以使用服务器环境运行,也可以在电脑上双击Index.htm直接运行 另外智能手机可以安装OperaMobile10.1及其以上版本,把代码整个拷贝到手机存储卡上,在浏览器中输入形如“E:/jspvz”形式的地址直接本地运行程序,无需联网 转载使用请勿修改LonelyStar署名,pvz.lonelystar.org网址和PopCap公司版权声明 保留对该JS版植物大战僵尸版权所有 2011.1.5 添加了第二大关的第三小关 修正一大波和最后一波字样无法消失的BUG 2010.12.31 添加了“解谜模式” 调整了程序中关卡对于胜利和失败的算法 几个植物僵尸做了调整 修改了几个BUG 2010.12.27 对初始界面稍作修改 2010.12.9 添加了“靠天吃饭”小游戏 给领带僵尸添加两种形象 修正辣椒爆炸图片的问题 咖啡豆0耗的数据修正 2010.12.8 提高了一下僵尸行走的纵坐标 修正了土豆雷和樱桃炸弹爆炸图片在IE下的问题 调整了一大波僵尸和最后一波僵尸出现的图片效果 2010.12.7 添加了第二大关的两小关 添加了“乱葬岗”小游戏 修改了几个BUG 调整了进度显示 2010.12.1 添加了“贫瘠之地”小游戏 调整游戏初始化界面和选择模式界面 修正第十关IE下运行报错的BUG 修正IE下单机运行有部分图片看不到的问题 修正蘑菇植物无睡眠动画而实际却在睡眠的BUG 修正曾哥蘑菇种植在醒着的大喷菇上仍然睡着的BUG 修正僵尸出场界面显示僵尸种类的BUG 修正地刺和地刺王伤害过高的BUG 加大“僵尸快跑!”的难度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值