游戲輔助制作原理_第1頁
游戲輔助制作原理_第2頁
游戲輔助制作原理_第3頁
游戲輔助制作原理_第4頁
游戲輔助制作原理_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、游戲輔助制作原理目錄一、前言1二、認識輔助1三、輔助技術綜述3動作模擬技術4封包技術16結束語25前言游戲外輔程序,可以協(xié)助玩家自動產(chǎn)生游戲動作、修改游戲網(wǎng)絡數(shù)據(jù)包以及修改游戲內(nèi)存數(shù)據(jù)等,以實現(xiàn)玩家用最少的時間和金錢去完成功力升級和過關斬將。雖然,現(xiàn)在對游戲輔助程序的“合法”身份眾說紛紜,在這里我不想對此發(fā)表任何個人意見,讓時間去說明一切吧。不管游戲輔助程序是不是“合法”身份,但是它卻是具有一定的技術含量的,在這些小小程序中使用了許多高端技術,如攔截Sock技術、攔截API技術、模擬鍵盤與鼠標技術、直接修改程序內(nèi)存技術等等。本文將對常見的游戲輔助中使用的技術進行全面剖析。二、認識輔助游戲輔助的

2、歷史可以追溯到單機版游戲時代,只不過當時它使用了另一個更通俗易懂的名字游戲修改器。它可以在游戲中追蹤鎖定游戲主人公的各項能力數(shù)值。這樣玩家在游戲中可以達到主角不掉血、不耗費魔法、不消耗金錢等目的。這樣降低了游戲的難度,使得玩家更容易通關。隨著網(wǎng)絡游戲的時代的來臨,游戲輔助在原有的功能之上進行了新的發(fā)展,它變得更加多種多樣,功能更加強大,操作更加簡單,以至有些游戲的輔助已經(jīng)成為一個體系,比如石器時代,輔助品種達到了幾十種,自動戰(zhàn)斗、自動行走、自動練級、自動補血、加速、不遇敵、原地遇敵、快速增加經(jīng)驗值、按鍵精靈幾乎無所不包。游戲輔助的設計主要是針對于某個游戲開發(fā)的,我們可以根據(jù)它針對的游戲的類型可

3、大致可將輔助分為兩種大類。一類是將游戲中大量繁瑣和無聊的攻擊動作使用輔助自動完成,以幫助玩家輕松搞定攻擊對象并可以快速的增加玩家的經(jīng)驗值。比如在龍族中有一種工作的設定,玩家的工作等級越高,就可以駕馭越好的裝備。但是增加工作等級卻不是一件有趣的事情,毋寧說是重復枯燥的機械勞動。如果你想做法師用的杖,首先需要做基本工作-?砍樹??硺涞姆椒ê芎唵危谝豢么髽淝安煌5狞c鼠標就可以了,每10000的經(jīng)驗升一級。這就意味著玩家要在大樹前不停的點擊鼠標,這種無聊的事情通過"按鍵精靈"就可以解決。輔助的"按鍵精靈"功能可以讓玩家擺脫無趣的點擊鼠標的工作。另一類是由輔助程

4、序產(chǎn)生欺騙性的網(wǎng)絡游戲封包,并將這些封包發(fā)送到網(wǎng)絡游戲服器,利用這些虛假信息欺騙服務器進行游戲數(shù)值的修改,達到修改角色能力數(shù)值的目的。這類輔助程序針對性很強,一般在設計時都是針對某個游戲某個版本來做的,因為每個網(wǎng)絡游戲服務器與客戶端交流的數(shù)據(jù)包各不相同,輔助程序必須要對欺騙的網(wǎng)絡游戲服務器的數(shù)據(jù)包進行分析,才能產(chǎn)生服務器識別的數(shù)據(jù)包。這類輔助程序也是當前最流利的一類游戲輔助程序。另外,現(xiàn)在很多輔助程序功能強大,不僅實現(xiàn)了自動動作代理和封包功能,而且還提供了對網(wǎng)絡游戲的客戶端程序的數(shù)據(jù)進行修改,以達到欺騙網(wǎng)絡游戲服務器的目的。我相信,隨著網(wǎng)絡游戲商家的反輔助技術的進展,游戲輔助將會產(chǎn)生更多更優(yōu)秀

