當前位置:編程學習大全網 - 網絡軟體 - 如何hook文件拷貝實現數據攔截

如何hook文件拷貝實現數據攔截

先給不懂鉤子的人簡單介紹壹下原理:所謂hook,既鉤子。hook會在應用程序接到消息之前,攔截應用程序的信息,比如鼠標鍵盤鉤子會攔截壹個應用程序的鼠標鍵盤信息。要做盜號木馬?用WH_KEYBOARD類型的hook

1.我們要跨進程使用鉤子,要把hook函數寫在DLL文件中,這是微軟明確規定的。也有其他方法,這裏不多敘述

2.在DLL文件中 設置鉤子.

這裏需要調用線程ID,threadId,我們會在下面調用DLL的調用端中寫入

hhookGetMsg=::SetWindowsHookEx(WH_GETMESSAGE,GetMessageHookProc,::GetModuleHandle(TEXT("dll.dll")),threadId);

//參數1:鉤子類型

//參數2:鉤子處理函數

//參數3:鉤子所在的模塊

//參數4:鉤子要攔截的線程ID,如果要設置全局鉤子,這裏給0。

把這個SetWindowsHookEx()函數寫在壹個導出函數中,允許調用dll文件的程序調用

_declspec(dllexport) void SetHook(DWORD threadId)

{

hhookGetMsg=::SetWindowsHookEx(WH_GETMESSAGE,GetMessageHookProc,::GetModuleHandle(TEXT("dll.dll")),threadId);

}

SetHook()就是本dll的導出函數

3.在鉤子處理函數中寫入功能,當鉤子截取到WM_NULL消息的時候,註入DLL文件。由於WM_NULL消息,是個沒用的消息,應用程序壹般不會收到這個消息,除非我們自己發送壹個這個消息,所以我們在註入DLL的時候,只要給要註入的應用程序發壹個WM_NULL消息,當鉤子截取到WM_NULL的時候就註入鉤子,就可以了。

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

{

MSG* pMsg=(MSG*)lParam;

if(WM_NULL==pMsg->message)

::LoadLibraryW(TEXT("D://MyDLL.dll"));

}

好了,編譯DLL項目,產生DLL文件。

4.編寫調用端,調用鉤子

首先獲取窗口句柄

HWND FindWindow( LPCTSTR lpClassName,

LPCTSTR lpWindowName

);

返回窗體句柄。hWnd.

hWnd=FindWindow(0,要註入dll的窗體的名稱(例如:千千靜聽))

利用hWnd,查找窗體線程ID

threadId=GetWindowThreadProcessId(hWnd,0);

好了,我們有了線程ID了,可以調用鉤子了。

SetHook(threadId);

這時鉤子已經加載到目標線程中了。

向目標窗體發送WM_NULL消息

SendMessage(hWnd,WM_NULL,0,0);

鉤子會在目標窗體受到消息前受到WM_NULL消息。由於鉤子處理函數中做了判斷,當受到WM_NULL消息時,加載DLL文件。所以DLL文件就註入到目標線程中了。

  • 上一篇:霍思燕最新圖片(時尚造型展現優雅氣質)
  • 下一篇:插畫動物圖片黑白初學-讀書筆記的小插圖怎麽畫?求圖片
  • copyright 2024編程學習大全網