本文最后更新于 2022年02月10日 已经是 475天前了 ,文章可能具有时效性,若有错误或已失效,请在下方留言。
为了深入了解软件工作的原理,就尝试了一下修改植物大战僵尸
阳光修改
我们把50放入搜索
在游戏中改变阳光值后继续搜索,一直重复 “改变阳光值,Next Scan 搜索”
尝试修改
实现功能,现在我们寻找基地址,否则我们每次重启游戏就需要重新搜索。
选中按 F5
5560为第一个偏移量,15698668为下一步查询地址
重新搜索该值
重复上面的 “选中 F5”,找到下一个地址
EAX=00452650
EBX=0019FD00
ECX=0274A6B0
EDX=00667BA0
ESI=15698668
EDI=0274A6B0
EBP=00000001
ESP=0019FC60
EIP=00452679
Probable base pointer =0274A6B0
0045266A - cmp byte ptr [edi+000004CF],00
00452671 - je 0045269B
00452673 - mov esi,[edi+00000768]
00452679 - test esi,esi
0045267B - je 0045269B
重新搜索
绿色的便是基地址
popcapgame1.exe+2A9EC0
我们就可以反向推得阳光的基地址
[[[[popcapgame1.exe+2A9EC0]+768]+5560]]
你现在可以重启游戏验证,重启后依然可以修改
CD冷却修改
上面的植物槽,1为可用,0为不可用,此时1号位是可用状态
按上面的步骤一直循环搜索,改变状态搜索。
EAX=00000000
EBX=0000007D
ECX=0D9696B8
EDX=0000007D
ESI=0000002F
EDI=156984E0
EBP=156984E0
ESP=0019FB70
EIP=0040CDEF
Probable base pointer =0D9696B8
0040CDE4 - lea eax,[eax+eax*4]
0040CDE7 - shl eax,04
0040CDEA - mov byte ptr [eax+ecx+70],01
0040CDEF - call 00412330
0040CDF4 - pop edi
同样选中 F5
EAX=0D9696B8
EBX=00000000
ECX=0019F988
EDX=0274A6B0
ESI=00199944
EDI=0019FA98
EBP=156984E0
ESP=00199810
EIP=0041A1F6
Probable base pointer =156984E0
0041A1E7 - cmp dword ptr [edx+000007FC],04
0041A1EE - je 0041A248
0041A1F0 - mov eax,[ebp+00000144]
0041A1F6 - cmp [eax+18],bl
0041A1F9 - je 0041A232
继续搜索 数据不变,找最前面的 F5
EAX=00000001
EBX=00000001
ECX=0274A6B0
EDX=00030621
ESI=156984E0
EDI=0274A6B0
EBP=00000001
ESP=0019FC60
EIP=004526E6
Probable base pointer =0274A6B0
004526DB - mov ebx,eax
004526DD - lea ecx,[ecx+00]
004526E0 - mov esi,[edi+00000768]
004526E6 - add [edi+00000838],ebp
004526EC - test esi,esi
找到基址
popcapgame1.exe+2A9EC0
[[[[popcapgame1.exe+2A9EC0]+768]+144]+70]
通过实验我发现冷却槽相差50,所以只要在70那+50就可以
后面打算用Hook来注入修改