1. 程式人生 > >遊戲輔助製作核心----植物大戰殭屍逆向之加速出殭屍(十)

遊戲輔助製作核心----植物大戰殭屍逆向之加速出殭屍(十)

一.效果

二.思路

我們在上一篇中實現了召喚殭屍,但是在測試的時候需要等一段時間,並不是一直呼叫的,那麼我們猜想他肯定是有定時器,會一直在判斷,只有這個定時器置0或者最大值的時候才會進入。所以找到這個定時器就可以實現加速出殭屍。

三.實現

來到上一篇召喚殭屍的call的地址

我們上下看下 發現有很多跳轉 因為不知道哪個是 那最暴力 也是最簡單的辦法是頭部下斷

然後回到遊戲 發現並沒有實時斷下,因為如果有計時器在的話 他一定會實時斷下,因為他需要一直訪問和修改。所以可能這個不是我們要的計時器的地方 那麼等斷下就直接執行到返回 再看看

當我們一出來就發現一個jnz 而且就在這個召喚殭屍call的上方 那麼這個call極有可能就是召喚殭屍用的call

我們在413FD2處下斷

我們發現 和我們要的效果是一樣的 只要一回到遊戲繼續 他就會斷下 說明這個就是計時器 那麼這個edi+559c應該就是計時器的值 按照前面幾篇的原理來說 我們只要修改了這個edi+559c的值 就可以做到加速生產殭屍

那麼首先 我們要先修改這個值 好讓他重置 來下斷 這樣就可以快速定位到 他是哪裡進行了賦值

我們這裡賦值為0 程式碼就可以執行進去 與此同時 在這個記憶體位置下斷

在第一個記憶體地址下硬體寫入斷點

執行之後發現在這裡斷下 我們可以看到 是eax給edi+559c進行的賦值 同時也賦值給了edi+55a0

如果沒有清除硬體斷點的話 可以再執行一次 看看 還有哪裡對他進行的賦值

我們看到 他又有一個地方進行了減操作 而且上圖中的這個減操作是在靠前的程式碼段 而賦值的程式碼段是靠後的 正好比較的程式碼段在這兩個程式碼段的中間

這樣正好是下面賦值 上面減 當減到0了 就又會重新賦值 正好是和前面的計時器的用法是一模一樣的

那麼我們修改就省事了

在4140c9的地方 我們直接給mov eax,1 這樣 就可以實現加速

當時 當修改之後 我們發現 他到這裡就不會再出殭屍了 也就是說 他還有一個值在控制著

我們發現執行一段時間以後 edi+559c的值 會被重置賦值成一個比較大的值 也就是說 還有其他的地方會對他進行賦值 那麼我們向上找

發現這裡兩個地方都會對edi+559c進行賦值 可能就是跟那地圖上的兩個標誌有關係 解決的方法有很多 第一個是改跳轉 第二是直接改mov指令

我們這裡採用第二種方式 直接賦值為1

這樣就結束了 以開局所有的殭屍都會出現 然後小推車直接搞定