5、的技術,讓我們期待著看場技術大戰(zhàn)吧三、輔助技術綜述可以將開發(fā)游戲輔助程序的過程大體上劃分為兩個部分:前期部分工作是對輔助的主體游戲進行分析,不同類型的輔助分析主體游戲的內(nèi)容也不相同。如輔助為上述談到的輔助類型中的第一類時,其分析過程常是針對游戲的場景中的攻擊對象的位置和分布情況進行分析,以實現(xiàn)輔助自動進行攻擊以及位置移動。如輔助為輔助類型中的第二類時,其分析過程常是針對游戲服務器與客戶端之間通訊包數(shù)據(jù)的結構、內(nèi)容以及加密算法的分析。因網(wǎng)絡游戲公司一般都不會公布其游戲產(chǎn)品的通訊包數(shù)據(jù)的結構、內(nèi)容和加密算法的信息,所以對于開發(fā)第二類輔助成功的關鍵在于是否能正確分析游戲包數(shù)據(jù)的結構、內(nèi)容以及加密算法

6、,雖然可以使用一些工具輔助分析,但是這還是一種堅苦而復雜的工作。后期部分工作主要是根據(jù)前期對游戲的分析結果,使用大量的程序開發(fā)技術編寫輔助程序以實現(xiàn)對游戲的控制或修改。如輔助程序為第一類輔助時,通常會使用到鼠標模擬技術來實現(xiàn)游戲角色的自動位置移動,使用鍵盤模擬技術來實現(xiàn)游戲角色的自動攻擊。如輔助程序為第二類輔助時,通常會使用到擋截Sock和擋截API函數(shù)技術,以擋截游戲服務器傳來的網(wǎng)絡數(shù)據(jù)包并將數(shù)據(jù)包修改后封包后傳給游戲服務器。另外,還有許多輔助使用對游戲客戶端程序內(nèi)存數(shù)據(jù)修改技術以及游戲加速技術。本文主要是針對開發(fā)游戲輔助程序后期使用的程序開發(fā)技術進行探討,重點介紹的如下幾種在游戲輔助中常使

7、用的程序開發(fā)技術:動作模擬技術:主要包括鍵盤模擬技術和鼠標模擬技術。封包技術:主要包括擋截Sock技術和擋截API技術。動作模擬技術我們在前面介紹過,幾乎所有的游戲都有大量繁瑣和無聊的攻擊動作以增加玩家的功力,還有那些數(shù)不完的迷宮,這些好像已經(jīng)成為了角色游戲的代名詞?,F(xiàn)在,輔助可以幫助玩家從這些繁瑣而無聊的工作中擺脫出來,專注于游戲情節(jié)的進展。輔助程序為了實現(xiàn)自動角色位置移動和自動攻擊等功能,需要使用到鍵盤模擬技術和鼠標模擬技術。下面我們將重點介紹這些技術并編寫一個簡單的實例幫助讀者理解動作模擬技術的實現(xiàn)過程。1.鼠標模擬技術幾乎所有的游戲中都使用了鼠標來改變角色的位置和方向,玩家僅用一個小小

8、的鼠標,就可以使角色暢游天下。那么,我們?nèi)绾螌崿F(xiàn)在沒有玩家的參與下角色也可以自動行走呢。其實實現(xiàn)這個并不難,僅僅幾個WindowsAPI函數(shù)就可以搞定,讓我們先來認識認識這些API函數(shù)。(1)模擬鼠標動作API函數(shù)mouse_event,它可以實現(xiàn)模擬鼠標按下和放開等動作。VOIDmouse_event(DWORDdwFlags,/鼠標動作標識。DWORDdx,/鼠標水平方向位置。DWORDdy,/鼠標垂直方向位置。DWORDdwData,/鼠標輪子轉動的數(shù)量。DWORDdwExtraInfo/一個關聯(lián)鼠標動作輔加信息。);其中,dwFlags表示了各種各樣的鼠標動作和點擊活動,它的常用取值如

