利用滑鼠鍵盤鉤子截獲密碼。
原始碼示例: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 ...