搜尋

CE修改

返回清單
切換到指定樓層
通知這文章過時或找檔案 發表主題

[電玩遊戲] 《Cheat Engine》多級指標與程式碼注入攻略(2) 多級指標搜尋、結構分析、腳本注入教學

[複製連結]
1
路易安納 ( Lv.30 大天使 ) 發表於 昨天 13:51 | 只看該作者 |只看大圖 回覆獎勵 |降序瀏覽 |閱讀模式


《Cheat Engine》多級指標與程式碼注入 快速閱讀精華


  • 🔑 本篇核心: 專門解決 CE 官方教學中最具挑戰性的第八關(多級指標)第九關(程式碼注入)
  • 🎯 第八關「多級指標」通關技巧:
    • 目標是將會變動的數值(動態位址)鎖定為 5000。
    • 關鍵在於反覆逆向追蹤,從數值的位址一步步找出上一層的指標,直到找到不會變動的綠色靜態位址(基底位址)為止。
    • 最後手動添加指標,並將過程中記錄的偏移量 (Offset) 反向填入,即可成功指向目標數值。
  • ⚔️ 第九關「程式碼注入」通關技巧:
    • 目標是在不鎖定血量的情況下,讓我方隊伍獲勝。
    • 核心是利用「結構分析」功能,找出區分我方陣營敵方陣營的關鍵數值(例如:陣營ID)。
    • 透過「程式碼注入」寫入一小段組合語言腳本,判斷當前程式碼影響的是敵是友。如果為敵方,則直接將其血量歸零;若為我方,則不進行任何操作。



前篇:
《Cheat Engine》CE修改器 v7.6 新手教學攻略(1) 記憶體修改、指針掃描、程式碼注入,官方內建教學全破指南
https://www.game735.com/thread-434932-1-1.html




相信許多玩家在學習 Cheat Engine (CE) 時,前面的關卡都還算順利,但到了第八關「多級指標」和第九關「程式碼注入」時,就會開始感到頭痛。這兩關涉及了更底層的記憶體原理,需要更多的耐心和理解。

本篇教學將承接上一篇的基礎,用最白話的方式,一步步帶你拆解這兩個最核心也最困難的關卡,讓你徹底搞懂指標與程式碼注入的運作邏輯。

外連至此bilibili影片連結



第八關:多級指標 (Multi-level pointers) 教學



這一關的目標是將生命值鎖定在 5000,即使按下「改變指標」按鈕,數值也不會改變。這代表我們不能只修改當前的數值位址,因為它是一個會變動的「動態位址」。我們必須找到儲存這個動態位址的「指標」,然後再往上找指標的指標,直到找到一個遊戲重啟也不會變的「靜態位址」。

7VGBY7u.jpg



👉 GM後台版 遊戲 推薦 ⬇️⬇️⬇️ 快速玩各種二次元動漫手遊app



簡單來說,整個流程就像在玩解謎遊戲:
  • 靜態位址 → (偏移) → 動態位址A → (偏移) → 動態位址B → (偏移) → 最終數值位址

我們要做的就是從「最終數值」反推回去,找到最源頭的那個「靜態位址」。

第一步:找出初始動態位址與第一層偏移量



  • 首先,跟之前一樣,掃描當前的生命值(例如:3310)。通常一次就能找到。
    M2tcxno.jpg

  • 在找到的位址上按右鍵,選擇「找出是誰寫入這個位址」
    Vv2EAIo.jpg
  • 點擊遊戲中的「改變數值」按鈕,CE 的視窗會出現一行指令。點擊它,然後查看下方的「更多資訊」。
  • 你會看到類似 `[RSI+18]` 的指令。這代表我們的數值儲存在「RSI 暫存器內的位址」加上「18」這個偏移量的地方。
    • 記下第一個偏移量: 18
    • 複製 RSI 的值: 這個值就是我們要找的上一層指標的位址。

    piLK05G.jpg



第二步:反覆追蹤,找出所有偏移量