9、下:MOUSEEVENTF_MOW模擬鼠標移動事件。MOUSEEVENTFLEFTDOWN(擬按下鼠標左鍵。MOUSEEVENTF_LEFTUP模擬放開鼠標左鍵。MOUSEEVENTFRIGHTDOWN擬按下鼠標右鍵。MOUSEEVENTFRIGHTUP模擬放開鼠標右鍵。MOUSEEVENTF_MIDDLEDOWN擬按下鼠標中鍵。MOUSEEVENTF_MIDDLEUP模擬放開鼠標中鍵。(2)、設置和獲取當前鼠標位置的API函數(shù)。獲取當前鼠標位置使用GetCursorPos()函數(shù),設置當前鼠標位置使用SetCursorPos()函數(shù)。BOOLGetCursorPos(LPPOINTlpPoi

10、nt/返回鼠標的當前位置。);BOOLSetCursorPos(intX,/鼠標的水平方向位置。intY/鼠標的垂直方向位置。);通常游戲角色的行走都是通過鼠標移動至目的地,然后按一下鼠標的按鈕就搞定了。下面我們使用上面介紹的API函數(shù)來模擬角色行走過程。CPointoldPoint,newPoint;GetCursorPos(&oldPoint);/保存當前鼠標位置。newPoint.x=oldPoint.x+40;newPoint.y=oldPoint.y+10;SetCursorPos(newPoint.x,newPoint.y);/設置目的地位置。mouse_event(MOU

11、SEEVENTF_RIGHTDOWN,0,0,0,0);Bl按下鼠標右鍵。mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);幀擬放開鼠標右鍵。2 鍵盤模擬技術在很多游戲中,不僅提供了鼠標的操作,而且還提供了鍵盤的操作,在對攻擊對象進行攻擊時還可以使用快捷鍵。為了使這些攻擊過程能夠自動進行,輔助程序需要使用鍵盤模擬技術。像鼠標模擬技術一樣,WindowsAPI也提供了一系列API函數(shù)來完成對鍵盤動作的模擬。模擬鍵盤動作API函數(shù)keydb_event,它可以模擬對鍵盤上的某個或某些鍵進行按下或放開的動作。VOIDkeybd_event(BYTEbVk,/虛擬鍵值。

12、BYTEbScan,/硬件掃描碼。DWORDdwFlags,/動作標識。DWORDdwExtraInfo/與鍵盤動作關聯(lián)的輔加信息。);其中,bVk表示虛擬鍵值,其實它是一個BYTE類型值的宏,其取值范圍為1-254。有關虛擬鍵值表請在MSDNt使用關鍵字“Virtual-KeyCodes”查找相關資料。bScan表示當鍵盤上某鍵被按下和放開時,鍵盤系統(tǒng)硬件產(chǎn)生的掃描碼,我們可以MapVirtualKey()函數(shù)在虛擬鍵值與掃描碼之間進行轉換。dwFlags表示各種樣的鍵盤動作,它有兩種取值:KEYEVENTF_EXTENDEDKEYEYEVENTF_KEYUP責任編輯:下面我們使用一段代碼實

13、現(xiàn)在游戲中按下Shift+R快捷鍵對攻擊對象進行攻擊。keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0);按下CTRL8。keybd_event(0x52,MapVirtualKey(0x52,0),0,0);/鍵下R鍵。keybd_event(0x52,MapVirtualKey(0x52,0),KEYEVENTF_KEYUP,0);放開R鍵。keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),KEYEVENTF_KEYUP,0);放開CTR%3 激活輔助上面介紹的鼠標和鍵盤模擬技術

