植物大战僵尸分析练习,第三篇。
本次想要实现的功能是无限种植,即一块方格上可以无限种植植物。
准备
- 系统:Windows 10 x64 专业版
- 软件:植物大战僵尸中文版
- 工具:CheatEngine v6.8.2、吾爱破解专用版OllyDbg
- 目标:无限种植
分析
整理思路,想要实现目标,需要寻找的有:
以阳光值为切入点,定位当前阳光值地址。
找出修改该处阳光值的指令。
我选择第一条mov指令进行分析。
记录该指令地址,使用OD附加游戏进程(此时需要退出CE)。
跳转到该地址,该指令所在函数功能很简单,就是修改阳光值。
0041BA60 56 push esi0041BA61 8BB7 60550000 mov esi,dword ptr ds:[edi+0x5560]0041BA67 8BD7 mov edx,edi0041BA69 E8 12FFFFFF call Plants_v.0041B9800041BA6E 03C6 add eax,esi0041BA70 3BD8 cmp ebx,eax0041BA72 7F 0C jg short Plants_v.0041BA800041BA74 2BF3 sub esi,ebx ; 减去所需的阳光值0041BA76 89B7 60550000 mov dword ptr ds:[edi+0x5560],esi ; 减少当前阳光值指令0041BA7C B0 01 mov al,0x10041BA7E 5E pop esi0041BA7F C3 retn下断,运行到上一层函数,对周围进行简单分析,可以猜测这里是植物种下代码逻辑。
0041083C 8B85 8C000000 mov eax,dword ptr ss:[ebp+0x8C]00410842 80B8 14080000 0>cmp byte ptr ds:[eax+0x814],0x000410849 75 33 jnz short Plants_v.0041087E0041084B 8BB5 38010000 mov esi,dword ptr ss:[ebp+0x138] ; 猜测-esi的值为植物栏对象的地址00410851 837E 30 01 cmp dword ptr ds:[esi+0x30],0x100410855 75 27 jnz short Plants_v.0041087E00410857 8BC5 mov eax,ebp00410859 E8 F2B50000 call Plants_v.0041BE500041085E 84C0 test al,al00410860 75 1C jnz short Plants_v.0041087E00410862 8B56 2C mov edx,dword ptr ds:[esi+0x2C]00410865 8B46 28 mov eax,dword ptr ds:[esi+0x28] ; 取得植物位置指令00410868 8BFD mov edi,ebp0041086A E8 71D20000 call Plants_v.0041DAE0 ; 0x0041DAE0-获取当前需要减少的阳光值0041086F 8BD8 mov ebx,eax00410871 E8 EAB10000 call Plants_v.0041BA60 ; 0x0041BA60-减少当前阳光值00410876 84C0 test al,al00410878 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 ecx00412205 52 push edx00412206 57 push edi00412207 8BCB mov ecx,ebx00412209 E8 22DBFFFF call Plants_v.0040FD30 ; 0x0040FD30-种植植物函数0041220E E8 0DC3FFFF call Plants_v.0040E520从种植函数入口进行分析,寻找关键跳转。
0040FE25 57 push edi0040FE26 53 push ebx0040FE27 55 push ebp0040FE28 E8 F3E1FFFF call Plants_v.0040E020 ; 判断该方块是否可以种植植物0040FE2D 85C0 test eax,eax0040FE2F 0F84 1F090000 je Plants_v.00410754 ; 跳转为可种植这里就是游戏对方块是否可以种植进行判断的代码。
两个所需的位置已经确定,想要实现无限种植,只需要对跳转代码进行修改,或者进一步分析判断函数。
最后实现效果。
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |