赞
踩
windows10系统下实现植物大战僵尸后台运行。
修改的思路:游戏运行时植物冷却正常进行,游戏暂停时冷却暂停。
1. 找到卡槽冷却时间的数据地址
选择冷却时间比较长的土豆地雷,双子向日葵,和坚果进行游戏。
冷却计时器初始未知,CE中选择4字节未知数值(可能是毫秒表示)。不知道计数值是增加还是减少的话推荐都试一下。
游戏开始,搜索未知的4字节数据(许多游戏的计时器以毫秒为单位),游戏运行一段时间,查找增加的数据(也可以是减少的数据,都试一试)。
搜索到相当多的变量。让游戏进行一段时间,再次搜索增加的数据。结合数据的范围搜索(计时器数值>0,卡槽冷却时间可以求助度娘。计时单位不清楚的话,可以从毫秒尝试。搜不到的话再增大到10毫秒,20毫秒),合理使用暂停游戏,配合“未变动的数据”帮助缩小范围。
这里选择土豆地雷作为观察对象。由于一次冷却周期没有得到结果,种植之后进行了新一轮的冷却计时,按照冷却计时器增加的思路,此时的数据应该接近最小值,与上一次相比减小了。
有一个变量很符合计数器的特征,把它添加到变量列表里。把变量改成接近0的数,发现土豆雷卡片上的线条几乎就在顶部,继续游戏卡槽填装完成。这个变量就是冷却时间倒计时了呢。接下来就是寻找哪条指令写入了这个地址。
2. 寻找暂停冷却的变量。
在寻找写入冷却计时器的指令的时候,适当地暂停几次游戏。运行次数的变化规律符合暂停/继续操作的指令才是可能性更大的指令。这里只搜到唯一的指令,而且它的确在游戏暂停的时候不再执行。
打开反汇编窗口,跳转到这条指令对应的地址。设置断点,在右键弹出的选项中有一个“选择当前函数”的功能,如图所示,可以辅助分析这段代码的调用入口。
0048728C的指令为add,功能是给指定内存的数据加上一个立即数。这里内存地址的格式是edi+16进制立即数0x24,edi寄存器存放了一个地址。
如果有一定编程基础,应该了解结构体或者类的概念。它们常常用来描
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。