2020年7月18日 星期六

大富翁6 - Cheat Engine修改遊戲金幣

遊戲外掛的製作,也許是非常多人感到有興趣的議題,不過這些技術大多數的新手並不知道要怎樣入門,因此此篇就透過Cheat Engine工具來實作修改遊戲的記憶體,這也是非常簡單的作法,任何新手都可以一步一步的來完成修改遊戲記憶體的實作。

一、Cheat Engine Attach

首先將安裝好的大富翁6運行起來。



在Cheat Engine的左上角點選電腦圖示,它會跳出Process List視窗,然後再選擇大富翁6的程序(Process)。



二、掃描記憶體

在遊戲裡面,我們可以直接看到遊戲的金幣,總共240000元。



從遊戲介面顯示的金幣,我們推測它可能是佔有4 Bytes的整數形態數值,所以在Cheat Engine的Value Type選擇4 Bytes,Scan Type選擇Exact Value,Value寫入240000,再按New Scan。

按完New Scan,左邊介面會顯示記憶體掃到此數值的所有位址,總共數量有5個。



三、再次確認金幣的數值

從上一步,我們總共有掃到5個相同數值的記憶體位址,通常掃到這麼少的數量的記憶體位址,可以一個一個修改,就能猜到哪些是存放我們金幣的記憶體位址,不過如果相同數量非常多,我們要如何解決這個問題 ?

我們需要在遊戲裡面購買土地,因此金幣就會被改變成其他數值,然後可以從改變的金幣數值再一次掃描記憶體。



在購買土地後,金幣變成238000。



在Cheat Engine裡面也看到改變後的金幣,通常如果掃到記憶體位址的數量非常多,我們會在Value寫入238000,再按Next Scan,它就會繼續過濾記憶體,直到能確認此數值的記憶體位址。



四、修改金幣數值

我們從掃描到的記憶體位址,點擊滑鼠左鍵2次,它就會將此筆資料顯示在介面的下方,這樣我們就可以修改記憶體位址。

這邊有2個數值為238000的記憶體位址,其中6884C64為顯示介面金幣的數值(它會從5244E94來更新此數值),5244E94為金幣本身的記憶體位址,因此只要修改5244E94,就能將金幣改成我們要的數值了。



我們在Value點擊滑鼠2下,它就會跳出Change Value視窗,我們可以將數值改成500000。



在Cheat Engine改完記憶體後,遊戲的金幣就成功的修改成500000元。



五、深入探討

在透過Cheat Engine來掃描記憶體,經過遊戲的互動,讓需要掃描的數值有所變動,這樣就能將記憶體位址過濾到較少的數量,也比較好驗證哪些記憶體位址是我們真正需要的,不過這些都是建立在我們已知此數值的資訊,像是金幣的數值就是顯示在介面上,因此我們可以較為直覺的知道此數值為多少,那麼如果我們要掃描未知的數值呢 ? 例如MMORPG的人物坐標,此數值大多數的遊戲並不會顯示在介面上,這時我們需要使用Cheat Engine進階的功能Unknown Initial value、Unchange value、Change value、Increased value、Decreased value等等,不過要找出這些數值,還是需要了解遊戲相關的架構,這樣才能比較精準的猜測數值的形態,另外有些資訊是比較不容易透過記憶體分析來找出,像是附近怪物的資訊、技能的調用資訊、遊戲坐標系統資訊、障礙物資訊等等,這些都需要軟體逆向工程的基礎知識才能突破的。

五、結論

我們利用Cheat Engine來修改單機遊戲的記憶體資訊,這也是較為簡單的Hacking遊戲,因此新手也可以非常容易竄改其它的記憶體資訊,如果對於遊戲外掛有更進一步的興趣,可以學習軟體逆向工程相關的知識。