接下來就是一個重複的過程,我們要拿上一層找到的位址,去尋找更上一層的位址。

  • 點擊「新的掃描」,勾選「十六進位」,然後貼上剛剛複製的 RSI 位址值進行掃描。
    cnzaSB9.jpg


  • 將掃描到的結果加到下方清單。在這個新位址上按右鍵,選擇「找出是誰存取這個位址」
  • 回到遊戲點擊「改變數值」,CE視窗又會跳出新的指令。
  • 這次的指令可能是 `[RSI]`,後面沒有加任何數字。這代表偏移量是 0
    • 記下第二個偏移量: 0
    • 複製新的 RSI 值。

    7AXovFM.jpg
  • 不斷重複上述步驟:「用上一個RSI的值進行十六進位掃描 -> 找到存取位址的指令 -> 記錄偏移量 -> 複製新的暫存器(RSI)值」
  • 你會依序得到接下來的偏移量:



第三步:找到靜態位址並手動建立指標



當你用最後一次得到的 RSI 值進行掃描時,你會發現掃描結果的位址變成了綠色。這就代表你成功找到了不會變動的「靜態位址」,也就是我們的「基底位址」。

jf7Hm7F.jpg


現在,我們要手動把這條指標鏈建立起來。
  • 點擊「手動添加位址」
  • 勾選「指標」選項。
  • 在最上方的「位址」欄位,輸入我們找到的那個綠色靜態位址
  • 接下來,我們要「反向」把剛剛記錄下來的所有偏移量一個個加進去。我們找到的順序是 18 -> 0 -> 18 -> 10,所以添加的順序要反過來:10 -> 18 -> 0 -> 18
    lfIqWB2.jpg
  • 每當你新增一個偏移量,可以觀察下方的位址變化,它會跟我們之前追蹤時的位址一一對應,這代表我們的路徑是正確的。
    6qwCaDa.jpg
  • 全部加完後,最終指向的位址會和我們一開始找到的血量位址完全相同,數值也會對應上。
    Rst8Fr3.jpg



第四步:鎖定數值,完成挑戰




第九關:程式碼注入 (Code Injection) 教學



這一關要求我們在不凍結血量的情況下,讓我方獲勝。場上有我方兩名隊友和敵方兩名電腦玩家,他們共用同一段程式碼來處理傷害。如果我們單純修改扣血的指令,會導致我方也一起受影響。因此,我們必須找到區分敵我的方法,並只針對敵人進行修改。

nPjnf81.jpg


第一步:找出所有角色的血量位址


  • 這關的數值類型是「浮點數 (Float)」。記得先把數值類型改對。
  • 分別攻擊四個角色,利用「減少的數值」或「未知的初始值」等方式,找出代表他們四人血量的位址,並全部加到下方清單。
    Dj8oC9z.jpg



第二步:利用結構分析找出陣營ID


  • 在任一血量位址上按右鍵,選擇「找出是誰寫入這個位址」,攻擊該角色,找到扣血的指令。
  • 在該指令上按右鍵,選擇「顯示反組譯器」
  • 在反組譯器視窗,選擇上方選單的「工具」 -> 「解析資料/結構」
  • 點擊「結構」 -> 「定義新結構」,將其中一個角色的血量位址貼上並確定。
  • 這時會出現一個視窗,顯示了該角色所有相關的資料結構。我們需要把其他三位角色的位址也加進來做比對。按下 Ctrl+A 可以新增位址欄,把另外三個位址也貼上。
  • 現在,視窗會並列顯示四位角色的資料。綠色代表數值相同,紅色代表不同。我們的目標是找到一個「我方兩位角色數值相同,但與敵方兩位角色不同」的項目,這個很可能就是「陣營ID」
  • 仔細觀察,你會在位址偏移量 `+C` 的地方找到關鍵:我方兩位角色的值都是 1,敵方兩位角色的值都是 2。這就是我們要的陣營ID!記住這個偏移量 +C
    57A8WX5.jpg



第三步:撰寫程式碼注入腳本


  • 回到反組譯器視窗,確保選在剛剛那行扣血指令上。
  • 選擇上方選單的「工具」 -> 「自動組合」(或按 Ctrl+A),選擇「模板」 -> 「代碼注入 (Code Injection)」
  • CE 會自動生成一個腳本框架。我們要在藍色 `originalcode:` 註解的上方插入我們的判斷邏輯。
  • 輸入以下組合語言腳本:

    1. CMP [RDI+0C],#1
    2. JE originalcode
    3. SUB [RDI],[RDI]
    複製代碼
  • 這段腳本的白話翻譯是:
    • CMP [RDI+0C],#1:比較 [RDI+0C](也就是陣營ID)的數值是否等於 1。
    • JE originalcode:如果等於 1(代表是我方角色),就直接跳轉(Jump if Equal)去執行原本的扣血程式碼,不進行任何修改。
    • SUB [RDI],[RDI]:如果不等於 1(代表是敵方角色),就執行這行。這行的意思是將 [RDI](也就是敵人的血量)減去它自己,結果就是 0。
  • 簡單來說,就是「判斷是不是自己人,不是的話就讓他血量直接變0」
  • 點擊「檔案」 -> 「分配到目前的CT表」,將腳本儲存起來。


