星號(hào)密碼查看工具大家都用過吧,現(xiàn)在我們自己來寫個(gè)超級(jí)簡(jiǎn)單的。其實(shí)密碼框是一個(gè)Windows的一個(gè)子窗口,顯示星號(hào)是因?yàn)槊艽a框設(shè)置了EM_SETPASSWORDCHAR屬性,只要我們把密碼框的EM_SETPASSWORDCHAR屬性給去掉那么密碼就會(huì)以明文顯示了,我們可以給程序發(fā)送消息去掉EM_SETPASSWORDCHAR屬性。通過安裝鼠標(biāo)鉤子監(jiān)視鼠標(biāo)動(dòng)作,如果用戶單擊的是密碼框那么就發(fā)送一個(gè)去除密碼屬性的消息。星號(hào)密碼查看器可以查看顯示為星號(hào)的真實(shí)密碼,使用方法很簡(jiǎn)單,先用鼠標(biāo)左鍵激活星號(hào)密碼編輯框(單擊即可),按住CTRL鍵不動(dòng),同時(shí)單擊鼠標(biāo)左鍵。對(duì)非標(biāo)準(zhǔn)編輯框本程序無能為力。請(qǐng)不要將其用于非法用途。綠色免安裝,單文件免費(fèi)版。 本文使用的編程工具為VC6.0,具體實(shí)現(xiàn)步驟和代碼如下: 1.生成一個(gè)基于對(duì)話框的程序pass。打開passDlg.cpp,加入下面的全局變量和鼠標(biāo)鉤子函數(shù)。 HHOOK g_hHook = NULL;//全局鉤子函數(shù)句柄 //鼠標(biāo)鉤子函數(shù) LRESULT CALLBACK HookProc( int code, WPARAM wParam,LPARAM lParam ) { HWND hwnd; POINT point; GetCursorPos(&point);//得到鼠標(biāo)位置 hwnd=::WindowFromPoint(point);//得到包含鼠標(biāo)的窗口句柄 long nStyle=::GetWindowLong(hwnd,GWL_STYLE);// 得到窗口風(fēng)格 文/德州科技職業(yè)學(xué)院 冷風(fēng) EVENTMSG *event=(EVENTMSG *)lParam; if(event->message==WM_LBUTTONDOWN)//是否為鼠標(biāo)左鍵 { if(nStyle & ES_PASSWORD)//是否為密碼框 { ::PostMessage(hwnd, EM_SETPASSWORDCHAR,0,0);//去掉密碼屬性 } } return CallNextHookEx(g_hHook,code,wParam,lParam); } 需要注意的是,程序中::PostMessage(hwnd, EM_SETPASSWORDCHAR,0,0); 只能是PostMessage而不能用SendMessage代替。 2.添加“開始探測(cè)”按鈕及響應(yīng)函數(shù)OnOK()在函數(shù)中安裝鉤子 void CPassDlg::OnOK() { g_hHook=SetWindowsHookEx(WH_JOURNALRECORD,HookProc,GetModuleHandle(NULL),0); //安裝鉤子 } 鉤子的第三部分使用GetModuleHandle(NULL)意為把自己做為保存鉤子的DLL 3.添加“取消退出”按鈕及響應(yīng)函數(shù)OnExit() 在函數(shù)中卸載鉤子 void CPassDlg::OnExit() { if(g_hHook) UnhookWindowsHookEx(g_hHook);//卸載鉤子 exit(0); } 現(xiàn)在就完工了,打開我們的程序,按下“開始探測(cè)”再打開需要輸入密碼的程序試試,是不是以明文顯示了?用這個(gè)小程序可以搞定系統(tǒng)的密碼設(shè)置,outlook或防范不嚴(yán)的程序密碼,但對(duì)有專門防范的程序就不行了比如新版QQ。 |
|