分享

淺談遊戲外掛——外掛篇3(外掛製作基礎)

 我從山中來 2010-05-28

  說在篇前的話:珍惜好遊戲遠離外掛。本文很多內容來源與INTERNET,在這裡感謝那些文章的作者。同時希望大家可以用自己的雙手創造出完美純淨的遊戲 世界。同時在寫本文的時候為了不帶來負面影響,重點部分(函數的使用)不做詳細介紹
——輕楓逐水
 
一、 前言

  所謂遊戲外掛,其實是一種遊戲外輔程序,它可以協助玩家自動產生遊戲動作、修改遊戲網絡數據包以及修改遊戲內存數據等,以實現玩家用最少的時間 和金錢去完成功力升級和過關斬將。雖然,現在對遊戲外掛程序的「合法」身份眾說紛紜,在這裡我不想對此發表任何個人意見,讓時間去說明一切吧。

  不管遊戲外掛程序是不是「合法」身份,但是它卻是具有一定的技術含量的,在這些小小程序中使用了許多高端技術,如攔截Sock技術、攔截API 技術、模擬鍵盤與鼠標技術、直接修改程序內存技術等等。本文將對常見的遊戲外掛中使用的技術進行全面剖析。

二、認識外掛

  遊戲外掛的歷史可以追溯到單機版遊戲時代,只不過當時它使用了另一個更通俗易懂的名字——遊戲修改器。它可以在遊戲中追蹤鎖定遊戲主人公的各項 能力數值。這樣玩家在遊戲中可以達到主角不掉血、不耗費魔法、不消耗金錢等目的。這樣降低了遊戲的難度,使得玩家更容易通關。

  隨著網絡遊戲的時代的來臨,遊戲外掛在原有的功能之上進行了新的發展,它變得更加多種多樣,功能更加強大,操作更加簡單,以至有些遊戲的外掛已 經成為一個體系,比如《石器時代》,外掛品種達到了幾十種,自動戰鬥、自動行走、自動練級、自動補血、加速、不遇敵、原地遇敵、快速增加經驗值、按鍵精 靈……幾乎無所不包。

   網絡遊戲的鼻祖是mud,而外掛的鼻祖是mud中機器人。玩過mud的估計都用過機器人,由於mud是用文字命令的,所以機器人的實現比較簡單,而且靈活 性比較大,我所說的靈活性是指用戶可以根據自己的需要定義自己的機器人,自己定義好後由mud客戶端(帶機器人功能)自動填寫,這樣就實現了掛機練級別。
    2001年後以傳奇為代表的圖形網絡遊戲在大陸開始迅速升溫,2001年下半年人們突然發現網絡遊戲突然成為國內互連網業最另人驚喜的行業,因為網絡遊戲 的收費非常順利,那些提供了幾年的免費新聞免費郵箱的除了廣告找不到盈利點的互連網公司找到了救命稻草,2002年開始一波又一波的遊戲代理熱情一直延續 到現在。而也是2001年下半年開始外掛開始出現,一開始主要是免費為主,但到了2002年上半年外掛製作者發現同網絡遊戲一樣除了不能走正規的點卡銷售 模式外外掛的銷售也異常順利,而與此同時外掛的破解也接踵而至。外掛製作者們逐漸在2002下半年開始了商業運行,有些外掛已經可以看出來並非個人所謂, 團體製作模式突顯,同時開始出現同業競爭,銷售代理機制開始出現。2003年後外掛開始有形成產業的跡象,國家開始重視,有關單位將外掛的發行定性為非法 出版物。2003年8月國內最著名的面向程序員的網站csdn開始關注遊戲外掛,在9月的開發高手首期中大篇幅的介紹遊戲外掛,使遊戲外掛再次成為程序員 關注熱點。

  遊戲外掛的設計主要是針對於某個遊戲開發的,我們可以根據它針對的遊戲的類型可大致可將外掛分為兩種大類。

  一類是將遊戲中大量繁瑣和無聊的攻擊動作使用外掛自動完成,以幫助玩家輕鬆搞定攻擊對象並可以快速的增加玩家的經驗值。比如在《龍族》中有一種 工作的設定,玩家的工作等級越高,就可以駕馭越好的裝備。但是增加工作等級卻不是一件有趣的事情,可以說是重複枯燥的機械勞動。如果你想做法師用的杖,首 先需要做基本工作——砍樹。砍樹的方法很簡單,在一棵大樹前不停的點鼠標就可以了,每10000的經驗升一級。這就意味著玩家要在大樹前不停的點擊鼠標, 這種無聊的事情通過"按鍵精靈"就可以解決。外掛的"按鍵精靈"功能可以讓玩家擺脫無趣的點擊鼠標的工作。

  另一類是由外掛程序產生欺騙性的網絡遊戲封包,並將這些封包發送到網絡遊戲服務器,利用這些虛假信息欺騙服務器進行遊戲數值的修改,達到修改角 色能力數值的目的。這類外掛程序針對性很強,一般在設計時都是針對某個遊戲某個版本來做的,因為每個網絡遊戲服務器與客戶端交流的數據包各不相同,外掛程 序必須要對欺騙的網絡遊戲服務器的數據包進行分析,才能產生服務器識別的數據包。這類外掛程序也是當前最流利的一類遊戲外掛程序。

  另外,現在很多外掛程序功能強大,不僅實現了自動動作代理和封包功能,而且還提供了對網絡遊戲的客戶端程序的數據進行修改,以達到欺騙網絡遊戲 服務器的目的。我相信,隨著網絡遊戲商家的反外掛技術的進展,遊戲外掛將會產生更多更優秀的技術,同時商家也會不遺餘力的與之對戰到底!讓我們期待著看場 技術大戰吧......(在這裡發表下我的個人意見:希望商家可以取得最後勝利。)
    下面讓我介紹一下外掛的大體分類(外掛無外忽,一個是監控,一個是插入):
