實驗目標:植物大戰僵屍中,植物是有攻擊速度的,比如每隔一段時間會吐出一些子彈,那么由此可判斷吐出子彈應該是由一個計數器控制的,也就是說只要我們能夠找到控制植物攻擊的時鍾並改寫它,也就可以實現植物的無限吐子彈。
吐出子彈的遍歷技巧:
CE附加游戲 -> 手動種下豌豆射手 -> 搜索未知初始化數據(未攻擊)
出現僵屍 -> 開始攻擊的時候 -> 使用變速精靈或變速齒輪將攻擊速度放慢 -> 搜索減少的數值
回到游戲 -> 馬上回到CE -> 搜索減少的數值 -> 依次重復進行5-10次左右
等待豌豆射手再次吐出子彈 -> CE直接搜索變大的數值 -> 最后剩下的地址中 數值在(0-1000)以內的就是
1.運行游戲並使用CE【直接附加】進程,為了方便調試請自行將陽光改為【99999】,等待僵屍出現后,馬上在本行種植一個【豌豆射手】在豌豆射手沒有攻擊前,迅速暫停游戲,回到CE搜索【未知初始化數據】。
2.此時回到游戲,然后等待【豌豆射手】吐出子彈以后,馬上暫停游戲(要快),然后回到CE直接搜索【減少的數值】,這里要立即暫停。
3.接着回到游戲,等待子彈向前推進一點的時候,馬上暫停游戲,然后搜索【減少的數值】,此步驟執行【3-5】次左右。
4.此時等待植物吐出第二個子彈,然后馬上暫停游戲,搜索增加的數值,此時搜索完成以后,你會在結果列表看到【14498DB0】這個動態地址(你電腦上的值不是這一個),我們直接將其加入到地址列表。
5.此時在【14498DB0】動態地址上面【右鍵】選擇,【查找是什么改寫了這個地址】,會看到【0045F8A9】是一個時鍾計數器,而下方的【0045F8CA】則在每次豌豆射手吐出子彈的時候遞增,我們把這兩個地址通通記下來。
6.其實上方的兩個地址相隔的不是太遠,使用哪一個都可以跳轉到核心代碼處,此處我們就直接查找定時器的地址吧,OD直接附加游戲進程,然后【Ctrl + G】跳轉到【0045F8A9】,直接在此處下斷點,回到游戲豌豆射手攻擊時,OD會直接斷下,這里經過不斷的測試,我已經將其總結並注釋在了后方。
我們可以通過修改【 mov ecx,dword ptr [esi + 5C]】來實現加速植物攻擊加速,這里可以將該指令直接改成【mov ecx,22】即可實現植物攻擊加速。
上方的ECX寄存器,經過手工多次測試,22是可修改的最小值,如果將其改為21或者0的話植物則不攻擊了。
同樣的修改上圖中的【jnz 0045F935】將其改為【NOP】的話,同樣可實現加速,再配合前面學過重疊種植和植物面冷卻,既可以實現如下的效果啦。