1.首先我們找出陽光的動態地址,找到之后我們雙擊這個地址,將其加入到地址列表中,陽光的查找技巧相信你已經能夠掌握了,這里就不再羅嗦了。
2.接着我們選擇最下方的地址列表,然后按下【F6鍵】,也就是下一個硬件寫入斷點,然后回到游戲等待陽光出現並點擊陽光,此時CE會出現以下代碼,我們只需要記下【00430A11】這個內存地址,然后直接關閉CE吧,短期內用不到了。
3.打開OD,然后我們直接附加植物大戰僵屍的游戲進程,點擊【文件】然后點擊【附加】選擇植物大戰僵屍進程就好。
4.附加完成后,我們的游戲會被OD暫停運行,此時我們直接按下【F12】讓游戲正常的運行,默認情況下會停在系統領空,我們直接按下【Ctrl + G】輸入【00401000】來到程序領空。
5.接着我們按下【Ctrl + G】輸入【00430A11】跳轉到剛才找到的代碼位置,過去以后直接【F2】下一個斷點
6.緊接着我們回到游戲,然后等待陽光的出現,當陽光出現后我們點擊陽光,OD會自動斷在00430A11的位置,其中ecx就是要增加的陽光數。
上圖並沒有CALL調用,應該是在外部,我們直接回朔到上一層【Ctrl+F9】執行到返回,【F8】直接出CALL.
7.我們在JNZ和CALL的兩處位置下斷點,然后運行程序,當我們點擊陽光時會斷在JNZ的位置,如果把JNZ用NOP填充的話,會發現當我們再次點擊陽光的時候陽光會迅速的被回收沒有了動畫。
也就是說,JNZ如果成立的話則會有回收陽光的動畫,當不成立的時候則會執行【call 004309d0】顯然這就是回收陽光的關鍵CALL,但我們可猜測,再回收陽光的時候一定會判斷是否回收,所以回收的判斷應該在上一層。
8.首先我們回到游戲,等待出現陽光然后點擊陽光,OD會斷下,斷下后我們取消這兩處的斷點,然后跟着OD單步【F8】向下走,直接出這個CALL,出CALL后會看到如下代碼,我們直接下三個斷點。
9.下好斷點,回到游戲等待陽光下落我們回收,此時OD會斷下,我們運行OD發現會一直被斷在【0043158F】只要陽光沒有收回就會一直斷下,此處的跳轉並沒有實現,因為我們沒有去點擊陽光,這里可以得出如果點擊了陽光JNZ則會跳轉成立,否則不成立等待用戶點擊回收陽光。
10.我們取消所有的斷點,然后嘗試把JNZ跳轉改成JMP無條件跳轉,讓其只要一出現陽光就自動的觸發回收的CALL試試。
改完以后我們回到游戲,會發現只要陽光出現了會被立即回收,再配合第三課學習的內容,簡直就是吸光狂魔啊。