J.J. Huang   2019-06-26   Cheat Engine   瀏覽次數:次  

Cheat Engine - 第六章 | CE Tutorial Step 5

📑 目錄
  1. 教程分析
  2. 解題
    1. 第一步
    2. 第二步
    3. 第三步
    4. 第四步
    5. 第五步
    6. 第六步
  3. 完整動態解題
  4. 總結
    1. 代碼列表 (還原代碼)

教程分析

第五關:代碼查找器(密碼是 888899)。

通常,儲存資料的地址不是固定不變的,每一次重啟遊戲通常都會變動,甚至在你玩遊戲的過程中地址都有可能改變。為此,我們有兩個方法,這一關講解使用代碼查找的方法。

每一次點擊 Change value 數值都會改變。​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​‌​​​‌‌​‌‌​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌​​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌‌​‌‌​

你需要做的是:讓其不再改變。

解題

第一步

  • 首先看到頁面上的 100
  • 接著我們在需要搜尋的值那邊輸入100
  • 點擊首次搜尋
  • 會將搜尋結果顯示在搜尋的結果地址表的框內

Cheat Engine - 第六章 - 圖 1 (01)

第二步

  • 點擊 Change value,讓數字變動
  • 根據 60 數值,在需要搜尋的值重新輸入 (這邊範例為60)
  • 點擊再次搜尋
  • 此時會發現搜尋的結果地址表的結果變少了 (有時候會精準到剩下一個,或是剩下多個)

Cheat Engine - 第六章 - 圖 2 (02)​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​‌​​​‌‌​‌‌​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌​​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌‌​‌‌​

第三步

  • 針對該地址點擊右鍵
  • 選擇 Find out what writes to this address
  • 會跳出This will attach the debugger on Cheat Engine to the current process. Continue?,點擊Yes

Cheat Engine - 第六章 - 圖 3 (03)

Cheat Engine - 第六章 - 圖 4 (04)

註:This will attach the debugger on Cheat Engine to the current process. Continue?
表示為:這會將Cheat Engine上的調試器附加到當前進程。 是否要繼續?​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​‌​​​‌‌​‌‌​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌​​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌‌​‌‌​

第四步

  • 點擊 Change value,讓數字變動
  • 此時會發現The following opcodes write to xxxxxxxx視窗內計數器視窗的多了一條指令

Cheat Engine - 第六章 - 圖 5 (05)

Cheat Engine - 第六章 - 圖 6 (06)

第五步

  • 對該指令點擊Replace (將指令變成NOP)
  • 會彈跳出,是否需要對這段代碼取名 (不變更則點擊OK)
  • 當然,右鍵這條指令,選擇替換為什麼都不做的代碼(NOP),效果是一樣的。

Cheat Engine - 第六章 - 圖 7 (07)​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​‌​​​‌‌​‌‌​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌​​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌‌​‌‌​

Cheat Engine - 第六章 - 圖 8 (08)

第六步

  • 點擊 Change value
  • 則會看到Next,已經可以點選

Cheat Engine - 第六章 - 圖 9 (09)

完整動態解題

Cheat Engine - 第六章 - 圖 10 (10)​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​‌​​​‌‌​‌‌​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌​​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌‌​‌‌​

總結

這一關,我們到底做了些什麼?

首先,找出改寫當前地址的操作,這個是調試器的一個功能,所以必須先把調試附加到指定進程
(這個附加操作可能被檢測到,網路遊戲需要過非法)

找出改寫當前地址的操作,其實是設了一個內存斷點,每次有指令改寫這個內存,都會使目標進程中斷在改寫指令之後(為什麼是之後,這個是CPU所決定的,沒辦法), 然後CE會自動記錄這條地址,並儲存寄存器訊息,然後繼續運行程序。​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​‌​​​‌‌​‌‌​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌​​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌‌​‌‌​

  • 在Debugger狀態下,可以點擊地址右鍵選Browse this memory region,查看該內存的區塊,也可以在調試器窗口點擊該指令右鍵show this address in the disassembler,查看該內存的區塊

Cheat Engine - 第六章 - 圖 11 (11)

Cheat Engine - 第六章 - 圖 12 (12)

Cheat Engine - 第六章 - 圖 13 (13)​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​‌​​​‌‌​‌‌​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌​​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌‌​‌‌​

  • 對該指令點擊Replace (將指令變成NOP)
  • 此時看到反彙編窗口,會發現被替換成NOP了。
  • 替換成什麼也不做之後,這個地址就不會再改變了,其他指令使用這個地址時就一直是同一個值了。

Cheat Engine - 第六章 - 圖 14 (14)

替換前/後比較圖:
Cheat Engine - 第六章 - 圖 15 (15)
Cheat Engine - 第六章 - 圖 16 (16)

代碼列表 (還原代碼)

點擊 Replace 會提示一個輸入名稱,這是因為這條代碼會保存在地址列表中,點擊主界面的 Advanced Options 打開地址列表。​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​‌​​​‌‌​‌‌​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌​​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌‌​‌‌​

紅色表示當前地址已經被替換成無用代碼了。

Replace 會自動將其替換成無用代碼,如果想復原可以在 Advanced Options 中右鍵這條指令,選擇 Restore with original code 恢復原始代碼。

示範:​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​‌​​‌‌‌​​‌​​‌‌​​​​​​‌‌​‌‌​​​‌‌​​‌​​​‌‌​‌‌​​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌​​​​‌‌​​‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌​​​‌​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​‌​​‌‌​‌‌​

Cheat Engine - 第六章 - 圖 17 (17)