12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 628|回复: 0

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

[复制链接]

51

主题

51

帖子

112

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
112
发表于 2020-3-23 10:10:23 | 显示全部楼层 |阅读模式
功能实现:子弹回旋

实现基础
  1. 子弹x坐标可以增加,也可以反向减少
  2. 子弹具有流程
    击中僵尸:子弹产生 -> 子弹飞行 -> 子弹击中僵尸 -> 僵尸掉血 -> 子弹爆炸 -> 子弹消失
    未击中僵尸:子弹产生 -> 子弹飞行 -> 检查边界 -> 子弹消失
  3. 子弹可以穿透

实现分析
  逻辑分析
     1. 首先根据子弹产生,消失标志由1变0;子弹击中,消失标志由0变1 -> 可以得到修改此处代码 0046EB2B - C6 46 50 01 - mov byte ptr [esi+50],01 为0赋值,以使子弹在击中后不消失
     2. 其次,找子弹飞行相关代码,这个可以根据子弹x坐标变化找到三处(飞行时、击中时、产生时),查看飞行时的相关代码,可以得到子弹x坐标减少和增加的代码段
[Asm] 纯文本查看 复制代码0046DBD7 - D9 43 30              - fld dword ptr [ebx+30] { 子弹x坐标减少 }0046DBDA - DC 25 A0966700        - fsub qword ptr [006796A0] { (3.33) }0046DBE0 - D9 5B 30              - fstp dword ptr [ebx+30]
[Asm] 纯文本查看 复制代码0046DBE8 - D9 43 30              - fld dword ptr [ebx+30] { 子弹x坐标增加 }0046DBEB - DC 05 A0966700        - fadd qword ptr [006796A0] { (3.33) }0046DBF1 - D9 5B 30              - fstp dword ptr [ebx+30]
     3. 最后,找子弹边界检查相关代码,我们可以在这里实行代码注入(其实也可以在上面代码处注入),边界代码如下,见代码分析
[Asm] 纯文本查看 复制代码0046CE9D - D9 45 30              - fld dword ptr [ebp+30] { 子弹x坐标 }0046CEA0 - DC 1D 38976700        - fcomp qword ptr [00679738] { 左边界 }0046CEA6 - DFE0                  - fnstsw ax0046CEA8 - F6 C4 41              - test ah,41 { 若 子弹x坐标 >= 左边界,则跳 }0046CEAB - 0F84 96010000         - je 0046D0470046CEB1 - DB 45 10              - fild dword ptr [ebp+10]0046CEB4 - D8 45 30              - fadd dword ptr [ebp+30] { 子弹x坐标 }0046CEB7 - DC 1D 98926700        - fcomp qword ptr [00679298] { 右边界 }0046CEBD - DFE0                  - fnstsw ax0046CEBF - F6 C4 05              - test ah,05 { 若 子弹x坐标 < 右边界,则跳 }0046CEC2 - 0F8B 7F010000         - jnp 0046D047
  代码分析
[Asm] 纯文本查看 复制代码[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048)label(returnhere)label(originalcode)label(exit)// 代码逻辑:先开辟一段可用空间,用来存放方向标志;然后根据(当前子弹x坐标地址 - 首颗子弹x坐标地址) / 0x94(0x94为子弹x坐标的间隔) 可以得到当前是第几颗子弹,从而取到方向标志;最后根据方向标志来决定子弹x坐标是增加还是减少,并对越过边界的子弹修改其方向标志newmem: //this is allocated memory, you have read,write,execute access//place your code herepush ecxpush ebxpush eaxpush edxxor edx,edxmov ecx,[6A9EC0]mov ecx,[ecx+768]mov ecx,[ecx+c8] // 子弹x坐标首地址lea eax,[ebx+30] // 子弹x坐标现地址sub eax,ecxmov ecx,94 // 子弹x坐标间隔(第1颗子弹与第2颗子弹)div ecx // eax:第几个, 从0开始xor edx,edx // 清零add eax,00699000 // 00699000+index, 用来存放子弹的方向标志mov ecx,eaxmov dl,[ecx] // 只存在低字节cmp edx,0pop edxpop eaxpop ebx // 暂时不弹ecx, 因为ecx还有用je addxsubx: // 子弹x坐标减少fld dword ptr [ebp+30]fsub qword ptr [006796A0]fsub qword ptr [006796A0]fstp dword ptr [ebp+30]coml: // 左边界检查push eaxfild dword ptr [ebp+10]fadd dword ptr [ebp+30]fcomp qword ptr [00679298]fnstsw axtest ah,05 // 若子弹x坐标 < 0, 则跳jnp leftbpop eaxpop ecxjmp 0046CEC8leftb: // 越过左边界, 则置相反标志mov byte ptr [ecx],00pop eaxpop ecxjmp 0046CEC8addx: // 子弹x坐标增加fld dword ptr [ebp+30]fadd qword ptr [006796A0]fadd qword ptr [006796A0]fstp dword ptr [ebp+30]comr: // 右边界检查push eaxfldpifld dword ptr [ebp+30]fadd st(0),st(1)fcomp qword ptr [00679738]fnstsw axtest ah,41 // 若子弹x坐标 >= 800, 则跳je rightbpop eaxpop ecxjmp 0046CEC8rightb: // 超出右边界, 则置相反标志mov byte ptr [ecx],01pop eaxpop ecxjmp 0046CEC8originalcode://fld dword ptr [ebp+30]//fcomp qword ptr [00679738]jmp newmemexit:jmp returnhere&quot;PlantsVsZombies.exe&quot;+6CE9D:jmp newmemnop 4returnhere:  [DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem)&quot;PlantsVsZombies.exe&quot;+6CE9D:fld dword ptr [ebp+30]fcomp qword ptr [00679738]fnstsw axtest ah,41je 0046D047fild dword ptr [ebp+10]fadd dword ptr [ebp+30]fcomp qword ptr [00679298]fnstsw axtest ah,05jnp 0046D047//Alt: db D9 45 30 DC 1D 38 97 67 00

实际效果
  

最后总结
  虽然代码上逻辑没啥大问题,但会产生几个bug:①下一关再开,可能植物/僵尸不会重绘 ②僵尸可以走第6行 ③某些僵尸过度重绘
  到此为止,植物大战僵尸能改的都改了,可能超过子弹跟踪和子弹回旋的难度很难再有,前者为修改关键跳,后者为修改程序逻辑
  此贴可能会继续更新,只是把一些bug解决。。。。。。
end

来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-4-19 21:45 , Processed in 0.140625 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表