遊戲基址查找思路

前言:這裏選取植物大戰殭屍作爲案例,原因是這是一個典型的 3 級地址偏移的遊戲案例,以下博文均以 3 級偏移爲思考對象

思路

  1. 我們知道,用 CE 修改遊戲數據的時候,我們 CE 獲取到的當前某個數據的內存存儲地址在我們重新打開遊戲後就會失效。這裏原因就是因爲每次遊戲重新開啓後,數據在內存中存儲的具體位置都發生了變化,故而我們無法使用某一次 CE 獲取到的地址來重複修改遊戲數據。

  2. 那麼是不是說每次打開遊戲後,遊戲數據的存儲位置的選擇都是虛無縹緲的,無跡可尋的呢,每次都需要重新獲取地址呢?並不是的這樣的。當前內存地址變化的原因是由於計算機的本身存儲的機製造成,並非開發者故意而爲,這裏是有規律可循的。

  3. 這裏就要引入 基址 ,即一個數據無論遊戲重啓多少次,它在內存中的地址都是以基址爲基礎,加上偏移量最終計算處理的,因此,只要知道基址和偏移量,就能準確的找到遊戲運行後某個數據的地址,並且只要基址不變,就一定生效。

  4. 那麼這裏的算法是如何的?這裏以植物大戰殭屍中太陽地址爲例

    1. 太陽基址指向二級基址地址
    2. 二級基址地址 + 二級偏移地址 = 三級基址地址
    3. 三級基址地址 + 三級偏移地址 = 當前內存太陽數據存放的地址
    4. 更改當前內存太陽數據存放的地址,就實現了對遊戲中太陽數量的修改
  5. 圖片示例
    在這裏插入圖片描述
    其中,17B3B430 確實是本次運行遊戲中太陽數量存儲的地址
    而且,第二行中 02569C98 + 768 是用 [ ] 括起來的,這意味着我們要取這地址中的值,也就是 17B35ED0。

  6. 但是在 CE 的實際操作中,我們往往是逆向過來的,即我們會得到一個最終存儲太陽數量的地址,比如上例中的:17B3B430,而我們的目標是找到 2A9F78。那麼如何找呢?

  7. 我做了圖片輔助理解這個過程
    在這裏插入圖片描述

  8. 以上圖爲例,我們解釋逆向思路:

    1. 我們的目的是找到上圖中的基址
    2. 現在我們通過 CE 知道了存儲陽光數量的當前地址,也就是圖中的 150
    3. 然後我們可以得到這個地址的偏移量 30 ,得到了 120 ,也就是我們的未偏移的三級基址
    4. 我們找到存儲這個三級基址的地址,最終找到了 60,但是 60 仍然是二級地址偏移過後的地址
    5. 我們用 60 減去 10 就得到了未偏移前的二級基址 50
    6. 最終,我們找到存儲這個二級基址的地址,即我們的基址,在 CE 中表現爲這個地址的顏色是綠色的
  9. 以上,就是我們針對於 3 級基址的逆向查找的邏輯的思路

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章