植物大战僵尸分析练习,第三篇。
本次想要实现的功能是无限种植,即一块方格上可以无限种植植物。
准备
- 系统:Windows 10 x64 专业版
- 软件:植物大战僵尸中文版
- 工具:CheatEngine v6.8.2、吾爱破解专用版OllyDbg
- 目标:无限种植
分析
整理思路,想要实现目标,需要寻找的有:
- 植物种下代码。
- 该方块是否可以种植。
以阳光值为切入点,定位当前阳光值地址。
找出修改该处阳光值的指令。
我选择第一条mov指令进行分析。
记录该指令地址,使用OD附加游戏进程(此时需要退出CE)。
跳转到该地址,该指令所在函数功能很简单,就是修改阳光值。
0041BA60 56 push esi
0041BA61 8BB7 60550000 mov esi,dword ptr ds:[edi+0x5560]
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:[edi+0x5560],esi ; 减少当前阳光值指令
0041BA7C B0 01 mov al,0x1
0041BA7E 5E pop esi
0041BA7F C3 retn
下断,运行到上一层函数,对周围进行简单分析,可以猜测这里是植物种下代码逻辑。
0041083C 8B85 8C000000 mov eax,dword ptr ss:[ebp+0x8C]
00410842 80B8 14080000 0>cmp byte ptr ds:[eax+0x814],0x0
00410849 75 33 jnz short Plants_v.0041087E
0041084B 8BB5 38010000 mov esi,dword ptr ss:[ebp+0x138] ; 猜测-esi的值为植物栏对象的地址
00410851 837E 30 01 cmp dword ptr ds:[esi+0x30],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:[esi+0x2C]
00410865 8B46 28 mov eax,dword ptr ds:[esi+0x28] ; 取得植物位置指令
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
找到的第一个小目标,现在确定种植判断。
运行到函数返回,可以找到函数调用位置。
004121FE 8B4D 0C mov ecx,dword ptr ss:[ebp+0xC]
00412201 8B55 08 mov edx,dword ptr ss:[ebp+0x8]
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
从种植函数入口进行分析,寻找关键跳转。
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 ; 跳转为可种植
这里就是游戏对方块是否可以种植进行判断的代码。
两个所需的位置已经确定,想要实现无限种植,只需要对跳转代码进行修改,或者进一步分析判断函数。
最后实现效果。