14、實現(xiàn)了對游戲角色的動作部分的模擬,但要想輔助能工作于游戲之上,還需要將其與游戲的場景窗口聯(lián)系起來或者使用一個激活鍵,就象按鍵精靈的那個激活鍵一樣。我們可以用GetWindow函數(shù)來枚舉窗口,也可以用Findwindow函數(shù)來查找特定的窗口。另外還有個FindWindowEx函數(shù)可以找到窗口的子窗口,當游戲切換場景的時候我們可以用FindWindowEx來確定些當前窗口的特征,從而判斷是否還在這個場景,方法很多了,比如可以GetWindowInfo來確定一些東,比如當查找不到某個按鈕的時候就說明游戲場景已經(jīng)切換了等等辦法。當使用激活鍵進行關聯(lián),需要使用Hook技術開發(fā)一個全局鍵盤鉤子,在這里就不

15、具體介紹全局鉤子的開發(fā)過程了,在后面的實例中我們將會使用到全局鉤子,到時將學習到全局鉤子的相關知識。4 實例實現(xiàn)通過上面的學習,我們已經(jīng)基本具備了編寫動作式游戲輔助的能力了。下面我們將創(chuàng)建一個畫筆程序輔助,它實現(xiàn)自動移動畫筆字光標的位置并寫下一個紅色的"R'字。以這個實例為基礎,加入相應的游戲動作規(guī)則,就可以實現(xiàn)一個完整的游戲輔助。這里作者不想使用某個游戲作為例子來開發(fā)輔助(因沒有游戲商家的授權?。。缱x者感興趣的話可以找一個游戲試試,最好僅做測試技術用。首先,我們需要編寫一個全局鉤子,使用它來激活輔助,激活鍵為F10o創(chuàng)建全局鉤子步驟如下:(1) .選擇MFCAppWiz

16、ard(DLL創(chuàng)建項目ActiveKey,并選擇MFCExtensionDLL(共享MFC§貝)類型。(2) .插入新文件ActiveKey.h,在其中輸入如下代碼:#ifndef_KEYDLL_H#define_KEYDLL_HclassAFX_EXT_CLASSCKeyHook:publicCObjectpublic:CKeyHook();CKeyHook();HHOOKStart();/安裝鉤子BOOLStop();/卸載鉤子;#endif(3) .在ActiveKey.cpp文件中加入聲明#includeActiveKey.h。(4) .在ActiveKey.cpp文件中加入

17、共享數(shù)據(jù)段,代碼如下:/Shareddatasection#pragmadata_seg("sharedata")HHOOKglhHook=NULL;/鉤子句柄。HINSTANCEglhInstance=NULL;/DLL實例句柄。#pragmadata_seg()(5) .在ActiveKey.def文件中設置共享數(shù)據(jù)段屬性,代碼如下:SETCTIONSshareddataREADWRITESHARED(6) .在ActiveKey.cpp文件中加入CkeyHook類的實現(xiàn)代碼和鉤子函數(shù)代碼:/鍵盤鉤子處理函數(shù)。extern"C"LRESULTWINA

18、PIKeyboardProc(intnCode,WPARAMwParam,LPARAMlParam)if(nCode>=0)if(wParam=0X79)/當按下F10鍵時,激活輔助。/輔助實現(xiàn)代碼。CPointnewPoint,oldPoint;GetCursorPos(&oldPoint);newPoint.x=oldPoint.x+40;newPoint.y=oldPoint.y+10;SetCursorPos(newPoint.x,newPoint.y);mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0)蟆擬按下鼠標左鍵。mouse_eve

19、nt(MOUSEEVENTF_LEFTUP,0,0,0,0);股擬放開鼠標左鍵。keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),0,0);按下SHIFT鍵。keybd_event(0x52,MapVirtualKey(0x52,0),0,0);按下R鍵。keybd_event(0x52,MapVirtualKey(0x52,0),KEYEVENTF_KEYUP,0);放開R鍵。keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),KEYEVENTF_KEYUP,0);/放開SHIFT鍵。SetCursorPo

