一个人免费观看视频www中文,女人与公狍交酡女免费,久久99精品久久久久久hb无码,免费人成视频网站在线观看18,亚洲热妇无码av在线播放,好姑娘高清影视在线观看,久久aaaa片一区二区,aaaaa级少妇高潮大片

游戲封包截取工具下載 最新軟件|熱門排行|軟件分類|軟件專題|廠商大全

您的位置: 首頁游戲下載游戲工具 → 游戲封包截取發送工具 綠色免費版

游戲封包截取發送工具

綠色免費版 游戲封包截取發送工具 網友評分:8

同類相關游戲

游戲介紹

游戲標簽: 游戲封包 游戲工具

游戲封包截取工具是一款非常好用的游戲工具,功能強大,使用方便,有需要的朋友不要錯過了,還等什么,快約上你的小伙伴,一起來綠色資源網下載使用!

游戲封包截取工具軟件升級

對游戲數據包進行抓取截圖,有序要的朋友可以看看。截獲API是個很有用的東西,比如你想分析一下別人的程序是怎樣工作的。這里我介紹一下一種我自己試驗通過的方法。

游戲封包截取工具使用方式

首先

我們必須設法把自己的代碼放到目標程序的進程空間里去。Windows Hook可以幫我們實現這一點。SetWindowsHookex的聲明如下:

HHOOK SetWindowsHookEx(

int idHook, // hook type

HOOKPROC lpfn, // hook procedure

HINSTANCE hMod, // handle to application instance

DWORD dwThreadId // thread identifier

);

具體的參數含義可以翻閱msdn,沒有msdn可謂寸步難行。

這里Hook本身的功能并不重要,我們使用它的目的僅僅只是為了能夠讓Windows把我們的代碼植入別的進程里去。hook Type我們任選一種即可,只要保證是目標程序肯定會調用到就行,這里我用的是WH_CALLWNDPROC。lpfn和hMod分別指向我們的鉤子代碼及其所在的dll,dwThreadId設為0,表示對所有系統內的線程都掛上這樣一個hook,這樣我們才能把代碼放到別的進程里去。

之后,我們的代碼就已經進入了系統內的所有進程空間了。必須注意的是,我們只需要截獲我們所關心的目標程序的調用,因此還必須區分一下進程號。我們自己的鉤子函數中,第一次運行將進行最重要的API重定向的工作。也就是通過將所需要截獲的API的開頭幾個字節改為一個跳轉指令,使其跳轉到我們的API中來。這是最關鍵的部分。這里我想截三個調用,ws2_32.dll中的send和recv、user32.dll中的GetMessageA。

DWORD dwCurrentPID = 0;

HHOOK hOldHook = NULL;

DWORD pSend = 0;

DWORD pRecv = 0;

GETMESSAGE pGetMessage = NULL;

BYTE btNewBytes[8] = { 0x0B8, 0x0, 0x0, 0x40, 0x0, 0x0FF, 0x0E0, 0 };

DWORD dwOldBytes[3][2];

HANDLE hDebug = INVALID_HANDLE_value;

LRESULT CALLBACK CallWndProc( int nCode, WPARAM wParam, LPARAM lParam )

