青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

道。道。道

安全特性不等于安全的特性

   :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理

常用鏈接

搜索

  •  

最新評論

(4)、新建wsock32.def配置文件,在其中加入所有庫輸出函數(shù)的聲明,部分聲明代碼如下:

   LIBRARY "wsock32"
   EXPORTS
    WSAStartup @1
   WSACleanup @2
    recv @3
    send @4
    socket @5
   bind @6
   closesocket @7
   connect @8

   ......其它輸出函數(shù)聲明代碼略。

  (5)、從“工程”菜單中選擇“設(shè)置”,彈出Project Setting對話框,選擇Link標(biāo)簽,在“對象/庫模塊”中輸入

Ws2_32.lib。

  (6)、編譯項目,產(chǎn)生wsock32.dll庫文件。

  (7)、將系統(tǒng)目錄下原wsock32.dll庫文件拷貝到被外掛程序的目錄下,并將其改名為wsock.001;再將上面產(chǎn)生的

wsock32.dll文件同樣拷貝到被外掛程序的目錄下。重新啟動游戲程序,此時游戲程序?qū)⑾燃虞d我們自己制作的

wsock32.dll文件,再通過該庫文件間接調(diào)用原WinSock接口函數(shù)來實(shí)現(xiàn)訪問網(wǎng)絡(luò)。上面我們僅僅介紹了擋載WinSock的實(shí)

現(xiàn)過程,至于如何加入外掛控制代碼,還需要外掛開發(fā)人員對游戲數(shù)據(jù)包結(jié)構(gòu)、內(nèi)容、加密算法等方面的仔細(xì)分析(這個

過程將是一個艱辛的過程),再生成外掛控制代碼。關(guān)于數(shù)據(jù)包分析方法和技巧,不是本文講解的范圍,如您感興趣可以

到網(wǎng)上查查相關(guān)資料。


(3)、注入外掛代碼進(jìn)入被掛游戲進(jìn)程中

  完成了定位和修改程序中調(diào)用API函數(shù)代碼后,我們就可以隨意設(shè)計自定義的API函數(shù)的替代函數(shù)了。做完這一切后,

還需要將這些代碼注入到被外掛游戲程序進(jìn)程內(nèi)存空間中,不然游戲進(jìn)程根本不會訪問到替代函數(shù)代碼。注入方法有很多

,如利用全局鉤子注入、利用注冊表注入擋截User32庫中的API函數(shù)、利用CreateRemoteThread注入(僅限于NT/2000)、

利用BHO注入等。因為我們在動作模擬技術(shù)一節(jié)已經(jīng)接觸過全局鉤子,我相信聰明的讀者已經(jīng)完全掌握了全局鉤子的制作

過程,所以我們在后面的實(shí)例中,將繼續(xù)利用這個全局鉤子。至于其它幾種注入方法,如果感興趣可參閱MSDN有關(guān)內(nèi)容。

  有了以上理論基礎(chǔ),我們下面就開始制作一個擋截MessageBoxA和recv函數(shù)的實(shí)例,在開發(fā)游戲外掛程序 時,可以此

