Roachsa 发表于 2019-2-13 19:49

植物大战僵尸之无限种植

本帖最后由 Roachsa 于 2019-2-24 20:38 编辑

植物大战僵尸分析练习,第三篇。

本次想要实现的功能是无限种植,即一块方格上可以无限种植植物。

## 准备

- 系统:Windows 10 x64 专业版
- 软件:植物大战僵尸中文版
- 工具:CheatEngine v6.8.2、吾爱破解专用版OllyDbg
- 目标:无限种植

## 分析

整理思路,想要实现目标,需要寻找的有:

1. 植物种下代码。
2. 该方块是否可以种植。

以阳光值为切入点,定位当前阳光值地址。



找出修改该处阳光值的指令。



我选择第一条mov指令进行分析。

记录该指令地址,使用OD附加游戏进程(此时需要退出CE)。

跳转到该地址,该指令所在函数功能很简单,就是修改阳光值。

```asm
0041BA60    56            push esi
0041BA61    8BB7 60550000   mov esi,dword ptr ds:
0041BA67    8BD7            mov edx,edi
0041BA69    E8 12FFFFFF   call Plants_v.0041B980
0041BA6E    03C6            add eax,esi
0041BA70    3BD8            cmp ebx,eax
0041BA72    7F 0C         jg short Plants_v.0041BA80
0041BA74    2BF3            sub esi,ebx                              ; 减去所需的阳光值
0041BA76    89B7 60550000   mov dword ptr ds:,esi      ; 减少当前阳光值指令
0041BA7C    B0 01         mov al,0x1
0041BA7E    5E            pop esi
0041BA7F    C3            retn
```

下断,运行到上一层函数,对周围进行简单分析,可以猜测这里是植物种下代码逻辑。

```asm
0041083C    8B85 8C000000   mov eax,dword ptr ss:
00410842    80B8 14080000 0>cmp byte ptr ds:,0x0
00410849    75 33         jnz short Plants_v.0041087E
0041084B    8BB5 38010000   mov esi,dword ptr ss:         ; 猜测-esi的值为植物栏对象的地址
00410851    837E 30 01      cmp dword ptr ds:,0x1
00410855    75 27         jnz short Plants_v.0041087E
00410857    8BC5            mov eax,ebp
00410859    E8 F2B50000   call Plants_v.0041BE50
0041085E    84C0            test al,al
00410860    75 1C         jnz short Plants_v.0041087E
00410862    8B56 2C         mov edx,dword ptr ds:
00410865    8B46 28         mov eax,dword ptr ds:          ; 取得植物位置指令
00410868    8BFD            mov edi,ebp
0041086A    E8 71D20000   call Plants_v.0041DAE0                   ; 0x0041DAE0-获取当前需要减少的阳光值
0041086F    8BD8            mov ebx,eax
00410871    E8 EAB10000   call Plants_v.0041BA60                   ; 0x0041BA60-减少当前阳光值
00410876    84C0            test al,al
00410878    0F84 D4060000   je Plants_v.00410F52
```

找到的第一个小目标,现在确定种植判断。

运行到函数返回,可以找到函数调用位置。

```asm
004121FE    8B4D 0C         mov ecx,dword ptr ss:
00412201    8B55 08         mov edx,dword ptr ss:
00412204    51            push ecx
00412205    52            push edx
00412206    57            push edi
00412207    8BCB            mov ecx,ebx
00412209    E8 22DBFFFF   call Plants_v.0040FD30                   ; 0x0040FD30-种植植物函数
0041220E    E8 0DC3FFFF   call Plants_v.0040E520
```

从种植函数入口进行分析,寻找关键跳转。

```asm
0040FE25    57            push edi
0040FE26    53            push ebx
0040FE27    55            push ebp
0040FE28    E8 F3E1FFFF   call Plants_v.0040E020                   ; 判断该方块是否可以种植植物
0040FE2D    85C0            test eax,eax
0040FE2F    0F84 1F090000   je Plants_v.00410754                     ; 跳转为可种植
```

这里就是游戏对方块是否可以种植进行判断的代码。



两个所需的位置已经确定,想要实现无限种植,只需要对跳转代码进行修改,或者进一步分析判断函数。

最后实现效果。

漫漫的幸福 发表于 2019-2-13 20:37

对于我这种小白,还是喜欢成品{:1_937:}

wlallon 发表于 2019-2-13 20:45

有没有成品啊,这个还是休闲可以玩下的

灬番蛮灬 发表于 2019-2-13 20:10

太好了
想不到还有这样的玩法,我喜欢

yikun 发表于 2019-2-13 20:12

谢谢分享

懿蓑烟雨 发表于 2019-2-13 20:17

成了植物狂虐僵尸了:lol

福气啦 发表于 2019-2-13 20:18

小白来学习了,感谢分享分析思路

wq0428 发表于 2019-2-13 20:23

感谢分享

易水寒丶 发表于 2019-2-13 20:28

支持 6666

hamham1985 发表于 2019-2-13 20:32

牛,学习了
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 植物大战僵尸之无限种植