1、按鍵精靈一類。這一類外掛發送鍵盤鼠標的消息給程序,比如左右鼠標 鍵連擊功能。這樣的東西現在基本沒有了,有也覺得沒人好意思賣錢按鍵精靈一類(按鍵精靈一類:無監控,插入在界面上)。

2、按鍵精靈加強類。這一類的程序員有些基本功底,他們找出一些內存數值,比如血值藍值,並在自己的程序中監視這些值,當這些值低於設定值通過發送 遊戲本身擁有的快捷鍵消息實現自動加血自動補藍。同樣這樣的外掛也很少了(按鍵精靈加強類:監控在本機,而且監控內容多在內存(不保險),經常容易出錯. 插入在界面)。

3、包截取分析類。通過各種個樣的方式截取包,截取的方式真的很五花八門,有到底層去拿的,有掛接recv send拿的,也有自己寫一個截取用的 winXXXX.dll欺騙遊戲程序的。這種通過分析數據包並發送定製數據包可以實現基本全部的外掛功能。這個方式同時要解決的是大部分遊戲傳送數據已經 開始複雜加密,所以有個解密的過程(3包截取分析類:網絡包監控,插入也在網絡傳輸這裡)。

4、掛接遊戲客戶端關鍵函數入口。這種類型掛接的函數入口一般是遊戲接收數據發送數據的入口,注意不是recv和send的入口,那個是win api而不是遊戲的收發入口。通過跟蹤客戶端我們可以得到遊戲的收發函數入口,這些入口傳入的數據或者傳出的數據都是沒加密的,加密是在函數中完成,這樣 就可以避開解密的過程。當然既然找到函數入口那也可以找到加密解過程,只要把加解密過程提出來轉成C語言寫的也可以用3的方式來做外掛。但因為傳送的數據 不只是加密,而且在數據之間還存在一些保持邏輯關係的字段,這樣的話光拿加解密函數還是不夠的,還要找出邏輯關係,這樣的話用4這樣的方式就不需要考慮 了。我就是用這樣的方式(掛接遊戲客戶端關鍵函數入口:監控遊戲邏輯,我這裡提個問題,呢用什麼監控,api?封包的工具?調試工具?什麼樣的調試工具, 請指教.插入也在此)。

