• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    網(wǎng)絡(luò)游戲外掛技術(shù)

    2013-11-30 03:13:40
    山東工業(yè)技術(shù) 2013年10期
    關(guān)鍵詞:鉤子外掛封包

    蘇 警

    (安徽電子信息職業(yè)技術(shù)學院,安徽 蚌埠233000)

    0 引言

    所謂游戲外掛,是一種游戲外部的輔助程序,它可以幫助玩家自動生成游戲動作、修改游戲的網(wǎng)絡(luò)數(shù)據(jù)封包等,使玩家以最少的時間和精力完成游戲中的各種任務(wù)。隨著網(wǎng)絡(luò)游戲的不斷升溫,游戲外掛作為其附屬品也得到了迅猛的發(fā)展。從最初的鼠標鍵盤模擬和變速齒輪技術(shù)發(fā)展到擋截Sock、擋截API等高端技術(shù)的應用。

    事物都有兩面性,游戲外掛也不例外。一方面,它可以使玩家從機械的、重復的操作中解放出來,使游戲更加人性化,娛樂化。另一方面,一些惡意外掛篡改游戲數(shù)據(jù),欺騙服務(wù)器,嚴重破壞了游戲的公平性,使玩家大量流失。因此,外掛的開發(fā)應僅限于研究和學習編程技術(shù)之用。

    1 外掛技術(shù)綜述

    外掛的種類紛繁復雜,功能也多種多樣。針對同一款網(wǎng)絡(luò)游戲的外掛甚至多達幾十種,功能相同的外掛實現(xiàn)起來也有若干種不同的技術(shù),例如本文下面要談到的某網(wǎng)絡(luò)斗地主游戲記牌器外掛的實現(xiàn)方式至少有三種,通過分析屏幕撲克牌的圖片、通過讀取游戲在本地機所使用的內(nèi)存空間、截獲并分析數(shù)據(jù)封包。因此對網(wǎng)游外掛做一個科學的分類顯得十分必要。按照外掛所針對的游戲類型,可以把其分為兩大類即,模擬玩家鼠標、鍵盤操作的動作模擬類外掛和截獲數(shù)據(jù)封包,提取或修改其中數(shù)據(jù)的封包類外掛。下面對兩類外掛所采用的技術(shù)進行詳細說明。

    1.1 動作模擬類外掛

    動作模擬類外掛可以在沒有人為干預的情況下,自動控制游戲中的角色,使其四處行走或者發(fā)動攻擊。此類外掛看似復雜,其實原理非常簡單。游戲中角色的行動是靠鼠標與鍵盤控制,此類外掛就是調(diào)用相關(guān)的API函數(shù),來模擬玩家對鼠標和鍵盤的操作,從而控制游戲中的角色。

    1.1.1 鼠標模擬技術(shù)

    鼠標的操作包含以下幾種,點擊左鍵、點擊右鍵、點擊中鍵、移動鼠標改變相應窗體中指針的位置。下面介紹實現(xiàn)以上操作所需要的API函數(shù)。

    1)mouse_event函數(shù),模擬鼠標發(fā)出按下和放開左右鍵的動作,其格式如下:

    其中,dwFlags表示各種鼠標動作,如MOUSEEVENTF_LEFTDOWN表示模擬按下鼠標左鍵、MOUSEEVENTF_LEFTUP表示模擬放開鼠標左鍵、MOUSEEVENTF_MOVE表示模擬鼠標移動事件等。

    游戲中角色的移動一般是將鼠標移動到目的地,然后按下鼠標左鍵來完成的。下面利用上面介紹的API函數(shù)來模擬角色的移動。

    CPoint oldPoint,newPoint;

    GetCursorPos(&oldPoint);//保存當前鼠標位置

    newPoint=SetPoint(oldPoint);//SetPoint為自編的坐標設(shè)置函數(shù)

    SetCursorPos(newPoint.x,newPoint.y);//設(shè)置目的地位置

    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//模擬按下鼠標左鍵

    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//模擬放開鼠標左鍵

    1.1.2 鍵盤模擬技術(shù)

    鍵盤的操作比較簡單,只有按鍵的按下與放開兩種。通過keydb_event函數(shù)模擬鍵盤動作,其格式如下:

    下面利用該函數(shù)來模擬按下Ctrl+C的操作。

    keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0);//按下CTRL鍵

    keybd_event(0x43,MapVirtualKey(0x43,0),0,0);//鍵下C鍵

    keybd_event(0x43,MapVirtualKey(0x43,0),KEYEVENTF_KEYUP,0);//放開C鍵

    keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),

    KEYEVENTF_KEYUP,0);//放開CTRL鍵

    其中,MapVirtualKey函數(shù)功能是在虛擬鍵值與掃描碼之間進行轉(zhuǎn)換。

    1.2 封包類外掛

    網(wǎng)絡(luò)游戲最大的特點在于分布在各地的玩家之間可以相互通信,實現(xiàn)這個功能的關(guān)鍵是玩家在游戲中所做的任何操作,都會以數(shù)據(jù)封包的形式發(fā)送至服務(wù)器,服務(wù)器經(jīng)過處理后再把數(shù)據(jù)封包反饋給游戲中的玩家們。

    封包類外掛利用網(wǎng)絡(luò)游戲這個特點,在客戶端攔截服務(wù)器發(fā)送來的數(shù)據(jù)封包,采用特定的方法對封包內(nèi)的數(shù)據(jù)進行分析,最后按照需要修改封包內(nèi)的數(shù)據(jù)模擬客戶端發(fā)送至服務(wù)器。此類外掛實現(xiàn)的關(guān)鍵技術(shù)涉及兩個方面:封包截獲與封包數(shù)據(jù)的分析。

    1.2.1 封包截獲

    API Hook技術(shù)是封包截獲的核心,是指攔截API調(diào)用的過程。API Hook技術(shù)的應用十分廣泛,如實時翻譯系統(tǒng)中屏幕取詞功能。API Hook一般由兩部分組成:Hook服務(wù)器和Hook驅(qū)動器。Hook服務(wù)器一般以exe的形式出現(xiàn),主要負責把Hook驅(qū)動器注入到目標進程或模塊中。Hook驅(qū)動器一般以DLL的形式出現(xiàn),主要負責API的攔截工作。至此,又涉及到兩個核心技術(shù):DLL注入技術(shù)與API攔截技術(shù)。

    圖1 API Hook系統(tǒng)實現(xiàn)結(jié)構(gòu)[2]

    1)DLL 注入技術(shù)

    DLL的注入方法有很多種,由于篇幅有限,只介紹兩種比較常用的方法,即利用全局鉤子進行DLL注入和利用遠程線程進行DLL注入。下面分別介紹。

    全局鉤子必須在DLL中也就是Hook驅(qū)動器中實現(xiàn),原理是當待注入進程在接收到某一消息時,消息不會先到這個進程,而是先到DLL中的鉤子函數(shù)中,由鉤子先處理這個消息后再傳遞到接收這個消息的進程中。也就是說,當待注入進程的消息被一個鉤子截獲時,相當于這個進程調(diào)用了DLL中的鉤子函數(shù),系統(tǒng)便會強制把DLL文件映射到這個進程的地址空間中,供這個進程使用。以上是利用全局鉤子進行DLL注入的全過程??梢酝ㄟ^SetWindowsHookEx函數(shù)在系統(tǒng)中安裝鉤子,通過UnHookWindowsHookEx卸載鉤子。

    利用遠程線程進行DLL注入的步驟:利用OpenProcess函數(shù)取得遠程進程的進程ID;利用VirtualAllocEx函數(shù)在遠程進程空間中分配一段內(nèi)存用來存放要注入的DLL完整路徑;利用WriteProcessMemory函數(shù)將要注入的DLL的路徑寫到剛才分配的遠程進程空間;利用GetProcAddress函數(shù)從Kernel32.dll中取得LoadLibray的地址;利用CreateRemoteThread函數(shù)以從Kernel32.dll中取得的LoadLibrary函數(shù)的地址為線程函數(shù)的地址,以我們要注入的DLL文件名為參數(shù),創(chuàng)建遠程線程。

    2)API攔截技術(shù)

    API攔截的實現(xiàn)方法也有多種,本文重點介紹兩種最為常用的技術(shù),即擋截Winsock和擋截API函數(shù)。

    Winsock是Windows網(wǎng)絡(luò)編程接口。在Windows系統(tǒng)中,使用Winsock接口為應用程序提供基于TCP/IP協(xié)議的網(wǎng)絡(luò)訪問服務(wù),而這些服務(wù)是由 Wsock32.DLL提供的函數(shù)庫來完成的。因此,任何Windows基于TCP/IP的應用程序都必須通過Winsock接口訪問網(wǎng)絡(luò)。擋截Winsock的原理是由自己寫一個與原有進程調(diào)用的Wsock32.DLL具有相同接口函數(shù)的DLL,再用重寫的DLL替換原有的DLL。在替換的過程中,可以對感興趣的函數(shù)進行擋截,放入外掛控制代碼,而對其它不感興趣的函數(shù),則以函數(shù)轉(zhuǎn)發(fā)的形式調(diào)用原有Wsock32.DLL中的函數(shù)。

    實現(xiàn)擋截API的常用方法是改寫執(zhí)行代碼,主要步驟是:利用GetProcAddress函數(shù)獲取所要擋截的API函數(shù)的地址;利用VirtualQuery函數(shù)查詢關(guān)于本進程內(nèi)虛擬地址頁的信息,利用VirtualProtect函數(shù)改變本進程內(nèi)虛擬地址頁的保護屬性;利用WriteProcessMemory函數(shù)修改原API函數(shù)執(zhí)行代碼的前8個字節(jié),使得對該API函數(shù)的調(diào)用能轉(zhuǎn)向自定義的函數(shù)調(diào)用。除此之外,還可以通過改寫PE文件的輸入地址表來實現(xiàn)擋截API的功能,有關(guān)此方法可以參見MSDN的相關(guān)內(nèi)容。

    1.2.2 封包數(shù)據(jù)分析

    封包數(shù)據(jù)分析的過程非常復雜,需要分析人員有極大的耐心和毅力。首先,封包內(nèi)數(shù)據(jù)的格式很復雜,需要經(jīng)過反復的試驗與分析,才能得出數(shù)據(jù)中每個字節(jié)在游戲中所表示的含意。其次,絕大部分游戲?qū)Ψ獍鼉?nèi)的數(shù)據(jù)進行了加密處理。在網(wǎng)絡(luò)游戲出現(xiàn)的初期,只要掌握幾種簡單的加密解密算法,就可以通過對封包內(nèi)數(shù)據(jù)的分析得出封包的加密解密算法。但隨著機器性能的提高與網(wǎng)絡(luò)帶寬的提升,游戲開發(fā)商對封包的加密與解密算法設(shè)計的越來越復雜,單純的通過封包內(nèi)數(shù)據(jù)的分析已經(jīng)很難推出加密解密算法。目前破解封包加密與解密算法的方法主要是通過動態(tài)調(diào)試技術(shù)來實現(xiàn)的。其原理是首先通過動態(tài)調(diào)試跟蹤并取出加密與解密算法的代碼段,然后再通過分析這些代碼最終得出結(jié)論。動態(tài)調(diào)試主要是跟蹤代碼的執(zhí)行,一般跟蹤的起點可以是windows消息、socket中的send與recv等函數(shù)。動態(tài)調(diào)試工具一般采用OllyDbg,softice等工具。動態(tài)調(diào)試工具所跟蹤的代碼都是以匯編語言的形式反饋給用戶,匯編語言相對高級語言難以讀懂,一般可以通過代碼反推導將匯編語言轉(zhuǎn)換為相應的高級語言,步驟如下:首先,可以將匯編碼寫成三元表達碼,其次,將代碼中的轉(zhuǎn)移指令轉(zhuǎn)換為條件語句或循環(huán)語句,再次,將代碼中的變量進行迭代,最后,進行變量形式轉(zhuǎn)換與語句形式轉(zhuǎn)換。當然我們對代碼進行動態(tài)調(diào)試的目的是為了掌握封包的加密算法,進而對封包中的數(shù)據(jù)進行分析,通過大量的實驗,最終讀懂封包中重要數(shù)據(jù)的含意。為后面的編程工作做好準備。

    2 結(jié)束結(jié)

    外掛程序?qū)W(wǎng)絡(luò)游戲的環(huán)境安全和健康發(fā)展有著極大的影響,防治外掛必然要對外掛的實現(xiàn)技術(shù)有所了解。但防治外掛僅靠技術(shù)手段是很難實現(xiàn)的,因為在網(wǎng)絡(luò)世界沒有什么是絕對安全絕對保密的。技術(shù)手段只能是盡可能的加大外掛制作的難度,拖延外掛開發(fā)的時間而已,并不可能完全杜絕外掛。因此外掛的防治必須要多管齊下,尤其是加強游戲信用體制的建設(shè),完善相應的法律法規(guī),以促進網(wǎng)絡(luò)游戲更好,更快的發(fā)展。

    [1]劉克勝,王忠壽.API Hook 關(guān)鍵技術(shù)解析[J].網(wǎng)絡(luò)安全,2006,22(8):48-50.

    [2]周毅.探討游戲外掛應用技術(shù)[J].中文信息,2003(10):22-25.

    [3]王遠.Windows 系統(tǒng) API函數(shù)攔截技術(shù)研究[J].微計算機信息,2006,22(10):224-226.

    猜你喜歡
    鉤子外掛封包
    中藥封包在急診老年急性胃腸炎患者中的臨床應用
    槍械的“外掛神器”
    護膚 巧用保鮮膜
    無沖突規(guī)則校園網(wǎng)絡(luò)安全系統(tǒng)的設(shè)計
    門窗(2019年12期)2019-04-20 16:06:52
    誰和誰好
    快樂語文(2018年15期)2018-11-29 10:23:17
    戰(zhàn)斗機武器外掛投放與內(nèi)埋投放比較
    幸福的一家
    《脈望館鈔校本古今雜劇》穿關(guān)之“鉤子困帶”考
    中華戲曲(2017年2期)2017-02-16 06:53:24
    精鉤子
    金山(2016年5期)2016-05-30 14:18:17
    NS2條件網(wǎng)絡(luò)性能分析實踐
    電腦與電信(2013年1期)2013-08-06 02:14:52
    江孜县| 孝昌县| 囊谦县| 邯郸市| 察哈| 宜君县| 永丰县| 肥城市| 孝义市| 内江市| 南宫市| 凌源市| 平凉市| 普兰县| 蚌埠市| 金坛市| 车险| 济阳县| 彰化市| 佳木斯市| 潞城市| 兰溪市| 芦山县| 措美县| 莫力| 龙南县| 璧山县| 绵竹市| 勐海县| 南江县| 西昌市| 金门县| 利川市| 邹平县| 新安县| 江川县| 南投县| 安国市| 吴江市| 阿城市| 根河市|