【植物大战僵尸-2】实现一炮秒杀僵尸

思路

​ 猜测僵尸的血量在0-1000之间,通过CE搜索0-1000的值,并且每次打中僵尸之后搜索减少的值。通过这个可以顺带理解DNF或者其他刷怪游戏,秒杀怪物。

1、最终找到普通僵尸的值为200,每次打中之后减少20。

image-20220306155637766

2、同样,右击找哪里访问了这个地址。

image-20220306155751226

005312FE - 8B BD C8000000  - mov edi,[ebp+000000C8]
0052D71B - 8B B0 C8000000  - mov esi,[eax+000000C8]
00531319 - 89 BD C8000000  - mov [ebp+000000C8],edi
0052A527 - 39 8B C8000000  - cmp [ebx+000000C8],ecx
00531783 - 83 BD C8000000 00 - cmp dword ptr [ebp+000000C8],00

3、通过OD进行调试查看,寻找减少僵尸血量数值的代码。

4、搜索第一个005312FE,看了半天没发现可以下手的地方

image-20220306160254188

5、搜索第二个0052D71B也同样没发现

image-20220306160344674

6、搜索第三个00531319,发现里面有一个减法运算,想必这里就是减少血量的地方。

image-20220306160421916

7、由此看来edi则是当前血量的值,可以通过修改edi的值,修改当前血量。

8、修改上面0053130F,减法100,增加炮弹威力。但是修改后,下面的汇编代码会被nop。这种方式程序会崩溃。

image-20220306180035298

9.解决方案,Ctrl+B里面搜索很多0,则跳转到006510CD这个位置。在这里吧nop的代码补全

image-20220306180349946

10.将减少血量的代码复制到下面任意地方。

之前代码

0053130F      2B7C24 20     sub edi,dword ptr ss:[esp+0x20]          血量减少运算
00531313      894424 1C     mov dword ptr ss:[esp+0x1C],eax
00531317      8BC5          mov eax,ebp
00531319      89BD C8000000 mov dword ptr ss:[ebp+0xC8],edi          ;  PlantsVs.<ModuleEntryPoint>
0053131F      E8 ECC3FFFF   call PlantsVs.0052D710
00531324  |.  8BD8          mov ebx,eax
00531326  |.  8B45 24       mov eax,[arg.8]

006510E1      00            db 00
006510E2      00            db 00
006510E3      00            db 00
006510E4      00            db 00
006510E5      00            db 00
006510E6      00            db 00
006510E7      00            db 00


修改之后的代码,其中 sub edi,64为每次减少血量100。这样两炮就可以打死一个僵尸,这里的威力可以任意调节。

64位16进制转换10进制为100。

image-20220306181613379

image-20220306181514073

猜你喜欢

转载自blog.csdn.net/qq_30285985/article/details/123314985
今日推荐