前言
遊戲外掛產業是一個灰色產業鏈因此在入門的門檻非常高,要求有一定的程式語言基礎、反編譯能力、彙編能力、跟蹤與除錯能力,在撰寫外掛的基本程式面上會有修改工作的程式碼、擷取外掛傳送/接收的封包,如果沒有以上能力再遇到問題時,時常會卡關,加上這個行業並沒有所謂的師傅/學徒制or老師/學生制,能遇到會的人很難,遇到會了肯教你的人難上加難,接下來會依照方式做分類講解。
序
基本的方式介紹
在遊戲通常不外乎會看到加速掛、全圖秒殺掛、無限金幣(傷害)、自動打怪、脫窗掛、修改遊戲程序、手遊還會有APP上新增功能(注入)等,這些在接下來會有提到原理與解說。
一、變速器(遊戲加速)
在早期的遊戲製作的方式與現在大不相同,也就照舊了舊的遊戲有加速的問題,而新遊戲並沒有再看到的情況發生,現代的遊戲常用的一般都是高精度計時,比如 Timer 什麼的並不常出現於遊戲,因為精度一般(這邊泛指端遊)。
手游和端游的通用加速功能原理都相同,通常遊戲需要以幀為單位播放畫面,播放畫面過程中計算每幀動畫播放所需時間,遊戲需要調用C庫函數獲取系統時間以供計算每幀更新。目前手機端絕大部分遊戲分別為:Cocos2D引擎、Unity3D引擎,引擎中實現了遊戲每幀更新相關處理邏輯(包括每幀更新時間的計算),所以導致使用固定引擎的遊戲每幀更新所需時間計算過程中調用的Libc.so模塊完全相同。
變速原理
1.遊戲邏輯
2.修改動作所需數量 (都刪可達無延遲)
3.修改代碼影響每個動作時間結果 (短延遲)
現有加速器實現方式
目前主流的手遊加速器O餅修改器 這款主流的加速器目前採用與遊戲邏輯無關的的方式實現通用加速功能,針對不同引擎,加速器修改了不同Libc.so相關函數、gettimeofday達到變速效果。
變速器運用範圍:加速遊戲速度(時間提升產量)、加速推關速度、攻擊速度、移動速度等
二、逆向工程技術
逆向的目的在於分析遊戲的運作以及搜尋相關記憶體的資訊,但全部的資訊太多是無法分析完的,所以就需要用到一些記憶體分析器常見的例如CE,來輔助修改記憶體達到所想要的效果。
a.修改記憶體
記憶體分析可以讓你從已知與未知的素質上尋找變化,然後去分析數值的變化,就能得知哪一個記憶體是他的操作,找出結構的位移,例如可以讓怪物攻擊,因此血量就會降低,我們可以搜尋當前的血量值,就能推出相關的記憶體進而修改。
逆向修改技術運用範圍:無限金幣、血量、傷害、全圖打、吸怪、修改技能等
解說:吸怪是全圖打的變種,別人看到怪沒有被吸 但是在客戶端是全部吸過來,由於傷害判定是客戶端傳給伺服器,所以會達到這種效果。
三、封包分析
你做的每個事情都會有封包進行傳輸,例:買裝、買水、打怪等動作,封包分析可以做的事情也是現在市面上主流外掛常出現的事情,例如自動打怪、自動賣東西、買水等動作,沒有修改記憶體暴力但是比較安全,也可以見到角色在成長讓廣大瓜農們喜愛。
現在的遊戲都有封包加密所以可以透過封包的長度,去識別各種封包的型態,然後再從遊戲裡找到解密後的明碼封包,可以提高解密的效率,這邊不提供教學。
封包長度:(通常在前1 Byte或是2 Byte是封包長度後才是加密訊息)
想要分析明碼的封包要用什麼方式? 由於每個遊戲的加解密方法都不一樣,因此需要找到加解密封包的相關函式,然後再帶入參數,就能獲得所有的明碼封包,不過程式都必須自己撰寫。
封包可以做的事情:自動打怪、買裝買水等非有驗證性的動作都可以做
四、遊戲的防護機制
現在都2021年了,遊戲公司都會使用一些防護機制,加強客戶端的程式碼,常見的就是在程式碼裡面加殼(Packer),在反編譯的時候會閃退or找不到,除非將遊戲解殼(UnPacker),往往這些殼很容易就勸退初學者,也就是說寫瓜最簡單的時候是在2008那段時候,新絕代雙驕、RO、天堂、楓之谷也是因為這樣瓜瓜才多(雖然現在也不少但難度提升)。
下方是常見的加殼 有興趣的可以自己google查閱
a.壓縮
把部分的程式碼進行壓縮,然後修改要解壓縮的程式區塊。
b.加密
在主要關鍵程式碼加密然後要使用時才解密,之後又會進行加密,並且程式碼還會讓人混淆。
c.驅動層防護
因為驅動層可以修改核心記憶體,可以實時刷新做偵測的動作,來看是否有區段被修改,如果被抓到會閃退遊戲、被登出、鎖帳號等,32位元跟64位元不同64位元現在有windows保護核心層不被修改,在64位元頂多透過PEB (Process Environment Block)來Process (BeingDebugged Flag)觀察系統是否有被反編譯。
d .VMP(Virtual Machine Protection Packer)
關鍵程式碼被特製的程式指令做替換,執行的時候會用查table的方式把程式碼所代表的字句例出來
e.CRC檢測
如果使用反編譯軟體它會在程式區塊下軟中斷點(0xCC),CRC會判斷程式碼是否有不一樣,判斷結果是否跟之前的不一樣,如果不一樣就會結束程式,在CRC檢測前繞過即可。
下一篇文章
單機版的修改器是怎麼做出來的
文章僅供學術交流使用如有法律糾紛與我並無關聯
本人在此特地聲明,謹此宣告,絕不自殺,絕不發生意外。 本人樂觀開朗,身體健康,近期至未來五十年之人生規劃都已妥當,交友廣闊,身無隱疾,且家中尚有老父老母需奉養,絕無任何自殺輕生之意圖。近期也未規劃前往外地旅遊踏青,生活作息正常,更無機會接觸木炭、毒藥、槍砲彈藥等危險管制物品。 本人並無任何使我困擾之慢性病或心理疾病,故絕不可能做出任何看似自殺之行為。 本人從無睡眠困擾,故不需服用安眠藥,更不會有服用過量的問題。 本人強調個人不酗酒也不吸毒。 。本人近期嚴守其身絕不會接近下列地點,例如: 1. 開放性水域以及偏郊積水攤 2. 任何無救生員之游泳池 3. 有高壓、危險氣體,或密閉式未經抽氣處理之地下室、蓄水池、水桶等 4. 無安全護欄之任何高處 5. 任何施工地點(拆政府除外),包括製作消波塊之工地 6. 任何以上未提及但為一般人正常不會前往之地點 。本人恪遵下列事項: 1. 開車或騎摩托車之前會檢查煞車部件、油門線等,並會在加油前關閉車輛電源與行動電話。 2. 絕不擅搶黃燈、闖紅燈。 3. 乘坐任何軌道類交通工具,本人一定退到警戒線後一步以上,直到車輛停妥。 4. 騎乘機車必戴安全帽;乘車必繫安全帶。 5. 絕不接近任何會放射對人體有立即危害的輻射之場所(如核電廠)或設備。 6. 颱風天不登山、不觀浪。 。本人將盡可能注意居家電器、瓦斯、火源之使用。 。本人居住之房屋均使用符合法規之電路電線,絕無電線走火之可能; 。本人絕對不在家中置放過量可燃性氣體或液體。 。浴室中除該有之照明外,不放置任何電器用品, 。睡覺前會關閉大量耗能電器,僅保持電燈、冰箱、電扇外之所有電器開關。 。本人絕不會與隨機的不明人士起衝突,並盡可能保護自我人身安全。 若本人被發現死亡,且現場無外力及打鬥掙扎痕跡,如在車內房間等等隱蔽場所,絕非本人自殺。 若網友在看完此聲明之後,近期或將來發現此帳號不再上線,請幫我討回公道,謝謝。