版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
會計學(xué)1Windows消息機制及HOOK應(yīng)用蘇曙光.軟件學(xué)院.華中科技大學(xué)2內(nèi)容事件/消息驅(qū)動HOOK機制第1頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)31.
Windows事件驅(qū)動機制DOS程序的特點順序驅(qū)動和過程驅(qū)動Windows程序的特點操作無序事件驅(qū)動以消息為中心第2頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)4WINDOWS消息處理過程第3頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)5隊列消息基本上是用戶輸入的結(jié)果擊鍵(如WM_KEYDOWN和WM_KEYUP消息)擊鍵產(chǎn)生的字(WM_CHAR)鼠標(biāo)移動(WM_MOUSEMOVE)和鼠標(biāo)按鈕(WM_LBUTTONDOWN)時鐘消息(WM_TIMER)更新消息(WM_PAINT)退出消息(WM_QUIT)第4頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)6非隊列消息在許多情況下,來自調(diào)用特定的Windows函數(shù)。CreateWindow(WM_CREATE消息)ShowWindow(WM_SIZE和WM_SHOWWINDOW消息)UpdateWindow(WM_PAINT消息)……第5頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)7應(yīng)用在自己編寫的程序中,通過向其它程序發(fā)送Windows消息,從而達到控制該程序的目的第6頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)8獲取窗口句柄的的API函數(shù)FindWindow函數(shù)通過指定應(yīng)用程序頂層主窗口的類名和標(biāo)題名,返回它的句柄。HWNDFindWindow(LPCTSTRlpClassName, //窗口所屬的類的名稱LPCTSTRlpWindowName);//窗口的標(biāo)題函數(shù)返回值:如果查到該窗口返回其句柄。第7頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)9FindWindowEx函數(shù)查找指定應(yīng)用程序頂層主窗口中的子窗口的句柄。參數(shù)說明HWNDFindWindowEx(HWNDhwndParent,//要找的子窗口所在父窗口的句柄HWNDhwndChildAfter,//子窗口的句柄LPCTSTRlpszClass, //子窗口的類名LPCTSTRlpszWindow);//子窗口的標(biāo)題名
函數(shù)返回值如果查到該子窗口,則返回它的句柄。第8頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)10向窗口發(fā)送消息發(fā)送sendmessagesendmessagecallbacksendnotifymessagesendmessagetimeout寄送postmessagepostthreadmessagepostquitmessage廣播broadcastsystemmessage第9頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)11第10頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)12例子2第11頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)13打開附件中的“記事本”程序,使用Spy++小工具查找“記事本”程序主窗口的標(biāo)題名和窗口類名。第12頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)14//函數(shù)參數(shù)意義(參數(shù)1:窗口所屬的類名;參數(shù)2:窗口的標(biāo)題名;)h:=FindWindow('Notepad','無標(biāo)題-記事本');//查找"記事本"父窗口的句柄第13頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)15使用Spy++工具查找“記事本”程序子窗口的標(biāo)題名和窗口類名。第14頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)16
//函數(shù)參數(shù)意義(參數(shù)1:子窗口所在父窗口的句柄;參數(shù)2:子窗口的句柄;//參數(shù)3:子窗口的標(biāo)題名)h1:=FindWindowEx(h,0,'Edit',nil);//查找"記事本"子窗口(文本框)的句柄注意:其中h為父窗口的句柄,子窗口句柄為0表示搜索所有的子窗口,子窗口標(biāo)題不知道就使用nil。第15頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)17雙擊“發(fā)送文本到記事本中”按鈕,在生成的單擊響應(yīng)事件過程中,編寫代碼:第16頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)18第17頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)19第18頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)20第19頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)21窗口類typedefstruct{
UINTstyle;
WNDPROClpfnWndProc;
intcbClsExtra;
intcbWndExtra;
HINSTANCEhInstance;
HICONhIcon;
HCURSORhCursor;
HBRUSHhbrBackground;
LPCTSTRlpszMenuName;
LPCTSTRlpszClassName;
}WNDCLASS,*pWNDCLASS;
lpfnWndProc
指向窗口過程的指針。hCursor
鼠標(biāo)指針的句柄。改成員必須為一個指針資源的句柄。如果hCursor為NULL,應(yīng)用程序必須在指針移入應(yīng)用程序窗口時顯式設(shè)置指針類型。
hbrBackground
背景畫刷的句柄。lpszMenuName該字符串描述菜單的資源名第20頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)22窗口過程用窗口過程來分發(fā)和處理消息
窗口類登記的窗口過程LRESULTCALLBACKMainWndProc(HWNDhwnd,//窗口句柄UINTmsg,//消息標(biāo)識WPARAMwParam,//消息參數(shù)1LPARAMlParam//消息參數(shù)2)第21頁/共59頁//窗口過程
//參數(shù):窗口句柄,消息,消息參數(shù),消息參數(shù)
LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
//處理感興趣的消息
switch(message)
{
caseWM_DESTROY:
PostQuitMessage(0);
return0;caseWM_ONCOMMAND//用戶選擇了菜單消息
{//分析菜單項,作出不同處理}
}
//其他消息交給由系統(tǒng)提供的缺省處理函數(shù)
return::DefWindowProc(hwnd,message,wParam,lParam);
}
第22頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)24消息循環(huán)處理while(getmessage(&msg,null,0,0)){if(!translateaccelerator(msg.hwnd,hacceltable,&msg)){translatemessage(&msg);dispatchmessage(&msg);}}得到消息WM_QUIT或GetMessage出錯時退出循環(huán)從消息隊列得到消息進行轉(zhuǎn)換和派發(fā)第23頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)25//應(yīng)用程序主函數(shù)
intWINAPIWinMain(HINSTANCEhInstance)
{
//1.注冊窗口類
staticTCHARszAppName[]=TEXT("HelloWin");//窗口類名稱
//定制"窗口類"結(jié)構(gòu)
WNDCLASSwndclass;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc=WndProc;//關(guān)聯(lián)消息處理函數(shù)
wndclass.hInstance=hInstance;//實例句柄
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;//類名稱
//注冊
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("RegisterClassFail);
return0;
}第24頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)26
//2.建立窗口
HWNDhwnd;
hwnd=CreateWindow(szAppName,//窗口類名稱
TEXT(“TheHelloProgram”),//窗口標(biāo)題
WS_OVERLAPPEDWINDOW,//窗口風(fēng)格
hInstance,//實例句柄
);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);
//消息循環(huán)
MSGmsg;
while(GetMessage(&msg))//從消息隊列中取消息
{
TranslateMessage(&msg);//轉(zhuǎn)換消息
DispatchMessage(&msg);//派發(fā)消息
}
returnmsg.wParam;
}//Winmain()函數(shù)結(jié)束第25頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)27自定義消息如何定義用戶消息如何實現(xiàn)用戶消息的處理?第26頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)28自定義消息第1步:定義消息第27頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)29自定義消息第2步:實現(xiàn)消息處理第28頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)30自定義消息第3步:消息和處理函數(shù)的對應(yīng)第29頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)31MFC中實現(xiàn)自定義的窗口函數(shù)重載WindowProc函數(shù)第30頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)32HOOK技術(shù)HOOK概念兩個例子第31頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)33HOOK概念消息處理程序A消息處理程序B消息處理程序C第32頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)34HOOK概念消息處理程序C消息處理程序A消息處理程序BC就是HOOK程序。即鉤子程序C→B→A:消息處理函數(shù)鏈第33頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)35HOOK本質(zhì)一段用于處理系統(tǒng)消息的程序,這段程序由用戶編寫,掛入該消息的處理函數(shù)鏈中,被OS自動調(diào)用。HOOK技術(shù)典型應(yīng)用木馬程序【特征:平時潛伏,消息觸發(fā)】屏幕抓詞、進程監(jiān)控、垃圾郵件過濾、軟件界面定制、……第34頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)36HOOK的類型根據(jù)處理的消息分類WH_CALLWNDPROC消息發(fā)送到指定窗口WH_CALLWNDPROCRET消息在窗口中處理完成WH_DEBUG調(diào)試WH_GETMESSAGE接收消息投遞WH_KEYBOARD鍵盤消息WH_MOUSE鼠標(biāo)消息
WH_MSGFILTER對話框、消息框、菜單或滾動條消息WH_SHELL外殼WH_SYSMSGFILTER系統(tǒng)消息……第35頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)37HOOK的類型根據(jù)消息的來源分進程內(nèi)部傳遞的消息進程外部傳遞的消息HOOK類型系統(tǒng)HOOK(RemoteHook)監(jiān)視進程外的消息本地HOOK(LocalHook)監(jiān)視進程內(nèi)的消息
第36頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)38編寫HOOK程序的過程過程1.編寫消息處理模塊HookProcLRESULTCALLBACKHookProc2.編寫HOOK管理程序,負責(zé)管理HookProc把HookProc掛接到消息處理隊列中(頂端)從消息處理隊列中刪除HookProc。HOOK管理的關(guān)鍵函數(shù)SetWindowsHookExUnhookWindowsHookExCallNextHookEx第37頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)39關(guān)鍵HOOK函數(shù)HHOOKSetWindowsHookEx(intidHook;//HOOK消息類型HOOKPROClpfn;HINSTANCEhMod;DWORDdwThreadId);功能:把HookProc掛接到消息處理隊列中。LRESULTCALLBACKHookProc(intnCode,WPARAMwParam,LPARAMlParam);第38頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)40關(guān)鍵HOOK函數(shù)BOOLUnhookWindowsHookEx(HHOOKhhk);功能:從消息處理隊列中刪除HookProc。LRESULTCallNextHookEx(HHOOKhhk;intnCode;WPARAMwParam;LPARAMlParam);功能:把消息沿處理隊列向后繼續(xù)傳遞第39頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)41構(gòu)建HOOK程序的步驟[鼠標(biāo)HOOK]STEP1:編寫消息處理程序(處理鼠標(biāo)消息)LRESULTWINAPIMouseProc(intnCode,WPARAMwParam,LPARAMlParam){//獲取目標(biāo)程序的主窗口的標(biāo)題
pMouseHook=(MOUSEHOOKSTRUCTFAR*)lParam;
HWNDglhTargetWnd=pMouseHook->hwnd;//取目標(biāo)窗口句柄
HWNDParentWnd=glhTargetWnd;while(ParentWnd!=NULL)
{
glhTargetWnd=ParentWnd;ParentWnd=GetParent(glhTargetWnd);
}
GetWindowText(glhTargetWnd,szCaption,100);//取目標(biāo)窗口標(biāo)題
……..
returnCallNextHookEx((HHOOK)glhHook,nCode,wParam,lParam);}第40頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)42STEP2:安裝消息處理程序voidStartHook(HWNDhWnd){……
glhHook=(HWND)SetWindowsHookEx(
WH_MOUSE,MouseProc,NULL);}WH_MOUSE:HOOK消息的類型第41頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)43STEP3:卸載消息處理程序voidStopHook()
{//從系統(tǒng)取消HOOK程序
……
UnhookWindowsHookEx((HHOOK)glhHook);
}第42頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)44鍵盤HOOK例子功能能夠捕獲通過鍵盤輸入的任何字符存入到指定文件中。第43頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)45KeyHook.dllSaveKey.exe第44頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)46運行和測試第45頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)47第46頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)48第47頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)49第48頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)50第49頁/共59頁屏幕抓詞程序1.安裝鼠標(biāo)鉤子,通過鉤子函數(shù)獲得鼠標(biāo)消息。Setwindowshookex2.向鼠標(biāo)下的窗口發(fā)重畫消息,讓它重畫窗口。windowfrompoint,screentoclient,invalidaterect3.截獲對系統(tǒng)函數(shù)的調(diào)用,取得參數(shù)(要取的詞)截獲gdi32.dll中的textouta函數(shù)4.仿照textouta函數(shù)寫一個自己的mytextouta函數(shù)
boolwinapimytextouta(hdchdc,intnxstart,intnystart,lpcstrlpszstring,intcbstring){
//這里進行輸出lpszstring的處理//然后調(diào)用正版的textouta函數(shù)}
5.調(diào)用hookimportfunction函數(shù)截獲進程對textouta函數(shù)調(diào)用蘇曙光.軟件學(xué)院.華中科技大學(xué)51第50頁/共59頁蘇曙光.軟件學(xué)院.華中科技大學(xué)52HOOKAPI技術(shù)在應(yīng)用程序中調(diào)用TerminateProcess()函數(shù)可以結(jié)束指定的進程。如果不允許以這種“暴力”手段結(jié)束進程,就可以監(jiān)控Terminate
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 子宮肉瘤患者的口腔護理
- 小兒驚厥護理中的溝通與協(xié)調(diào)
- 護理倫理與醫(yī)療安全
- 大豐市小海中學(xué)高二生物三同步課程講義第講期中期末串講之種群和群落
- 《信息通信建設(shè)數(shù)字化工程監(jiān)理服務(wù)能力評價標(biāo)準》征求意見稿
- 太陽能建筑一體化原理與應(yīng) 課件 第5章 太陽能集熱器
- 2025年中國奢侈品行業(yè)市場研究報告
- DB32∕T 5212-2025 泵站遠程集控少人值守技術(shù)規(guī)范
- 2026 年中職掘進技術(shù)(巷道掘進)試題及答案
- 黨建試題及答案多選
- 咖啡店5s管理制度
- 供電營業(yè)規(guī)則(2024版)
- T/SSBME 1-2024醫(yī)療器械上市后研究和風(fēng)險管控計劃編寫指南
- 鋼筋棚拆除合同范本
- 斷絕親子協(xié)議書
- 【MOOC答案】《光纖光學(xué)》(華中科技大學(xué))章節(jié)作業(yè)期末慕課答案
- 小學(xué)生班級管理交流課件
- DB21T 3722.7-2025高標(biāo)準農(nóng)田建設(shè)指南 第7部分:高標(biāo)準農(nóng)田工程施工質(zhì)量評定規(guī)范
- 近八年寧夏中考數(shù)學(xué)試卷真題及答案2024
- 超星爾雅學(xué)習(xí)通《帶您走進西藏(西藏民族大學(xué))》2025章節(jié)測試附答案
- 超星爾雅學(xué)習(xí)通《科學(xué)計算與MATLAB語言(中南大學(xué))》2025章節(jié)測試附答案
評論
0/150
提交評論