20、s(oldPoint.x,oldPoint.y);returnCallNextHookEx(glhHook,nCode,wParam,lParam);CKeyHook:CKeyHook()CKeyHook:CKeyHook()if(glhHook)Stop();/安裝全局鉤子。HHOOKCKeyHook:Start()glhHook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,glhInstance,0);/設置鍵盤鉤子。returnglhHook;/卸載全局鉤子。BOOLCKeyHook:Stop()BOOLbResult=TRUE;if(glhHoo

21、k)bResult=UnhookWindowsHookEx(glhHook);/卸載鍵盤鉤子。returnbResult;(7) .修改DllMain函數(shù),代碼如下:extern"C"intAPIENTRYDllMain(HINSTANCEhInstance,DWORDdwReason,LPVOIDlpReserved)/如果使用lpReserved參數(shù)則刪除下面這行UNREFERENCED_PARAMETER(lpReserved);if(dwReason=DLL_PROCESS_ATTACH)TRACE0("NOtePadHOOK.DLLInitializin

22、g!");/擴展DLL僅初始化一次if(!AfxInitExtensionModule(ActiveKeyDLL,hInstance)return0;newCDynLinkLibrary(ActiveKeyDLL);/把DLL加入動態(tài)MFC1庫中glhInstance=hInstance;插入保存DLL實例句柄elseif(dwReason=DLL_PROCESS_DETACH)TRACE0("NotePadHOOK.DLLTerminating!");/終止這個鏈接庫前調(diào)用它AfxTermExtensionModule(ActiveKeyDLL);return1

23、;(8) .編譯項目ActiveKey,生成ActiveKey.DLL和ActiveKey.lib。接著,我們還需要創(chuàng)建一個外殼程序?qū)⑷帚^子安裝了Windows系統(tǒng)中,這個外殼程序編寫步驟如下:(1). 創(chuàng)建一個對話框模式的應用程序,項目名為Simulate。(2) .在主對話框中加入一個按鈕,使用ClassWizard為其創(chuàng)建CLICK事件。(3) .將ActiveKey項目Debug目錄下的ActiveKey.DLL和ActiveKey.lib拷貝到Simulate項目目錄下。(4) .從“工程”菜單中選擇“設置”,彈出ProjectSetting對話框,選擇Link標簽,在“對象/庫模

24、塊”中輸入ActiveKey.lib。(5) .將ActiveKey項目中的ActiveKey.h頭文件加入到Simulate項目中,并在Stdafx.h中加入#includeativeKey.h。(6) .在按鈕單擊事件函數(shù)輸入如下代碼:voidCSimulateDlg:OnButton1()/TODO:Addyourcontrolnotificationhandlercodehereif(!bSetup)m_hook.Start();/激活全局鉤子。elsem_hook.Stop();/撤消全局鉤子。bSetup=!bSetup;(7) .編譯項目,并運行程序,單擊按鈕激活輔助。責任編輯:

25、(8) .啟動畫筆程序,選擇文本工具并將筆的顏色設置為紅色,將鼠標放在任意位置后,按F10鍵,畫筆程序自動移動鼠標并寫下一個紅色的大寫R圖一展示了按F10鍵前的畫筆程序的狀態(tài),圖二展示了按F10鍵后的畫筆程序的狀態(tài)。封包技術通過對動作模擬技術的介紹,我們對游戲輔助有了一定程度上的認識,也學會了使用動作模擬技術來實現(xiàn)簡單的動作模擬型游戲輔助的制作。這種動作模擬型游戲輔助有一定的局限性,它僅僅只能解決使用計算機代替人力完成那么有規(guī)律、繁瑣而無聊的游戲動作。但是,隨著網(wǎng)絡游戲的盛行和復雜度的增加,很多游戲要求將客戶端動作信息及時反饋回服務器,通過服務器對這些動作信息進行有效認證后,再向客戶端發(fā)送下一

