谁的坏叔叔 发表于 2022-8-9 09:58

植物大战僵尸之子弹魅惑

我们的思维是-找到植物数-找当僵尸血量-判断植物数<5-写入魅惑代码。
我们先找出植物的数量的基址 我这儿找出的是 这个右键访问 然后CE一层一层的往上扫描就可以了。这个就不多做演练了。
我们搜索僵尸的血量



搜索出来以后我们右键访问是谁访问了该地址

00412E99 - 03 86 C8000000- add eax,
005312FE - 8B BD C8000000- mov edi,
0052D71B - 8B B0 C8000000- mov esi,
00531319 - 89 BD C8000000- mov ,edi
0052A4E6 - 8B B3 C8000000- mov esi,
0052A527 - 39 8B C8000000- cmp ,ecx
00531783 - 83 BD C8000000 00 - cmp dword ptr ,00

第一条我们不考虑,因为一直在进行内存操作,我们选下面一条
005312FE - 8B BD C8000000- mov edi,
反汇编查看
je PlantsVsZombies.exe+1312FE
push 00
mov eax,ebp
call PlantsVsZombies.exe+130950
mov edi,
mov eax,ebp
mov ,edi
call PlantsVsZombies.exe+12D710



这儿是把当前僵尸的血量传递给edi

老方法,申请一个内存


现在我们就要写汇编了,首先跳到我们申请的内存


汇编大概如下:

mov edi, dword //还原HOOK的代码
//以下是取植物的数量
mov ebx, dword 把基址传递给 ebx
mov ebx, dword //在把基址+768传递给ebx
mov ebx, dword //最后把 基址+768+bc传递给ebx 至此整取就完成了
cmp ebx, 0x06 判断 ebx
jc label1    小于 则跳到label1
jnbe label2大于则 跳到label2   
//上面的理解是当植物小于6的时候执行我们的写入的汇编代码,否则就跳回原代码去执行
label1:
mov byte , 0x01   // ebp+b8 是僵尸是否被魅惑,可以看作是一个逻辑判断 0=假1=真
label2:
mov ecx, 0x00531304
jmp ecx

现在写入到我们申请的内存里面

进游戏看效果
植物小于6 那么触发我们的代码 目前子弹没击中僵尸的状态

只要是僵尸受到伤害以后

为了不是很变态,我们才增加植物数量的判断,大于6 我们就恢复原代码去执行了。目前这个是普通僵尸的地址,需要别的大家可以去练练手 方式方法一样
往期帖子;
植物大战僵尸之种植植物调用僵尸CALL
植物大战僵尸之植物被咬反增阳光
植物大战僵尸之这豌豆有毒啃着啃着就炸了
植物大战僵尸阳光开局9990

谁的坏叔叔 发表于 2022-8-9 19:47

游戏我打包咋蓝奏:https://wwd.lanzouv.com/iXyXP099yzyh
密码:eu1m

Sealsclerk 发表于 2022-8-10 12:15

原理是搜索数值修改吗,感觉打包成exe好一些吧,求一个exe

a05223433 发表于 2022-8-9 11:05

学习一下,谢谢分享

orb001 发表于 2022-8-9 10:06

谢谢大佬的技术分享

RippleSky 发表于 2022-8-9 10:20

大家都喜欢折磨PVZ:lol

Halfpiece 发表于 2022-8-9 10:23

不明觉厉

谁的坏叔叔 发表于 2022-8-9 10:25

RippleSky 发表于 2022-8-9 10:20
大家都喜欢折磨PVZ

网游不敢分享

caihong325 发表于 2022-8-9 10:34

看的我冷汗直冒,要那么复杂吗

flyingpig1234 发表于 2022-8-9 10:36

卧槽,手搓汇编

fuzhiawp520 发表于 2022-8-9 10:48

耶斯,感谢分享

wjt1806540079 发表于 2022-8-9 10:58

资瓷写的很详细
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 植物大战僵尸之子弹魅惑