第四步:啟動腳本,贏得戰鬥


  • 回到 CE 主視窗,你會在下方清單看到剛剛儲存的腳本。
  • 點擊它前面的小方框來啟用 (Active)這個腳本。
  • 現在回到遊戲中,隨意攻擊敵人,你會發現敵人的血量會瞬間歸零,而我方隊友受到攻擊時則正常扣血。
  • 輕鬆擊敗兩名敵人後,「下一步」按鈕亮起,第九關也順利通關!



《Cheat Engine》多級指標與程式碼注入 重點回顧


  • 多級指標的精髓:核心概念就是「耐心」。透過反覆的「找寫入/存取來源 -> 複製指標位址 -> 16進位掃描」循環,直到找到綠色的靜態基底位址。最後,記得要將記錄的偏移量反向填入手動建立的指標中。
  • 程式碼注入的關鍵:成功的關鍵在於找出判斷條件。本次範例是利用「結構分析」找到代表陣營的唯一ID。只要找到這個區分敵我的鑰匙,就能撰寫腳本,讓修改只對特定目標生效。


以下廣告滑動後還有帖子內容




Cheat Engine 進階教學常見問題Q&A


  • Q:在第八關,為什麼我一直找不到綠色的靜態位址?
    A:請確認每一步操作是否正確。最常見的錯誤是:1. 忘記將掃描類型切換回「十六進位」。2. 複製位址時,複製到錯誤的暫存器值(例如 ESI 而非 RSI)。3. 在「找出是誰寫入/存取」後,沒有觸發遊戲內的數值變動,導致找不到正確的指令。
  • Q:為什麼手動添加指標時,偏移量要反過來填寫?
    A:因為我們「尋找」的過程是從最終數值 -> 動態位址B -> 動態位址A -> 靜態位址,是一個逆向追蹤的過程。而我們「建立」指標時,是要讓CE從靜態位址 -> 動態位址A -> 動態位址B -> 最終數值這樣正向去讀取,所以偏移量的順序自然要反過來。
  • Q:在第九關,如果我在結構分析中找不到明顯的陣營ID怎麼辦?
    A:這種情況確實可能發生。影片中也提到有時可能不會顯示。這時就需要更多的嘗試和經驗,例如觀察其他數值(可能是0和1,或其他固定數字),或是嘗試不同的偏移量。本關卡的正確偏移量就是 `+C`,即使在結構中沒顯示,直接在腳本中使用 `[RDI+0C]` 也是可行的。
  • Q:程式碼注入的腳本看起來好複雜,有沒有更簡單的方法?
    A:程式碼注入屬於 CE 中較為進階的技巧,它能實現比單純修改數值更複雜的功能(例如無敵、一擊必殺等)。雖然需要學習一點組合語言,但它的效果也更強大且穩定。對於需要區分敵我的情況,這是最標準且有效的方法。
  • Q:第九關的腳本 `SUB [RDI],[RDI]` 是什麼意思?
    A:這是一行組合語言指令。`SUB` 代表減法。`[RDI]` 在這個情境下,可以理解為儲存著角色血量的記憶體位置。所以 `SUB [RDI],[RDI]` 的意思就是「拿血量所在的記憶體位置的值,減去它自己的值」,任何數字減去自己都會等於0,所以這行指令的效果就是將血量瞬間歸零。








大家正在看啥


收藏收藏 分享文章到FB上分享
回覆 使用道具 檢舉
複製專屬你的推廣連結:發至FB與各論壇宣傳:累積點數換GP商品 & 藍鑽
每五點閱率就可以兌換藍鑽積分或遊戲點卡 夢遊推廣文章換GP商品

你需要登入後才可以回覆 登入 | 加入會員

本版積分規則

Copyright (C) 2010-2020 夢遊電玩論壇

廣告合作:請直接聯繫我們,並附上您預刊登位置的預算。  

快速回覆 返回頂端 返回清單