實(shí)例為框架,加入相應(yīng)的替代函數(shù)和處理代碼即可。此實(shí)例的開發(fā)過程如下:

  (1) 打開前面創(chuàng)建的ActiveKey項目。

  (2) 在ActiveKey.h文件中加入HOOKAPI結(jié)構(gòu),此結(jié)構(gòu)用來存儲被擋截API函數(shù)名稱、原API函數(shù)地址和替代函數(shù)地址。

   typedef struct tag_HOOKAPI
   {
   LPCSTR szFunc;//被HOOK的API函數(shù)名稱。
   PROC pNewProc;//替代函數(shù)地址。
   PROC pOldProc;//原API函數(shù)地址。
   }HOOKAPI, *LPHOOKAPI;?

  (3) 打開ActiveKey.cpp文件,首先加入一個函數(shù),用于定位輸入庫在輸入數(shù)據(jù)段中的IAT地址。代碼如下:

   extern "C" __declspec(dllexport)PIMAGE_IMPORT_DESCRIPTOR
   LocationIAT(HMODULE hModule, LPCSTR szImportMod)
   //其中,hModule為進(jìn)程模塊句柄;szImportMod為輸入庫名稱。
   {
   //檢查是否為DOS程序,如是返回NULL,因DOS程序沒有IAT。
   PIMAGE_DOS_HEADER pDOSHeader = (PIMAGE_DOS_HEADER) hModule;
   if(pDOSHeader->e_magic != IMAGE_DOS_SIGNATURE) return NULL;
    //檢查是否為NT標(biāo)志,否則返回NULL。
    PIMAGE_NT_HEADERS pNTHeader = (PIMAGE_NT_HEADERS)((DWORD)pDOSHeader+ (DWORD)(pDOSHeader-

>e_lfanew));
    if(pNTHeader->Signature != IMAGE_NT_SIGNATURE) return NULL;
    //沒有IAT表則返回NULL。
    if(pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress == 0)

return NULL;
    //定位第一個IAT位置。
    PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)((DWORD)pDOSHeader + (DWORD)

(pNTHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress));
    //根據(jù)輸入庫名稱循環(huán)檢查所有的IAT,如匹配則返回該IAT地址,否則檢測下一個IAT。
    while (pImportDesc->Name)
    {
     //獲取該IAT描述的輸入庫名稱。
   PSTR szCurrMod = (PSTR)((DWORD)pDOSHeader + (DWORD)(pImportDesc->Name));
   if (stricmp(szCurrMod, szImportMod) == 0) break;
   pImportDesc++;
    }
    if(pImportDesc->Name == NULL) return NULL;
   return pImportDesc;
   }

  再加入一個函數(shù),用來定位被擋截API函數(shù)的IAT項并修改其內(nèi)容為替代函數(shù)地址。代碼如下:

   extern "C" __declspec(dllexport)
   HookAPIByName( HMODULE hModule, LPCSTR szImportMod, LPHOOKAPI pHookApi)
   //其中,hModule為進(jìn)程模塊句柄;szImportMod為輸入庫名稱;pHookAPI為HOOKAPI結(jié)構(gòu)指針。
   {
    //定位szImportMod輸入庫在輸入數(shù)據(jù)段中的IAT地址。
    PIMAGE_IMPORT_DESCRIPTOR pImportDesc = LocationIAT(hModule, szImportMod);
  if (pImportDesc == NULL) return FALSE;
    //第一個Thunk地址。
    PIMAGE_THUNK_DATA pOrigThunk = (PIMAGE_THUNK_DATA)((DWORD)hModule + (DWORD)(pImportDesc-

>OriginalFirstThunk));
   //第一個IAT項的Thunk地址。
    PIMAGE_THUNK_DATA pRealThunk = (PIMAGE_THUNK_DATA)((DWORD)hModule + (DWORD)(pImportDesc-

>FirstThunk));
    //循環(huán)查找被截API函數(shù)的IAT項,并使用替代函數(shù)地址修改其值。
   while(pOrigThunk->u1.Function)
{
 //檢測此Thunk是否為IAT項。
if((pOrigThunk->u1.Ordinal & IMAGE_ORDINAL_FLAG) != IMAGE_ORDINAL_FLAG)
{
  //獲取此IAT項所描述的函數(shù)名稱。
 PIMAGE_IMPORT_BY_NAME pByName =(PIMAGE_IMPORT_BY_NAME)((DWORD)hModule+(DWORD)(pOrigThunk-

>u1.AddressOfData));
 if(pByName->Name[0] == '\0') return FALSE;
  //檢測是否為擋截函數(shù)。
if(strcmpi(pHookApi->szFunc, (char*)pByName->Name) == 0)
  {
       MEMORY_BASIC_INFORMATION mbi_thunk;
       //查詢修改頁的信息。
       VirtualQuery(pRealThunk, &mbi_thunk, sizeof(MEMORY_BASIC_INFORMATION));
//改變修改頁保護(hù)屬性為PAGE_READWRITE。
       VirtualProtect(mbi_thunk.BaseAddress,mbi_thunk.RegionSize, PAGE_READWRITE,

&mbi_thunk.Protect);
//保存原來的API函數(shù)地址。
      if(pHookApi->pOldProc == NULL)
pHookApi->pOldProc = (PROC)pRealThunk->u1.Function;
  //修改API函數(shù)IAT項內(nèi)容為替代函數(shù)地址。
pRealThunk->u1.Function = (PDWORD)pHookApi->pNewProc;
//恢復(fù)修改頁保護(hù)屬性。
DWORD dwOldProtect;
       VirtualProtect(mbi_thunk.BaseAddress, mbi_thunk.RegionSize, mbi_thunk.Protect,

&dwOldProtect);
      }
}
  pOrigThunk++;
  pRealThunk++;
}
  SetLastError(ERROR_SUCCESS); //設(shè)置錯誤為ERROR_SUCCESS,表示成功。
  return TRUE;
   }?

  (4) 定義替代函數(shù),此實(shí)例中只給MessageBoxA和recv兩個API進(jìn)行擋截。代碼如下:

   static int WINAPI MessageBoxA1 (HWND hWnd , LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
   {
    //過濾掉原MessageBoxA的正文和標(biāo)題內(nèi)容,只顯示如下內(nèi)容, 。
return MessageBox(hWnd, "Hook API OK!", "Hook API", uType);
   }
   static int WINAPI recv1(SOCKET s, char FAR *buf, int len, int flags )
   {
   //此處可以擋截游戲服務(wù)器發(fā)送來的網(wǎng)絡(luò)數(shù)據(jù)包,可以加入分析和處理數(shù)據(jù)代碼
   return recv(s,buf,len,flags);
   }?

  (5) 在KeyboardProc函數(shù)中加入激活擋截API代碼,在if( wParam == 0X79 )語句中后面加入如下else if語句:

   ......
   //當(dāng)激活F11鍵時,啟動擋截API函數(shù)功能。
   else if( wParam == 0x7A )
   {
    HOOKAPI api[2];
api[0].szFunc ="MessageBoxA";//設(shè)置被擋截函數(shù)的名稱。
api[0].pNewProc = (PROC)MessageBoxA1;//設(shè)置替代函數(shù)的地址。
api[1].szFunc ="recv";//設(shè)置被擋截函數(shù)的名稱。
api[1].pNewProc = (PROC)recv1; //設(shè)置替代函數(shù)的地址。
//設(shè)置擋截User32.dll庫中的MessageBoxA函數(shù)。
HookAPIByName(GetModuleHandle(NULL),"User32.dll",&api[0]);
//設(shè)置擋截Wsock32.dll庫中的recv函數(shù)。
HookAPIByName(GetModuleHandle(NULL),"Wsock32.dll",&api[1]);
   }
   ......?

  (6) 在ActiveKey.cpp中加入頭文件聲明 "#include "wsock32.h"。 從“工程”菜單中選擇“設(shè)置”,彈出Project

Setting對話框,選擇Link標(biāo)簽,在“對象/庫模塊”中輸入Ws2_32..lib。

  (7) 重新編譯ActiveKey項目,產(chǎn)生ActiveKey.dll文件,將其拷貝到Simulate.exe目錄下。運(yùn)行Simulate.exe并啟動

全局鉤子。激活任意應(yīng)用程序,按F11鍵后,運(yùn)行此程序中可能調(diào)用MessageBoxA函數(shù)的操作,看看信息框是不是有所變化

。同樣,如此程序正在接收網(wǎng)絡(luò)數(shù)據(jù)包,就可以實(shí)現(xiàn)封包功能了。

  六、結(jié)束語

  除了以上介紹的幾種游戲外掛程序常用的技術(shù)以外,在一些外掛程序中還使用了游戲數(shù)據(jù)修改技術(shù)游戲加速技術(shù)

。在這篇文章里,就不逐一介紹了。

網(wǎng)絡(luò)游戲外掛核心封包揭密

[文章導(dǎo)讀]
?
網(wǎng)絡(luò)游戲的封包技術(shù)是大多數(shù)編程愛好者都比較關(guān)注的關(guān)注的問題之一,在這里就讓我們一起研究一下這一個問題吧
  網(wǎng)絡(luò)游戲的封包技術(shù)是大多數(shù)編程愛好者都比較關(guān)注的關(guān)注的問題之一,在這里就讓我們一起研究一下這一個問題吧

  別看這是封包這一問題,但是涉及的技術(shù)范圍很廣范,實(shí)現(xiàn)的方式也很多(比如說APIHOOK,VXD,Winsock2都可以實(shí)現(xiàn)

),在這里我們不可能每種技術(shù)和方法都涉及,所以我在這里以Winsock2技術(shù)作詳細(xì)講解,就算作拋磚引玉。

  由于大多數(shù)讀者對封包類編程不是很了解,我在這里就簡單介紹一下相關(guān)知識

  APIHooK:

  由于Windows的把內(nèi)核提供的功能都封裝到API里面,所以大家要實(shí)現(xiàn)功能就必須通過API,換句話說就是我們要想捕

獲數(shù)據(jù)封包,就必須先要得知道并且捕獲這個API,從API里面得到封包信息。

  VXD:

  直接通過控制VXD驅(qū)動程序來實(shí)現(xiàn)封包信息的捕獲,不過VXD只能用于win9X。

  winsock2:

  winsock是Windows網(wǎng)絡(luò)編程接口,winsock工作在應(yīng)用層,它提供與底層傳輸協(xié)議無關(guān)的高層數(shù)據(jù)傳輸編程接口,

winsock2是winsock2.0提供的服務(wù)提供者接口,但只能在win2000下用。

  好了,我們開始進(jìn)入winsock2封包式編程吧。

  在封包編程里面我準(zhǔn)備分兩個步驟對大家進(jìn)行講解:1、封包的捕獲,2、封包的發(fā)送。

  首先我們要實(shí)現(xiàn)的是封包的捕獲:

  Delphi的封裝的winsock是1.0版的,很自然winsock2就用不成。如果要使用winsock2我們要對winsock2在Delphi里面

做一個接口,才可以使用winsock2。

  1、如何做winsock2的接口?

  1)我們要先定義winsock2.0所用得到的類型,在這里我們以WSA_DATA類型做示范,大家可以舉一仿三的來實(shí)現(xiàn)

