4.1 针对“阳光值”
4.1.1 寻找阳光地址的三种方法
(1)精准扫描。
数值填入50,类型选择精确数值,数值类型一般都为四字节,选好后单击首次扫描,扫描结束后结果栏出现很多结果。
在游戏中想办法改变刚才扫描的数值,将改变后的数值填入数值栏单击再次扫描。
重复操作直到出现的结果很少,双击该结果将其加入地址栏中
在地址栏中修改数值,进入游戏后观察要修改的数值是否变动,若变动成功,则找到了对应的内存地址。
(2)未知初始值法
假设不知道阳光的数值,我们可以先扫描未知的初始值,然后再根据阳光的增加或减少来选择再次扫描。
(3)指针法
在(1)或(2)的基础上,
双击该指令弹出如下窗口,记录“要查找的该地址的指针数值可能是XXXXXXXX”,记录下该十六进制数据。(比如
(可以复制,建议不要关闭下图这样的详细信息的窗口以便最后输偏移时使用)
(这次操作中偏移为(2)步中的红色字00005560,需要记录下来)
退回ce主页面,单击“新的扫描”,勾选十六进制对勾,在数值处填入刚才记录的数值,其余默认即可。
观察查到的结果,我举的这个例子比较难有64个,将它们都双击添加到地址栏(如果只有一个,就容易了,不断重复记录下每一个地址和偏移直至地址栏中出现绿色地址即可跳转到最后一步)
点入每一个地址右键,查看“找出是什么访问了这个地址”,再次在游戏里改变数值,如果只有少量的命令或者有很多push命令则舍去这个地址,再找下一个,直至出现如下图的样式,看到频繁的访问一个地址,双击其中的任意一个地址,记录“要查找的该地址的指针数值可能是XXXXXXXX”中的XXXXXXXX,并记录偏移量,将XXXXXXXX放到数值栏里勾选16进制,再首次扫描。
这里搜16进制数值02879C90
会发现很多结果,找到一个绿色的就行,这就是基址,将它的地址双击记录下来。
退回ce主页面点击“手动添加地址”,勾选“指针”,在最下面的框中填入刚刚找到的基址的地址,上面的框根据刚刚保留详细信息窗口,填入偏移量,点击确定。
然后改个名,就完成了。
4.1.2 阳光基址分析
第一次 168C2C28+5560
第二次 02879C90+768
基址
+768
二级指针
+5560
三级指针
即阳光值
4.2 针对“植物”
4.2.1 寻找植物地址的三种方法
- 未知值扫描法
当种植植物后便会进入冷却,等到冷却时间结束后,便可以又种植该植物,所以一定存在一个计时器,在植物种植后开始计时,直到某个数值又可以种植,所以我们可以在冷却阶段扫描数值增加的的未知数,直到只剩一个地址即可。
使用一个植物使其进入冷却,扫描未知初始值,进入游戏一下,然后再扫描数值增加的地址,直到只有一个结果。
(2)0,1法
因为许多数据可以用0与1来表示yes和no,所以我们大可假设假设植物亮时为1,暗时为0。首次精确值扫描1,其余默认即可,再进入游戏将植物拿起后,在ce中再次精确值扫描0,重复多次。
可以发现一个结果,当我们拿起该植物时为0,放下是为0,将其双击加入地址栏。
锁定其数值为1,可以发现该植物以无冷却。
(3)指针法
在(2)或(1)的基础上,右击点击是什么访问了这个地址,双击指令,复制可能的地址的数值再十六进制精确值扫描,重复几次直至出现绿色基址,然后手动添加指针选择指针再填入过程中的偏移即可。
4.2.2 找植物的内存基址,分析该植物的全部属性,并画出其数据结构
上步骤中已经找到了内存的基址,现在我们分析一下
第一次 0+178C27240+70
第二次 19EF9E08+144
第三次 029C9D08+768
4.2.3 改变向日葵的吐阳光速率
(1)首先先找到有关的地址
因为阳光一段时间吐一个阳光,所以我们针对这个计时器来下手。首先在向日葵刚吐出阳光后进行首次扫描未知的初始值,然后再次不断扫描减少的数值,如果再次吐出阳光则扫描一次增加的数值,直到只剩一个结果。
(2)代码注入
右击该地址是什么改变了这个地址,显示反汇编程序,设置里点击自动汇编,在模板里选择代码注入与CT表框架注入
选择最后一个自动汇编
选择第一个和最后一个
在newmen后填入改变后的代码
add dword ptr [edi+58],-1000
mov esi,[edi+58]
newmen:
add dword ptr [edi+58],-1000
mov esi,[edi+58]
然后点击执行
在文件中选择分配到当前ct表,就可以看到刚刚编写的脚本出现在CT表
然后勾选脚本运行
可以看到成功了
4.3 针对“金币”
4.3.1 找金币地址
(1)首先我们尝试用精确值扫描当前的金币数量,结果发现扫描不到。所以这个数据加密处理过,我们可以使用位置初始值首次扫描,再通过游戏中的操作来改变金币的数值,来根据数值的增加与减少来判断再次扫描的方式。
会发现最后扫描到的结果是该地址数值*10得到的。
(2)然后使用上面多次使用的看每一个偏移量,最后手动添加地址来添加金币指针。
4.3.2 分析金币的地址
4.4 针对“僵尸”
4.4.1 分析僵尸的地址
(1)僵尸距离推车的数值
我们可以将僵尸与小推车的距离看作是一个数值,等僵尸出现后不断扫描减少的值,
等再出现一个僵尸后,会发现有一个结果的数值增加了很多就是这个地址
将其改为1,会发现僵尸直接全部出现
然后我们找每一级的偏移,手动添加地址输入偏移量。
(2)僵尸血量的数值
当植物攻击僵尸时僵尸血量减少一定的值,所以我们采用先扫描未知初始值,再扫描减少的值。
会发现一个值每一次被攻击后减少20,就是这个值。
初始是250每次减少20
270(000000FA)即为僵尸的初始血量
20(00000014)即为豌豆的攻击力
下面这条指令就是给僵尸初始血量
下面的指令是每次减少的血量
(血量基址我尝试了好久就是找不到)
4.5 针对“关卡”
4.5.1 找关卡的地址
我们先建一个新的用户开始游戏,第一关时搜精确值1,等到第二关时再搜2,第三关时再搜3,直到只剩一个结果将其加入地址栏,改变数值后退出关卡重新进入,如果关卡改变了,这个地址就是正确的。
我们再找每一级的偏移,手写加入地址写入偏移。
3.5.2 分析关卡的地址基址