5、服務模式。這一類實際上是3,但最大的不同是,他自己建立一個本地服務器,然後將遊戲的連接地址改到本地,他在中間實現一個轉發和分析以及發偽 包的工作,而不是hook到遊戲進程中進行包的分析和發送。這樣的模式有三點好處 A 網絡遊戲升級還是比較快的,傳統hook到進程中的方式經常要修改一些遊戲中的特定地址的內容特別是4的方式,所以經常出現遊戲升級外掛就不能用的現象, 而服務模式只要數據加解密方式不變一般是不會出現類似現象。 B 容易製作出脫離原客戶端外掛,實際上也就是可以自己寫客戶端了。C 無需為2000 和98之間的不同而苦惱,兩種系統的內核差比較大,傳統方式容易遇到一些兼容性的問題(服務模式:這個方式的問題是要建立一個服務模式,---太困難 了.....你要知道服務的各個方面不光是相關的遊戲邏輯,還有消息管理,進程管理.否則,隨便就出錯.根本接管不了)。

三、外掛技術綜述

  可以將開發遊戲外掛程序的過程大體上劃分為兩個部分:

  前期部分工作是對外掛的主體遊戲進行分析,不同類型的外掛分析主體遊戲的內容也不相同。如外掛為上述談到的外掛類型中的第一類時,其分析過程常 是針對遊戲的場景中的攻擊對象的位置和分佈情況進行分析,以實現外掛自動進行攻擊以及位置移動。如外掛為外掛類型中的第二類時,其分析過程常是針對遊戲服 務器與客戶端之間通訊包數據的結構、內容以及加密算法的分析。因網絡遊戲公司一般都不會公佈其遊戲產品的通訊包數據的結構、內容和加密算法的信息,所以對 於開發第二類外掛成功的關鍵在於是否能正確分析遊戲包數據的結構、內容以及加密算法,雖然可以使用一些工具輔助分析,但是這還是一種堅苦而複雜的工作。

  後期部分工作主要是根據前期對遊戲的分析結果,使用大量的程序開發技術編寫外掛程序以實現對遊戲的控制或修改。如外掛程序為第一類外掛時,通常 會使用到鼠標模擬技術來實現遊戲角色的自動位置移動,使用鍵盤模擬技術來實現遊戲角色的自動攻擊。如外掛程序為第二類外掛時,通常會使用到擋截Sock和 擋截API函數技術,以擋截遊戲服務器傳來的網絡數據包並將數據包修改後封包後傳給遊戲服務器。另外,還有許多外掛使用對遊戲客戶端程序內存數據修改技術 以及遊戲加速技術。

  本文主要是針對開發遊戲外掛程序後期使用的程序開發技術進行探討,重點介紹的如下幾種在遊戲外掛中常使用的程序開發技術:

  ● 動作模擬技術:主要包括鍵盤模擬技術和鼠標模擬技術。

  ● 封包技術:主要包括擋截Sock技術和擋截API技術。

四、動作模擬技術

  我們在前面介紹過,幾乎所有的遊戲都有大量繁瑣和無聊的攻擊動作以增加玩家的功力,還有那些數不完的迷宮,這些好像已經成為了角色遊戲的代名 詞。現在,外掛可以幫助玩家從這些繁瑣而無聊的工作中擺脫出來,專注於遊戲情節的進展。外掛程序為了實現自動角色位置移動和自動攻擊等功能,需要使用到鍵 盤模擬技術和鼠標模擬技術。下面我們將重點介紹這些技術。

  1. 鼠標模擬技術  
  幾乎所有的遊戲中都使用了鼠標來改變角色的位置和方向,玩家僅用一個小小的鼠標,就可以使角色暢遊天下。那 麼,我們如何實現在沒有玩家的參與下角色也可以自動行走呢。其實實現這個並不難,僅僅幾個Windows API函數就可以搞定,讓我們先來認識認識這些API函數。

(1) 模擬鼠標動作API函數mouse_event,它可以實現模擬鼠標按下和放開等動作。