26、步游戲動作信息,這樣動作模擬技術將失去原有的效應。為了更好地“輔助”這些游戲,游戲輔助程序也進行了升級換代,它們將以前針對游戲用戶界面層的模擬推進到數(shù)據(jù)通訊層,通過封包技術在客戶端擋截游戲服務器發(fā)送來的游戲控制數(shù)據(jù)包,分析數(shù)據(jù)包并修改數(shù)據(jù)包;同時還需按照游戲數(shù)據(jù)包結構創(chuàng)建數(shù)據(jù),再模擬客戶端發(fā)送給游戲服務器,這個過程其實就是一個封包的過程。封包的技術是實現(xiàn)第二類游戲輔助的最核心的技術。封包技術涉及的知識很廣泛,實現(xiàn)方法也很多,如擋截WinSock擋截API函數(shù)、擋截消息、VxD驅(qū)動程序等。在此我們也不可能在此文中將所有的封包技術都進行詳細介紹,故選擇兩種在游戲輔助程序中最常用的兩種方法:擋截Wi

27、nSock和擋截API函數(shù)。(1) 擋截WinSock眾所周知,Winsock是Windows網(wǎng)絡編程接口,它工作于Windows應用層,它提供與底層傳輸協(xié)議無關的高層數(shù)據(jù)傳輸編程接口。在Windows系統(tǒng)中,使用WinSock接口為應用程序提供基于TCP/IP協(xié)議的網(wǎng)絡訪問服務,這些服務是由Wsock32.DLL動態(tài)鏈接庫提供的函數(shù)庫來完成的。由上說明可知,任何Windows基于TCP/IP的應用程序都必須通過WinSock接口訪問網(wǎng)絡,當然網(wǎng)絡游戲程序也不例外。由此我們可以想象一下,如果我們可以控制WinSock接口的話,那么控制游戲客戶端程序與服務器之間的數(shù)據(jù)包也將易如反掌。按著這個思路

28、,下面的工作就是如何完成控制WinSock接口了。由上面的介紹可知,WinSock接口其實是由一個動態(tài)鏈接庫提供的一系列函數(shù),由這些函數(shù)實現(xiàn)對網(wǎng)絡的訪問。有了這層的認識,問題就好辦多了,我們可以制作一個類似的動態(tài)鏈接庫來代替原WinSock接口庫,在其中實現(xiàn)WinSock32.dll中實現(xiàn)的所有函數(shù),并保證所有函數(shù)的參數(shù)個數(shù)和順序、返回值類型都應與原庫相同。在這個自制作的動態(tài)庫中,可以對我們感興趣的函數(shù)(如發(fā)送、接收等函數(shù))進行擋截,放入輔助控制代碼,最后還繼續(xù)調(diào)用原WinSock庫中提供的相應功能函數(shù),這樣就可以實現(xiàn)對網(wǎng)絡數(shù)據(jù)包的擋截、修改和發(fā)送等封包功能。下面重點介紹創(chuàng)建擋截WinSock

29、輔助程序的基本步驟:(1)倉1J建DLL項目,選擇Win32Dynamic-LinkLibrary,再選擇AnemptyDLLproject(2) 新建文件wsock32.h,按如下步驟輸入代碼: 加入相關變量聲明:HMODULEhModule=NULL;/模塊句柄/charbuffer1000;/緩沖區(qū)FARPROCproc;/函數(shù)入口指針 定義指向原WinSock庫中的所有函數(shù)地址的指針變量,因WinSock庫共提供70多個函數(shù),限于篇,在此就只選擇幾個常用的函數(shù)列出,有關這些庫函數(shù)的說明可參考MSDN相關內(nèi)容。/定義指向原WinSock庫函數(shù)地址的指針變量。SOCKET(_stdcall

30、*socket1)(int,int,int);/創(chuàng)建Sock函數(shù)。int(stdcall*WSAStartup1)(WORD,LPWSADATA);初始化WinSock庫函數(shù)。int(stdcall*WSACleanup1)();/清除WinSock庫函數(shù)。int(_stdcall*recv1)(SOCKET,charFAR*,int,int);/接收數(shù)據(jù)函數(shù)。int(_stdcall*send1)(SOCKET,constchar*,int,int);/發(fā)送數(shù)據(jù)函數(shù)。int(_stdcall*connect1)(SOCKET,conststructsockaddr*,int);/創(chuàng)建連接函數(shù)

