它的存在破壞了遊戲的平衡性、挑戰性與公平性,透過未經授權的工具或方式來使得玩家獲得不公平的優勢,它就是耳熟能詳的「遊戲外掛」。基於對遊戲外掛的好奇心,我想知道外掛的製作過程和它透過什麼修改手段及入侵來達成目的,所以今天我要來介紹一些有關遊戲外掛的事情。
外掛的定義是「使用外部城市來對原本既有的程式進行修改」,但因為汙名化使其與偏離原本正向的「增加程式額外內容所附加的掛件」的意思。遊戲外掛是指針對特定遊戲設計,可以修改遊戲內部分程式的程式。
逆向工程的目的在於分析遊戲運行方式和搜尋相關記憶體。當你在遊玩一款遊戲的時候,遊戲數據(玩家的生命值、物品、所在位置等)通常會儲存在遊戲客戶端的記憶體當中,隨著遊戲的進行不斷的更新。透過記憶體分析數值的變化,能夠知道是哪一行的程式碼在處理這部分,推敲出相關的程式碼。像是比較廣為人知的Cheat Engine就能夠很好的進行記憶體分析這樣作業。
你在遊戲裡做的事情如打怪、喝藥水、移動等動作都會有封包進行傳輸,透過這些封包我們能得知相關的程式碼。即使現在遊戲都會對封包進行加密,不過仍然可以透過封包的長度來去分析封包的型態。常用的程式如Wireshark能夠透過過濾其他流量來很好的只分析封包。
遊戲外掛的氾濫使得遊戲公司會對程式碼進行加殼(Packer),使得反編譯的難度大幅提升,往往很多初學者就會敗在這一關上。常見的加殼手段有這幾個:
壓縮殼
將程式碼進行壓縮,增加逆向工程的難度
加密殼
將軟體裡面的程式碼進行加密,並且在執行時才會進行解密
VMP(Virtual Machine Protector)
將程式碼轉變成一種特殊的虛擬語言,再由VMP的虛擬機器解釋和進行。因為被轉換的程式碼已經不是原本的機器語言,這也讓分析和逆向工程的難度提高
參考資料