御坂00001号 发表于 2020-2-28 22:29

[原创] CE基础-自动汇编:植物大战僵尸之子弹跟踪

本帖最后由 御坂00001号 于 2020-2-29 09:06 编辑

置顶声明:本文重理论基础(逻辑),轻分析过程(实战),实战过程应该使自己技术水平成长的“最佳良药”,所以下面只会出现自己的分析过程的部分

功能实现:子弹跟踪

思路说明:模拟香蒲攻击方式

推测逻辑
1. 发现僵尸
2. 定位僵尸
3. 跟踪攻击

分析逻辑
1. 根据香蒲 攻击间隔 找发射前定位
    详细:发现僵尸这步可能是定位僵尸的子过程,因为是攻击类植物共有的逻辑,因此需要寻找 cmp eax, 2B (这里eax指代ID,而2B是香蒲的ID)这类比较(进入时间间隔更改代码上下分析代码或者直接找比较跳转)跳转来判断是否执行特征处理代码段,此处为 定位僵尸 跳
2. 根据子弹 x坐标 找跟踪攻击
    详细:找到 初始化x坐标的代码 后,需要往外跳两次,第一次为初始化x坐标CALL,第二次为子弹准备发射CALL,前者为后者的子过程。然后往后找 cmp eax,2B 这类跳转,此处为 跟踪攻击 跳
3. 优化子弹跟踪
    详细:上面两类比较,不一定是最开始的比较(即最开始初始化),如果需要对应攻击类植物 子弹跟踪,就必须把这类最前面的一个跳,改跳到 香蒲处理代码
4. 相关脚本添加
    详细:即把向子弹跟踪的 cmp eax,xx 代码下的跳转都跳到香蒲处理代码,执行香蒲处理

分析过程
根据香蒲攻击间隔,找相关处理代码,如下图



查看反汇编代码,往下查看相关逻辑,如下图



进入定位僵尸CALL,继续往下找关键跳(cmp eax,2B),如下图



根据子弹x坐标,找初始化代码(阴影处3条),如下图



查看反汇编代码,下断找外层CALL,如下图



对此处CALL上下分析,发现前面CALL初始化Y坐标,而本CALL初始化X坐标,如下图



继续下断,来到子弹准备发射CALL,如下图



往下找香蒲处理代码,如下图



最终效果如图



最后总结
有些攻击类植物,比如大嘴花、土豆泥、樱桃炸弹、窝瓜、缠绕水草、火爆辣椒、地刺、地刺王,容易用来找 全屏攻击
另一些攻击类植物,比如豌豆射手、寒冰射手、双枪射手、胆小菇、三线射手、裂荚射手、卷心菜投手、玉米投手、西瓜投手、机枪射手、冰瓜投手,容易用来找 子弹跟踪
其他攻击类植物,可能需要更改某些特殊触发,才能实现特点功能,比如模仿大喷菇,可以实现穿透攻击(当然改某跳转也行)
下一次可能实现功能 子弹回旋

御坂00001号 发表于 2020-5-1 12:16

wdfdiablo 发表于 2020-4-30 20:19
怎么解决加速子弹而不死机呢?

如果想强制更改原逻辑,是没有意思的,它只会触发更多判断和bug。最好增加一段自己的逻辑

御坂00001号 发表于 2020-5-1 12:15

wdfdiablo 发表于 2020-4-30 20:19
怎么解决加速子弹而不死机呢?

更改程序逻辑。已知子弹发射有两个地方可改,其一是修改间隔减少速度,其二是使它不判断

m58758788 发表于 2020-2-29 13:12

太强了吧哈哈 能跟踪还能全屏攻击搞的跟冒险岛一样了

miakoll 发表于 2020-2-29 13:20

僵尸:"我太难了":'(weeqw   

泡影 发表于 2020-2-29 13:39

{:1_908:}真大神啊

Chenzi 发表于 2020-2-29 13:54

最近又在玩这个游戏,是个不错的思路

STGOrz 发表于 2020-2-29 21:04

六啊,楼主有没有CE的视频教程,有的话分享一下吧,感谢

18972630825 发表于 2020-2-29 21:50

围观学习来得

netspirit 发表于 2020-2-29 22:06

突然发现楼主你的id叫御坂00001号 00001号是什么特别实验的型号么 我看别人有些人的id都是xxxx号啊。。。。

zkb1986 发表于 2020-3-1 10:30

超级作弊 超级强啊

ningm 发表于 2020-3-1 13:57

太强了吧,整好了直接做个新的版本出来吧
页: [1] 2 3
查看完整版本: [原创] CE基础-自动汇编:植物大战僵尸之子弹跟踪