31、。綁定函數(shù)。int(_stdcall*bind1)(SOCKET,conststructsockaddr*,int);/獲取原WinSock庫中的所有函數(shù)的地址并保存,下面僅列出部分代碼其它函數(shù)地址指針的定義略。(3) 新建wsock32.cpp文件,按如下步驟輸入代碼: 加入相關頭文件聲明:#include#include#include"wsock32.h" 添加DllMain函數(shù),在此函數(shù)中首先需要加載原WinSock庫,并獲取此庫中所有函數(shù)的地址。代碼如下:BOOLWINAPIDllMain(HANDLEhInst,ULONGul_reason_for_call,L

32、PVOIDlpReserved)if(hModule=NULL)/加載原WinSock庫,原WinSock庫已復制為wsock32.001。hModule=LoadLibrary("wsock32.001");elsereturn1;if(hModule!=NULL)/獲取原WinSock庫初始化函數(shù)的地址,并保存到WSAStartupI中。proc=GetProcAddress(hModule,"WSAStartup");WSAStartup1=(int(_stdcall*)(WORD,LPWSADATA)proc;/獲取原WinSock庫消除函數(shù)的地

33、址,并保存到WSACleanup仲。proc=GetProcAddress(hModulei,"WSACleanup");WSACleanup1=(int(_stdcall*)()proc;/獲取原創(chuàng)建Sock函數(shù)的地址,并保存到socket1中。proc=GetProcAddress(hModule,"socket");socket1=(SOCKET(_stdcall*)(int,int,int)proc;/獲取原創(chuàng)建連接函數(shù)的地址,并保存到connect1中。proc=GetProcAddress(hModule,"connect"

34、;);connect1=(int(_stdcall*)(SOCKET,conststructsockaddr*,int)proc;/獲取原發(fā)送函數(shù)的地址,并保存到send1中。proc=GetProcAddress(hModule,"send");send1=(int(_stdcall*)(SOCKET,constchar*,int,int)proc;/獲取原接收函數(shù)的地址,并保存到recv1中。proc=GetProcAddress(hModule,"recv");recv1=(int(_stdcall*)(SOCKET,charFAR*,int,in

35、t)proc;其它獲取函數(shù)地址代碼略。elsereturn0;return1; 定義庫輸出函數(shù),在此可以對我們感興趣的函數(shù)中添加輔助控制代碼,在所有的輸出函數(shù)的最后一步都調(diào)用原WinSock庫的同名函數(shù)。部分輸出函數(shù)定義代碼如下:/庫輸出函數(shù)定義。/WinSock初始化函數(shù)。intPASCALFARWSAStartup(WORDwVersionRequired,LPWSADATAlpWSAData)returnWSAStartup1(wVersionRequired,lpWSAData);/WinSock結束清除函數(shù)。intPASCALFARWSACleanup(void)returnWSACleanup1();調(diào)用原WinSock庫結束清除函數(shù)。/創(chuàng)建Socket函數(shù)。SOCKETPASCALFARsocket(intaf,inttype,intprotocol)/調(diào)用原WinSock庫創(chuàng)建Socket函數(shù)。returnsocket1(af,type,protocol);/發(fā)送數(shù)據(jù)包函數(shù)intPASCALFARsend(SOCKETs,constchar*buf,intlen,intflags)/在此可以對發(fā)送的緩沖buf的內(nèi)容進行修改,以實現(xiàn)欺騙服務器。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論