{

DWORD dwSize;

DWORD dwPIDWatched;

HMODULE hLib;

if( dwCurrentPID == 0 )

{

dwCurrentPID = GetcurrentProcessId();

HWND hwndMainHook;

hwndMainHook = ::FindWindow( 0, "MainHook" );

dwPIDWatched = ::SendMessage( hwndMainHook, (WM_USER+100), 0, 0 );

hOldHook = (HHOOK)::SendMessage( hwndMainHook, (WM_USER+101), 0, 0 );

if( dwCurrentPID == dwPIDWatched )

{

hLib = LoadLibrary( "ws2_32.dll" );

pSend = (DWORD)GetProcAddress( hLib, "send" );

pRecv = (DWORD)GetProcAddress( hLib, "recv" );

::ReadProcessMemory( INVALID_HANDLE_value, (void *)pSend, (void *)dwOldBytes[0], sizeof(DWORD)*2, &dwSize );

*(DWORD *)( btNewBytes + 1 ) = (DWORD)new_send;

::WriteProcessMemory( INVALID_HANDLE_value, (void *)pSend, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize );

::ReadProcessMemory( INVALID_HANDLE_value, (void *)pRecv, (void *)dwOldBytes[1], sizeof(DWORD)*2, &dwSize );

*(DWORD *)( btNewBytes + 1 ) = (DWORD)new_recv;

::WriteProcessMemory( INVALID_HANDLE_value, (void *)pRecv, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize );

hLib = LoadLibrary( "user32.dll" );

pGetMessage = (GETMESSAGE)GetProcAddress( hLib, "GetMessageA" );

::ReadProcessMemory( INVALID_HANDLE_value, (void *)pGetMessage, (void *)dwOldBytes[2], sizeof(DWORD)*2, &dwSize );

*(DWORD *)( btNewBytes + 1 ) = (DWORD)new_GetMessage;

::WriteProcessMemory( INVALID_HANDLE_value, (void *)pGetMessage, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize );

hDebug = ::CreateFile( "C:\\Trace.log", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 );

if( hOldHook != NULL )

return CallNextHookEx( hOldHook, nCode, wParam, lParam );

return 0;

上面的鉤子函數,只有第一次運行時有用,就是把三個函數的首8字節修改一下(實際上只需要7個)。btNewBytes中的指令實際就是

mov eax, 0x400000

jmp eax

這里的0x400000就是新的函數的地址,比如new_recv/new_send/new_GetMessage,此時,偷梁換柱已經完成。再看看我們的函數中都干了些什么。以GetMessageA為例:

BOOL _stdcall new_GetMessage( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax )

DWORD dwSize;

char szTemp[256];

BOOL r = false;

//Watch here before it's executed.

sprintf( szTemp, "Before GetMessage : HWND 0x%8.8X, msgMin 0x%8.8X, msgMax 0x%8.8x \r\n", hWnd, wMsgFilterMin, wMsgFilterMax );

::WriteFile( hDebug, szTemp, strlen(szTemp), &dwSize, 0 );

//Watch over

// restore it at first

::WriteProcessMemory( INVALID_HANDLE_value, (void *)pGetMessage, (void *)dwOldBytes[2], sizeof(DWORD)*2, &dwSize );

// execute it

r = pGetMessage( lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax );

// hook it again

*(DWORD *)( btNewBytes + 1 ) = (DWORD)new_GetMessage;

::WriteProcessMemory( INVALID_HANDLE_value, (void *)pGetMessage, (void *)btNewBytes, sizeof(DWORD)*2, &dwSize );

//Watch here after it's executed

sprintf( szTemp, "Result of GetMessage is %d.\r\n", r );

::WriteFile( hDebug, szTemp, strlen( szTemp ), &dwSize, 0 );

if( r )

{

sprintf( szTemp, "Msg : HWND 0x%8.8X, MSG 0x%8.8x, wParam 0x%8.8X, lParam 0x%8.8X\r\nTime 0x%8.8X, X %d, Y %d\r\n",

lpMsg->hwnd, lpMsg->message,

lpMsg->wParam, lpMsg->lParam, lpMsg->time,

lpMsg->pt.x, lpMsg->pt.y );

::WriteFile( hDebug, szTemp, strlen( szTemp ), &dwSize, 0 );

}

strcpy( szTemp, "\r\n" );

::WriteFile( hDebug, szTemp, strlen( szTemp ), &dwSize, 0 );

//Watch over

return r;

先將截獲下來的參數,寫入到一個log文件中,以便分析。然后恢復原先保留下來的GetMessageA的首8字節,然后執行真正的GetMessageA調用,完畢后再將執行結果也寫入log文件,然后將GetMessageA的執行結果返回給調用者。

整個截獲的過程就是這樣。你可以把其中的寫log部分改成你自己想要的操作。這里有個不足的地方是,截獲動作是不能夠并發進行的,如果目標進程是多線程的,就會有問題。解決辦法是,可以在每次new_GetMessage中加入一個CriticalSection的鎖和解鎖,以使調用變為串行進行,但這個我沒有試驗過。

網絡游戲的封包技術是大多數編程愛好者都比較關注的關注的問題之一,在這一篇里就讓我們一起研究一下這一個問題吧。

別看這是封包這一問題,但是涉及的技術范圍很廣范,實現的方式也很多(比如說APIHOOK,VXD,Winsock2都可以實現),在這里我們不可能每種技術和方法都涉及,所以我在這里以Winsock2技術作詳細講解,就算作拋磚引玉。

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

APIHooK:

由于Windows的把內核提供的功能都封裝到API里面,所以大家要實現功能就必須通過API,換句話說就是我們要想捕獲數據封包,就必須先要得知道并且捕獲這個API,從API里面得到封包信息。

VXD:

直接通過控制VXD驅動程序來實現封包信息的捕獲,不過VXD只能用于win9X。

winsock2:

winsock是Windows網絡編程接口,winsock工作在應用層,它提供與底層傳輸協議無關的高層數據傳輸編程接口,winsock2是winsock2.0提供的服務提供者接口,但只能在win2000下用。

好了,我們開始進入winsock2封包式編程吧。

在封包編程里面我準備分兩個步驟對大家進行講解:1、封包的捕獲,2、封包的發送。

首先我們要實現的是封包的捕獲:

Delphi的封裝的winsock是1.0版的,很自然winsock2就用不成。如果要使用winsock2我們要對winsock2在Delphi里面做一個接口,才可以使用winsock2。

1、如何做winsock2的接口?

1)我們要先定義winsock2.0所用得到的類型,在這里我們以WSA_DATA類型做示范,大家可以舉一仿三的來實現winsock2其他類型的封裝。

我們要知道WSA_DATA類型會被用于WSAStartup(wVersionRequired: word; var WSData: TWSAData): Integer;,大家會發現WSData是引用參數,在傳入參數時傳的是變量的地址,所以我們對WSA_DATA做以下封裝:

const

WSADESCRIPTION_LEN = 256;

WSASYS_STATUS_LEN = 128;

type

PWSA_DATA = ^TWSA_DATA;

WSA_DATA = record

wVersion: Word;

wHighVersion: Word;

szDescription: array[0..WSADESCRIPTION_LEN] of Char;

游戲截圖

下載地址 電腦版

點擊報錯 軟件無法下載或下載后無法使用,請點擊報錯,謝謝!

用戶評論

熱門評論

最新評論

發表評論 查看所有評論(0)

昵稱:
請不要評論無意義或臟話,我們所有評論會有人工審核.
字數: 0/500 (您的評論需要經過審核才能顯示)
主站蜘蛛池模板: 又硬又粗进去好爽免费| mm131美女图片尤物写真丝袜| 粉嫩大学生无套内射无码卡视频| aa片在线观看视频在线播放| 真实单亲乱l仑对白视频| 精品乱码久久久久久中文字幕 | 制服丝袜美腿一区二区| 一面上边一面膜下边的免费 | 又硬又粗进去好爽免费| 色综合天天综合网国产成人网| 亚洲精品国产成人| 国产欧美日韩a片免费软件| 国产果冻豆传媒麻婆精东| 啦啦啦观看免费观看视频6| 成人做爰高潮尖叫声免费观看| xvideos国产在线视频| 天堂在线中文网www| 大地资源网在线观看免费动漫| 夫前人妻被灌醉侵犯在线| 日本一卡2卡3卡4卡无卡免费| 97碰碰碰人妻无码视频| 成全高清mv电影免费观看| 久久综合激激的五月天| 内射老妇bbwx0c0ck| 一边做一边说国语对白| 偷窥日本少妇撒尿chinese| 天堂а在线中文在线新版| 最新亚洲av电影网站| 丰满少妇被猛烈进入在线播放 | 人与禽zozo性伦| 国产成人综合色在线观看网站| 欧美videos另类极品| 女友被粗大的猛烈进出动漫 | 一本无码人妻在中文字幕免费| 免费人成视频x8x8入口| 色欲人妻综合aaaaaaaa网| √新版天堂资源在线资源| 姐姐6电视剧在线观看| 亚洲精品97久久中文字幕无码 | 色护士极品影院| 免费看韩国黄a片在线观看|