winsock2其他類型的封裝。

  我們要知道WSA_DATA類型會被用于WSAStartup(wVersionRequired: word; var WSData: TWSAData): Integer;,大家

會發(fā)現(xiàn)WSData是引用參數(shù),在傳入?yún)?shù)時傳的是變量的地址,所以我們對WSA_DATA做以下封裝:


  2)我們要從WS2_32.DLL引入winsock2的函數(shù),在此我們也是以WSAStartup為例做函數(shù)引入:


  通過以上方法,我們便可以對winsock2做接口,下面我們就可以用winsock2做封包捕獲了,不過首先要有一塊網(wǎng)卡。

因為涉及到正在運(yùn)作的網(wǎng)絡(luò)游戲安全問題,所以我們在這里以IP數(shù)據(jù)包為例做封包捕獲,如果下面的某些數(shù)據(jù)類型您不是

很清楚,請您查閱MSDN:

posted on 2006-11-18 16:54 獨(dú)孤九劍 閱讀(570) 評論(0)  編輯 收藏 引用 所屬分類: Win32Visual C++ 8.0misc
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美日韩精品久久久久| 欧美jizzhd精品欧美巨大免费| 亚洲日韩视频| 午夜亚洲性色视频| 亚洲综合色自拍一区| 亚洲资源在线观看| 日韩一级黄色av| 亚洲人体大胆视频| 欧美一区二区三区精品电影| 欧美日韩国产成人在线观看| 有坂深雪在线一区| 欧美丰满高潮xxxx喷水动漫| 久久久av毛片精品| 永久域名在线精品| 欧美成在线视频| 免费永久网站黄欧美| 亚洲福利国产| 亚洲黄色在线观看| 性色av一区二区三区| 久久精品国产99国产精品澳门 | 欧美另类亚洲| 欧美在线视频免费播放| 91久久精品美女高潮| 欧美日韩1234| 在线观看av一区| 看片网站欧美日韩| 午夜亚洲福利| 国产精品国产亚洲精品看不卡15 | 亚洲图片在线观看| 在线免费观看成人网| 久久久精品一区| 国产精品成人一区二区网站软件| 国户精品久久久久久久久久久不卡| 亚洲欧美变态国产另类| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 国产亚洲精品bt天堂精选| 久久精彩视频| 久久久五月天| 国产一区二区久久| 在线欧美日韩精品| 欧美激情网站在线观看| 欧美成人性网| 中国日韩欧美久久久久久久久| 91久久线看在观草草青青| 免费在线成人av| 91久久综合亚洲鲁鲁五月天| 亚洲国产天堂久久综合网| 欧美三级电影精品| 欧美制服第一页| 老司机免费视频久久| 9国产精品视频| 亚洲男人第一av网站| 国产一区二区三区久久悠悠色av | 久久精品久久99精品久久| 一区二区自拍| 最新国产拍偷乱拍精品| 国产精品成人va在线观看| 欧美一区二区三区日韩视频| 亚洲精品男同| 国产精品女人网站| 美女网站在线免费欧美精品| 欧美日韩成人网| 另类尿喷潮videofree | 久久九九国产精品| 欧美日韩精品| 欧美激情视频一区二区三区不卡| 欧美日韩亚洲91| 欧美国产综合视频| 亚洲一卡久久| 亚洲精品日产精品乱码不卡| 欧美一区二区三区另类| 亚洲天堂av在线免费| 免费不卡在线视频| 久久五月天婷婷| 国产老女人精品毛片久久| 欧美激情麻豆| 亚洲国产高清视频| 久久精品99无色码中文字幕 | 亚洲日本成人女熟在线观看| 性欧美大战久久久久久久久| 99精品国产福利在线观看免费| 欧美在线短视频| 久久精品道一区二区三区| 国产精品久久久久久久浪潮网站| 99re在线精品| aa级大片欧美| 欧美日韩国产成人在线免费| 亚洲三级影片| 亚洲网友自拍| 国产亚洲精品一区二区| 久久国产精品久久精品国产| 久久久久久网址| 黄色一区二区在线| 欧美激情中文不卡| 香蕉久久精品日日躁夜夜躁| 免费欧美在线| 亚洲一区二区视频在线观看| 国产精品久久精品日日| 亚洲视频久久| 裸体女人亚洲精品一区| 亚洲人成在线播放网站岛国| 狂野欧美性猛交xxxx巴西| 亚洲国产片色| 国产精品制服诱惑| 欧美成人资源| 一区二区三区欧美在线观看| 性做久久久久久久免费看| 影音先锋日韩资源| 欧美性开放视频| 久久狠狠亚洲综合| 99国产精品视频免费观看| 久久国产欧美日韩精品| 99re视频这里只有精品| 激情成人亚洲| 国产色产综合色产在线视频| 欧美激情中文字幕一区二区| 亚洲欧洲av一区二区| 亚洲人成高清| 韩国精品主播一区二区在线观看| 欧美激情精品久久久久久久变态 | 亚洲美女少妇无套啪啪呻吟| 国产精品入口尤物| 欧美午夜激情视频| 欧美国产日韩二区| 欧美国产精品v| 久久精品91| 久久er精品视频| 亚洲欧美一区二区精品久久久| 亚洲欧洲一区二区三区| 欧美激情精品久久久久久蜜臀| 久久综合久久久久88| 久久激情一区| 欧美在线免费看| 久久国产一区| 久久不射电影网| 欧美一区二区视频免费观看| 中国亚洲黄色| 亚欧成人精品| 亚洲少妇最新在线视频| 亚洲主播在线播放| 亚洲精选视频在线| 亚洲毛片一区| 亚洲影院色无极综合| 亚洲一区高清| 久久理论片午夜琪琪电影网| 美女诱惑黄网站一区| 亚洲电影在线看| 亚洲精品国产系列| 一区二区三区日韩精品视频| 久久激情五月婷婷| 亚洲日本va在线观看| 久久精品人人爽| 黄色日韩网站视频| 欧美中文字幕在线观看| 亚洲欧美一区二区精品久久久 | 日韩一级在线| 欧美精品一线| 在线一区二区日韩| 久久在线播放| 久久免费视频网站| 狠狠色狠狠色综合| 欧美国产在线观看| 欧美极品aⅴ影院| 亚洲一区二区在线看| 亚洲欧美在线播放| 红桃视频国产一区| 亚洲精品国产视频| 亚洲欧美日韩国产中文在线| 一本大道久久a久久精品综合| 欧美伦理在线观看| 亚洲承认在线| 久久亚洲一区二区三区四区| 正在播放欧美视频| 欧美日韩综合不卡| 日韩视频在线免费观看| 欧美成人小视频| 久久久久se| 国产一区二区主播在线| 欧美在线亚洲一区| 午夜日韩av| 一区免费在线| 男人的天堂亚洲在线| 久久深夜福利免费观看| 黄色亚洲免费| 久久综合精品一区| 欧美在线视频在线播放完整版免费观看 | 99热免费精品在线观看| 欧美在线啊v| 国产一区二区三区久久久| 亚洲午夜国产一区99re久久| 99国产精品久久久久久久| 久久久久国内| 午夜精品一区二区三区在线视| 欧美日韩视频在线一区二区| 精品成人乱色一区二区| 久久久久久9| 久久久国际精品| …久久精品99久久香蕉国产 | 一区二区三区视频免费在线观看| 另类尿喷潮videofree |