(2)、設置和獲取當前鼠標位置的API函數。獲取當前鼠標位置使用GetCursorPos()函數,設置當前鼠標位置使用 SetCursorPos()函數

  2.鍵盤模擬技術

  在很多遊戲中,不僅提供了鼠標的操作,而且還提供了鍵盤的操作,在對攻擊對象進行攻擊時還可以使用快捷鍵。為了使這些攻擊過程能夠自動進行,外 掛程序需要使用鍵盤模擬技術。像鼠標模擬技術一樣,Windows API也提供了一系列API函數來完成對鍵盤動作的模擬。

  模擬鍵盤動作API函數keydb_event,它可以模擬對鍵盤上的某個或某些鍵進行按下或放開的動作。

  3. 激活外掛

  就是讓你的外掛在遊戲中生效。畢竟做外掛是為了使用的目的。

五、封包技術

  通過對動作模擬技術的介紹,我們對遊戲外掛有了一定程度上的認識。這種動作模擬型遊戲外掛有一定的侷限性,它僅僅只能解決使用計算機代替人力完 成那麼有規律、繁瑣而無聊的遊戲動作。但是,隨著網絡遊戲的盛行和複雜度的增加,很多遊戲要求將客戶端動作信息及時反饋回服務器,通過服務器對這些動作信 息進行有效認證後,再向客戶端發送下一步遊戲動作信息,這樣動作模擬技術將失去原有的效應。為了更好地「外掛」這些遊戲,遊戲外掛程序也進行了升級換代, 它們將以前針對遊戲用戶界面層的模擬推進到數據通訊層,通過封包技術在客戶端擋截遊戲服務器發送來的遊戲控制數據包,分析數據包並修改數據包;同時還需按 照遊戲數據包結構創建數據包,再模擬客戶端發送給遊戲服務器,這個過程其實就是一個封包的過程。
  封包的技術是實現第二類遊戲外掛的最核心的技 術。封包技術涉及的知識很廣泛,實現方法也很多,如擋截WinXXXX、擋截XXX函數、擋截消息、 XXX驅動程序等。在此我們也不可能在此文中將所有的封包技術都進行詳細介紹,故選擇兩種在遊戲外掛程序中最常用的兩種方法:擋截WinXXXX和擋截 XX函數。

1. 擋截WinXXXX

  眾所周知,WinXXXX是Windows網絡編程接口,它工作於Windows應用層,它提供與底層傳輸協議無關的高層數據傳輸編程接口。在 Windows系統中,使用WinXXXX接口為應用程序提供基於TCP/IP協議的網絡訪問服務,這些服務是由 WXXXX32.DLL動態鏈接庫提供的函數庫來完成的。

2.擋截XXX

  擋截XXX技術與擋截WinXXXX技術在原理上很相似,但是前者比後者提供了更強大的功能。擋截WinXXX僅只能擋截WinXXXX接口函 數,而擋截XXX可以實現對應用程序調用的包括WinXXXX XXX函數在內的所有XXX函數的擋截。如果您的外掛程序僅打算對WinXXXX的函數進行擋截的話,您可以只選擇使用上小節介紹的擋截WinXXXX技 術。隨著大量外掛程序在功能上的擴展,它們不僅僅只提供對數據包的擋截,而且還對遊戲程序中使用的Windows XXX或其它DLL庫函數的擋截,以使外掛的功能更加強大。例如,可以通過擋截相關API函數以實現對非中文遊戲的漢化功能,有了這個利器,可以使您的外 掛程序無所不能了。

六、結束語

  除了以上介紹的幾種遊戲外掛程序常用的技術以外,在一些外掛程序中還使用了遊戲數據修改技術、遊戲加速技術等。在這篇文章裡,就不逐一介紹了。 隨著網絡的發展,遊戲外掛已經成為了一個不可忽視的問題,我曾經用一個次形容外掛:robber我想著並不為過,希望在今後的對外掛鬥爭中,玩家與商家可 以共同抵制,這才是去本的最好方法。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多