鼠标键盘钩子截获密码
输入捕获总结
输入捕获总结
简介
输入捕获是计算机领域中的一项技术,它可以记录和分析用户的输入行为。输
入行为包括键盘输入、鼠标点击、触摸屏操作等。通过对输入捕获的分析,我们可以更好地了解用户的行为习惯,优化用户体验,提高软件的质量。
输入捕获的原理
输入捕获的原理是通过操作系统提供的接口,捕获用户输入的相关信息。在Windows操作系统中,可以使用钩子(hook)来实现输入捕获。钩子可以截获特
定的Windows消息,例如键盘输入消息(WM_KEYDOWN)、鼠标点击消息
(WM_LBUTTONDOWN)等。当钩子被触发时,可以在回调函数中获取到输入事
件的详细信息,例如按下的键盘键码、鼠标点击的坐标等。
输入捕获的应用
输入捕获在计算机领域有着广泛的应用。以下是输入捕获的几个常见应用场景:
1. 用户行为分析
通过输入捕获,可以收集并分析用户的输入行为,从而了解用户的使用习惯和
偏好。这对于设计产品、优化用户体验非常重要。例如,在网站的用户行为分析中,可以统计用户的鼠标点击位置和频率,以及键盘输入的内容和速度,从而优化页面布局和交互方式。
2. 安全防护
输入捕获可以用于安全防护,例如实现键盘记录器的功能。键盘记录器可以记
录用户在计算机键盘上输入的内容,例如账号密码等敏感信息。通过输入捕获,可以检测和阻止恶意程序对用户输入信息的获取,提高系统的安全性。
3. 软件调试和性能优化
在软件开发过程中,输入捕获对于软件调试和性能优化也非常有帮助。通过捕
获用户的输入行为,可以定位软件中可能存在的bug和性能瓶颈。例如,在游戏
开发中,可以捕获玩家的键盘输入和鼠标点击来优化游戏的响应速度和控制体验。
Windows文本框星号密码查看
Windows文本框星号密码查看器本人2002的学习作品(祝大家情人节快乐)1、 设计原理:注册一个系统级鼠标挂钩,通过监测系统鼠标所在Windows窗口来获取密码,成功获取密码之后,通过发送自定义的Windows系统消息,到宿主程序。2、 Hook动态链接库设计原理:采用Windows Hook技术[鼠标挂钩],切入远程进程内部,并监测当前系统鼠标所在位置的当然窗口句柄(通过Windows APIWindowFromPoint()),获取窗口句柄之后,判断当然窗口是否为文本框,并进一步判断是否为密码框,当发现是密码输入框时,当此窗口发送WM_GETTEXT消息,获取密码。成功获取密码之后,发现自定义的WM_COPYDATA消息到宿主程序;具体实现步骤简介:1. 设置系统鼠标挂钩:hkMouseHook := SetWindowsHookEx(WH_MOUSE,@CXX_MouseHookProc,hInstance,0);2. 注销系统鼠标挂钩:UnHookWindowsHookEx(hkMouseHook);3. 监测当然窗口及窗口风格判断:MousePos := pMhs.pt;wnd := WindowFromPoint(pmhs.pt);style := GetWindowLong(wnd,GWL_STYLE);if (style and ES_PASSWORD) = ES_PASSWORD thenbegin//发现密码窗口end;4. 向密码框获取密码串:SendMessage(wnd,WM_GETTEXT,256,Integer(@MouseTitle[0]));5. 发送自定义消息到宿主程序:GetMem(pmi,sizeof(TMouseInfo));pmi.MouseX := pt.X;pmi.MouseY := pt.Y;pmi.MouseTitle := pwd;GetMem(pcds,sizeof(TCopyDataStruct));pcds.dwData := 9910;pcds.cbData := sizeof(TMouseInfo);pcds.lpData := pmi;SendMessage(hDec,WM_COPYDATA,0,LPARAM(pcds));3、 宿主程序设计原理:我的宿主程序是自己学习Windows SDK开发时作品,采用纯SDK实现。SDK的编程不用废话了吧。在这个工具程序中,只需要在系统消息处理方法中,增加一个对WM_COPYDATA的拦截及处理过程就可能了。case uMsg ofWM_COPYDATA:beginCXX_ReceiveCopyData(uMsg);end;……end;4、 应用技术提点:这个是本人在2002年学习Microsoft Windows SDK编程技术时的学习作品。当然,有兴趣的话,你完全可以将其Hook进一步进行隐藏,并为其增加“端口反弹”或者“半连接”功能,宿主程序可以是自己的远程XXXXXX,哈哈,这样发布出来的话,想知道的东西就多了……5、 完整源码代码:1. Hook鼠标挂钩部分:{产品名称: Windows 密码工具[Window98/NT/2000/XP]功能描述: 截取Windows密码编辑框中的密码串采用纯粹的SDK开发能捕捉windows98/NT/2000/XP的密码框中的"*"密码开发平台: Windows2000 + Delphi
利用鼠标键盘钩子截获密码
利用鼠标键盘钩子截获密码
利用鼠标键盘钩子截获密码
安装钩子:
调用函数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,完成。
第4章钩子函数和窗口子类化
第4章钩子函数和窗口子类化
钩子是操作系统消息处理的一种机制。通过钩子,应用程序可以安装一个钩子回调过程让系统调用,从而监视系统中的消息队列,在这些消息到达目标窗口之前对这些消息进行处理。
本章主要介绍钩子函数的基本概念以及几种常用钩子的应用举例。
4.1 钩子函数
早在Windows3.x的时候,就有了钩子函数,它经历了Windows9x/NT/2000/XP/2003各个操作系统,始终保持了最大的兼容性。可以说大部分的钩子函数适用于现在所有的Win32操作系统,钩子函数在系统编程方面有着广泛的应用前景。
首先应该承认钩子会降低系统的性能,因为它增加系统处理每一个消息的开销,所以用户除非必要才安装钩子,而且还要尽可能早地去除钩子。
操作系统支持多种类型的钩子,每种类型都提供了它特有的消息处理机制,比如应用程序使用WH_MOUSE钩子只能监视鼠标的消息队列。对于每种类型的钩子,系统都维护一个各自独立的钩子链,钩子链是一个指向用户提供的回调函数钩子过程的链表指针。当与特定类型的钩子相关的窗口消息发生时,系统会把消息依次传递给钩子链中的每一个回调过程,传递的过程由用户定义的回调过程实现。一般情况下,用户提供的钩子回调过程必须调用钩子链中的下一个回调过程。否则钩子处理可能会中断,出现不可预测的结果。钩子过程可以监视窗口消息,也可以修改甚至停止钩子消息的继续传递,不让它到达钩子链中的下一个目标过程。
钩子过程需要用户调用SetWindowsHookEx函数进行安装。钩子过程一般遵循下面的调用规范。
LRESULT CALLBACK HookProc(intnCode,WPARAMwParam,LPARAMlParam);其中HookProc是应用程序提供的函数名。nCode参数是一个钩子标识码,钩子过程会利用它决定下一步进行的操作。这个标识码的值与安装的钩子类型有关。每种类型都有它的自身定义。后面两个参数的定义依赖于nCode参数,一般用于存放与窗口消息相关的内容。SetWindowsHookEx函数会自动安装一个钩子过程,这个过程位于钩子链表的头部,最后安装的钩子函数总是最先得到响应。前面的钩子处理过程可以决定是否调用钩子链中的下一个过程,这可以通过调用CallNextHookEx函数实现。
阻止木马病毒记录帐号密码方法
阻止木马病毒记录帐号密码方法
按键记录程序是不法分子(例如黑客)开发的可以记录用户键盘操作的间谍软件。黑客可利用此软件记录用户输入的信息,从而盗取用户的MSN、QQ、电子邮件、网络游戏、网上银行等的账号和密码以及其他的隐私信息,给用户带来损失。对付按键记录程序除养成良好的安全习惯,不打开可疑邮件和可疑网站;及时给系统打上补丁;安装专业的防病毒软件进行实时监控外,还可以在输入账号和密码时,不使用物理键盘而是使用按键记录程序无法记录用户按键操作的"虚拟键盘"进行输入,大大方方地对按键记录程序说不。
一、软键盘
所谓的软键盘并不是在键盘上的,而是通过软件模拟键盘并显示屏幕上,用户通过鼠标点击软键盘输入字符,这样能够很好地防止木马程序记录键盘输入的密码,一般在一些银行的网站上要求输入账号和密码的地方容易看到它的身影(如图1)。
图1
二、屏幕键盘
然而并不是所有网银系统或游戏网站都会提供软键盘供用户输入账号和密码,为此你可以请Windows系统的屏幕键盘相助。
Windows系统从XP开始即自带一个屏幕键盘,其程序文件是OSK.exe,只要运行此程序,在屏幕上会弹出一个非常漂亮的键盘,这个键盘是一个带有所有标准键的可视化键盘。可以使用鼠标或另一个指针设备选择键,也可以使用单个键或一组键在屏幕上的键之间循环切换,使用起来非常方便。以下是在Windows系统打开屏幕键盘的通用的方法:
1.按下Windows徽标键+R键。
2在“运行”对话框的“打开”后的方框中,键入“OSK”(如图2)。
图2
3.单击"确定"按钮。
钩子函数捕捉键盘消息
利用钩子函数来捕捉键盘响应的windows应用程序一:引言:
你也许一直对金山词霸的屏幕抓词的实现原理感到困惑,你也许希望将你的键盘,鼠标的活动适时的记录下来,甚至你想知道木马在windows操作系统是怎样进行木马dll的加载的…..其实这些都是用到了windows的钩子函数。因此本文将对钩子函数的相关知识进行阐述。当然,本文的目的并不是想通过此程序让读者去窃取别人的密码,只是由于钩子函数在windows系统中是一个非常重要的系统接口函数,所以想和大家共同的探讨,当然本文也对怎样建立动态连结库(DLL)作了一些简单的描述。(本文的程序为vc6.0的开发环境,语言是:C和win32 api)。
二:钩子概述:
微软的windowsX操作系统是建立在事件驱动的机制上的,也就是通过消息传递来实现。而钩子在windows操作系统中,是一种能在事件(比如:消息、鼠标激活、键盘响应)到达应用程序前中途接获事件的机制。而且,钩子函数还可以通过修改、丢弃等手段来对事件起作用。
Windows 有两种钩子,一种是特定线程钩子(Thread specific hooks),一种是全局系统钩子(Systemwide hooks)。特定线程钩子只是监视指定的线程,而全局系统钩子则可以监视系统中所有的线程。无论是特定线程钩子,还是全局系统钩子,都是通过SetWindowsHookEx ()来设置钩子的。对于特定线程钩子,钩子的函数既可以是包含在一个.exe也可以是一个.dll。但是对于一个全局系统钩子,钩子函数必须包含在独立的dll中,因此,当我们要捕捉键盘响应时,我们必须创建一个动态链接库。但是当钩子函数在得到了控制权,并对相关的事件处理完后,如果想要该消息得以继续的传递,那么则必须调用另一个函数:CallNextHookEx。由于系统必须对每个消息处理,钩子程序因此增加了处理的负担,因此也降低了系统的性能。鉴于这一点,在windows ce中对钩子程序并不支持。所以当程序完成并退出时,应当释放钩子,调用函数:UnhookWindowsHookEx。
用钩子截获系统汉字及字符输入的方案
但 由于 要 监 视 的 是 WM— H R,而 方 案 _ 、三 只 监 视 CA
其中: hou : n ;窗 口Байду номын сангаас 柄 fc s w d/ h /
m i :i c / 入 上 下 文 ymc m ;输 h /
处 理 。基本 步骤 如 下 : 通过 St no s ok x ) P ① e dw H oE ( A I函 Wi
数安装钩子 ; 在使用 完后 , ② 一般是在程序结束前 , 使用u — n
将 自 己 连 接 到 系 统 页 文 件 中 , 后 调 用 Ma V e O Fl( 获 得 然 p iw fi ) e
G t sa e P e Mesg 的消 息 , 视 鼠标 、 盘 输 入 和发 送 eMesg 或 ek sa e 监 键 到 队列 中的其 它消 息 。 方 案 3 WH— E B A D H o 使 应 用 程 序 可 以 监 视 由 : K Y O R ok
打开一 个文件 . 而建立 文件 对象 , 从 获取文 件 的句柄 , 可通 过 这
调用C etFl (或 O e Fl(等 函数得 到 ; 为 指定 的文件 创 rae i ) pn i ) e e ②
建一 个 指定 名 称 或无 名 的文 件 映射 对 象 ,这 通 过 调 用C et ra.
需 要 一 个 指 向 文 件 数 据 的 指 针 , 过 调 用 M p e O Fl ( 获 通 a Vi fi ) w e
钩子函数在盗号木马程序中的应用研究
账 户会 在 一 夜之 问被 病 毒 抛 售 一 空 证 券 大 盗 病 毒 是 一 种 盗 号
I t n o eW P i t C d . ARAM n .
参 数 w aa 和 1ra 包 含 所 钩 消 息 的 信 息 . 比 如 鼠 标 位 P rm P rm o
木 马病 毒 .中 了该 病 毒 的 计算 机 将 被 盗 取 关 于多 家 证 券 交 易 系 置 和 鼠标 状 态 或 者 键 盘 按 键 等 n o e是 指 有 关 消 息 本 身 的 信 Cd 统 的交 易 帐户 和 密 码 这 种 病 毒 在 2 0 0 7年 和 20 0 8年 又 出 现 了 息 . 如是 否 从 消 息 队列 中 移 出 我 们 可 以先 在 钩 子 函 数 中 实 现 比
利用日志钩子函数实现Windows系统信息的捕获
个 依 赖 于 它 的应 用 程 序 找 不 到 D L时 就 会 失 败 , 且 它 使编 程也 变 得 复 杂 . L 并
日志 钩 子 函数 在 系统 中优 先 级 最 大 , 般 情 况 下 日志 钩 子 是 在 系统 之 前 就 处 理 了 它 所 需 要处 理 的 信 一 息, 因此 对 于 日志钩 子 来 说 , 统 无 法将 它 所 需 的信 息 屏 蔽 , 日志 钩 子 无 法提 取 . 系 让 日志 钩 子 函 数 可 以提 取 出别 的钩 子 函数 无 法 提 取 的信 息 . 虽 然 严 格 地 说 日志 钩 子 是 全 局 钩 子 的一 种 , 是使 用 日志 钩 子 不 需 要 动 态链 接 库 , 全 局 钩 子则 必 须 但 而 要用 动 态 链 接 库 . 使 用 日志 钩 子 函数 时 , 先 安 装 钩 子 , 装 钩 子 函 数 我 们 一 般 通 过 HH K S t n 在 首 安 OO eWi.
中 图分 类 : P 1 . 1 T 3 11.
文 献 标 识 码 : A
文 章 编 号 :0 7—8 5 2 o ) —0 6—0 10 5 x( o 2 0 4 8 4
O 引 言
Android自动密码锁定系统设计与实现
Android自动密码锁定系统设计与实现
依照软件工程中软件开发的相关理论对系统进行了分析和设计,我们的“智点”软件主要是应当下智能化时代以及安卓系统的普及,我们就基于Android手机系统做了一款手机与电脑交互,实现锁定电脑锁定的软件。Android自动密码锁定系统主要运用到JA V A编程;API (Application Programming Inter face 应用程序编程接口);UI界面优化技术(User Interface);安卓开发技术。
标签:自动锁定;安卓与电脑交互;设计
1 概述
随着信息时代的来临,使人们产生“智能”这一名词的概念,而中国手机用户量接近13亿,中国电脑用户量接近12亿,随着智能手机与智能化电脑的用户量日益增加,智能化产业成为现今一个热门行业,此项目将电脑与智能手机紧密联系起来,将会是智能化产业中的又一技术的革新。
2 系统设计与实现
本系统采用了C/S客户端与服务器模式的体系结构,以JA V A语言编写的服务器,以SOCKET打开连接网络的端口,利用局域网的通用性,让客户端与服务器端进行连接,从而实现交互。
整个锁屏系统的功能结构主要是包含以下几个部分:
(1)安全权限的设置,我们为使用我们锁屏系统的用户都设置了账号与密码,必须登陆成功才能开启PC端的服务器。
(2)登录成功后,根据服务器所显示所在局域网的网段,手机端连接服务器,从而实现PC端与客户端对接,进而对PC端进行控制。
(3)锁定屏幕时,鼠标只能限制在一定区域内移动,而整个屏幕的亮度处于节能亮度的状态,达到节能低碳的作用。
键盘鼠标属性和相关钩子
键盘// 扫描码
#define VKK_ESC 0x011b //ESC
#define VKK_F1 0x3b00 //F1
#define VKK_F2 0x3c00 //F2
#define VKK_F3 0x3d00 //F3
#define VKK_F4 0x3e00 //F4
#define VKK_F5 0x3f00 //F5
#define VKK_F6 0x4000 //F6
#define VKK_F7 0x4100 //F7
#define VKK_F8 0x4200 //F8
#define VKK_F9 0x4300 //F9
#define VKK_F10 0x4400 //F10
#define VKK_~ 0x2960 //~
#define VKK_1 0x0231 //1
#define VKK_2 0x0332 //2
#define VKK_3 0x0433 //3
#define VKK_4 0x0534 //4
#define VKK_5 0x0635 //5
#define VKK_6 0x0736 //6
#define VKK_7 0x0837 //7
#define VKK_8 0x0938 //8
#define VKK_9 0x0a39 //9
#define VKK_0 0x0b30 //0
#define VKK_- 0x0c2d //-
#define VKK_= 0x0d3d //=
#define VKK_¥ 0x2b5c //¥
#define VKK_BackSpace 0x0e08 //退格键
c语言中钩子函数和回调函数的区别
C语言中钩子函数和回调函数的区别
一、定义
1. 钩子函数:钩子函数是在特定事件发生时自动调用的函数,用于拦
截和处理这些事件。在C语言中,钩子函数通常用于实现操作系统的
消息处理机制,比如监控键盘、鼠标等输入设备的输入事件。
2. 回调函数:回调函数是作为参数传递给其他函数的函数,用于在特
定事件发生时被调用。在C语言中,回调函数通常用于实现异步操作,比如在网络通信中接收到数据时的处理。
二、调用方式
1. 钩子函数:钩子函数是由操作系统或特定的库自动调用的,程序员
无法直接调用钩子函数。
2. 回调函数:回调函数是作为参数传递给其他函数的,程序员需要在
调用该函数时指定回调函数的名称或指针。
三、作用范围
1. 钩子函数:钩子函数对系统的事件进行拦截和处理,可以改变系统
的行为。比如在Windows操作系统中,可以使用钩子函数来拦截键
盘输入,实现快捷键功能。
2. 回调函数:回调函数用于在特定事件发生时被调用,通常用于实现
异步操作或事件通知。比如在网络通信中,可以使用回调函数来处理
接收到的数据。
四、编程实现
1. 钩子函数:在C语言中实现钩子函数通常需要调用操作系统或特定库提供的函数,并注册钩子函数。钩子函数的实现方式因操作系统和应用场景的不同而异。
2. 回调函数:在C语言中实现回调函数通常需要定义一个函数指针类型,并将回调函数作为参数传递给其他函数。在特定事件发生时,其他函数会调用指定的回调函数。
以上是C语言中钩子函数和回调函数的区别,虽然它们都涉及到在特定事件发生时调用函数,但是它们的定义、调用方式、作用范围和编程实现方式都有所不同。深入理解这两种函数的区别对于提高程序员的编程技能和理解系统底层原理是非常有帮助的。C语言中钩子函数和回调函数的区别
锟斤拷目6_锟节客匡拷锟筋攻锟斤拷
项目6 黑客口令攻击
【开发语言及实现平台】
1.开发语言
Visual C++.NET 2003。
2.软件平台
Windows NT/2000/XP/2003。
【实验目的】
(1)熟悉V C++.NET 网络编程。 (2)了解黑客邮箱口令攻击的原理。 (3)了解黑客QQ 口令攻击的原理。
【实验要求】
(1)用字典法实现邮箱口令攻击的基本功能。
(2)用伪造登录界面法实现QQ2000版口令攻击的基本功能。 (3)用键盘监听法实现QQ2000版口令攻击的基本功能。
【实验原理】
1.邮箱口令破解基本原理
尽管现在可以选用许多方法进行用户身份验证,但多数用户仍然通过在键盘上结合输入自己的用户名和密码来登录自己的邮箱。为简化密码的记忆任务,用户经常在每个系统中使用相同或相似的密码,而且多数用户会在允许的情况下选择简单记忆的密码,例如自己的生日、父母的姓名。对于攻击者来说,简短密码相对容易破解。攻击者用以破解受害者密码的部分常用方法包括如下几种。
(1)傻瓜解密法:攻击者通过反复猜测可能的字词(例如用户账户名、出生年月等)来使用用户账户完成登录。由于部分私人信息难以获取,本工程使用用户账户名加上一些简单数字组合,尝试密码破解的可能性。
(2)字典取词法:攻击者使用包括字词文本文件的自动程序。由于密码由英文单词组成的可能性很大,攻击者通过从字典文件中依次取词,并添加一些简单数字,反复尝试登录目标系统。
(3)暴力破解法:此类攻击是字典的变体,但此类攻击的宗旨是破解字典攻击所用文本文件中可能没有包括的密码。理论上该方法可以破解一切密码,但出于网络条件,通常需要花费很长的等待时间。更好的方法是在脱机状态下将密码中可能出现的字符进行排列组合,并将这些结果放入破解字典。在连接状态时再通过每次尝试时使用文本文件中的不同字词,由程序反复尝试登录目标系统。
破解网络密码的十个方法
破解网络密码的十个方法
来源:115
破解网络密码—暴力穷举
密码破解技术中最基本的就是暴力破解,也叫密码穷举。如果黑客事先知道了账户号码,如邮件帐号、QQ用户帐号、网上银行账号等,而用户的密码又设置的十分简单,比如用简单的数字组合,黑客使用暴力破解工具很快就可以破解出密码来。因此用户要尽量将密码设置的复杂一些。
破解网络密码—击键记录
如果用户密码较为复杂,那么就难以使用暴力穷举的方式破解,这时黑客往往通过给用户安装木马病毒,设计“击键记录”程序,记录和监听用户的击键操作,然后通过各种方式将记录下来的用户击键内容传送给黑客,这样,黑客通过分析用户击键信息即可破解出用户的密码。破解网络密码—屏幕记录
为了防止击键记录工具,产生了使用鼠标和图片录入密码的方式,这时黑客可以通过木马程序将用户屏幕截屏下来然后记录鼠标点击的位置,通过记录鼠标位置对比截屏的图片,从而破解这类方法的用户密码。
破解网络密码—网络钓鱼
“网络钓鱼”攻击利用欺骗性的电子邮件和伪造的网站登陆站点来进行诈骗活动,受骗者往往会泄露自己的敏感信息(如用户名、口令、帐号、PIN码或信用卡详细信息),网络钓鱼主要通过发送电子邮件引诱用户登录假冒的网上银行、网上证券网站,骗取用户帐号密码实施盗窃。
破解网络密码—Sniffer(嗅探器)
在局域网上,黑客要想迅速获得大量的账号(包括用户名和密码),最为有效的手段是使用Sniffer程序。Sniffer,中文翻译为嗅探器,是一种威胁性极大的被动攻击工具。使用这种工具,可以监视网络的状态、数据流动情况以及网络上传输的信息。
键盘记录
菜鸟学习中。。。争取早日专正,呵呵。贴上刚开学时写的一份报告,一次小作业。没啥水平。和我一样菜得一塌糊涂的,可以看看。。。本人信息安全科班生,水平之低,令人发指。对诸位自学成才的十分佩服。以后还请多多指教。先行谢过Ring3层键盘记录的实现本文主要论述、对比了用户层主要的三种实现键盘记录的方法:利用钩子函数、轮询键盘消息和直接从输入设备获取数据。在木马程序中,键盘记录是不可缺少的一部分,因为它是窃取别人电脑上数据的关键部分,记录这些程序的账号、密码主要就是靠键盘记录实现的。然后再将获得的账号、密码发到某个指定的邮箱里或某个FTP或网站服务器上。 在用户层实现键盘记录远比在系统层实现简单,是比较常用的方法。1、利用钩子函数最简单的方法是使用SetWindowsHook函数。钩子(Hook),是Windows消息处理机制中的监视点,应用程序可以在这里安装一个监视函数以监视指定进程(本进程或其它进程都可以)发生的事件。当监视的事件消息到达后,钩子函数可以在目标窗口处理函数之前处理它。1.1 Hook的分类总的来说, Hook可以分为Local Hook (本地钩子) ,和Remote Hook (远程钩子) 。Local Hook对本进程中发生的事件进行监视,对系统的影响比较小;而Remote Hook则可以对其他进程中发生的事件进行监视,针对整个系统的事件进行拦截。RemoteHook又可以分为Thread Hook (线程钩子)和GlobalHook (全局钩子) 。线程钩子能够监视系统内其他进程中指定线程的事件(此时该Hook函数可以放置在DLL中,也可以放置在应用程序的模块段) ;而全局钩子能够监视系统内所有进程空间地址中所有线程的事件(此时该Hook 函数必须放置在DLL中) 。1.2 Hook的实现方法1.2.1安装和卸载Hook的方法利用Ap i函数HHOOK SetWindowsHookEx ( int idHook, HOOKPROC lpfn, H INSTANCE hMod,DWORD dwThread Id) ,进行钩子的安装。其中:第一个参数为指定钩子的类型(共15种);第二个参数为标识Hook函数的入口地址;第三个参数为钩子函数所在模块的句柄,如果是Local Hook,此值为0;第四个参数为希望挂钩线程的线程ID,为0时则拦截整个系统的消息。SetWindowsHookEx总是将我们的Hook函数放置在挂接函数链的顶端,使得应用程序接收到相应消息时,我们的Hook函数能第一个被调用。Hook函数必须按照回调函数的格式声明:LRESULT W INAP I HookProc ( int nCode,WPARAM wParam,LPARAM lParam)。其中nCode指定Hook类型, wParam, iParam的取值随nCode 不同而不同,它代表了某种类型的Hook的某个特定动作。如果Hook函数需要将消息传递给下一个过滤函数, 则在该Hook 函数返回前还需要调用一次CallNextHookEx( )函数。
钩子函数使用
一:引言: 你也许一直对金山词霸的屏幕抓词的实现原理感到困惑,你也许希望将你的键盘,鼠标的活动适时的记录下来,甚至你想知道木马在windows操作系统是怎样进行木马dll的加载的…..其实这些都是用到了windows的钩子函数。因此本文将对钩子函数的相关知识进行阐述。当然,本文的目的并不是想通过此程序让读者去窃取别人的密码,只是由于钩子函数在windows系统中是一个非常重要的系统接口函数,所以想和大家共同的探讨,当然本文也对怎样建立动态连结库(DLL)作了一些简单的描述。(本文的程序为vc6.0的开发环境,语言是:C和win32 api)。二:钩子概述:微软的windowsX操作系统是建立在事件驱动的机制上的,也就是通过消息传递来实现。而钩子在windows操作系统中,是一种能在事件(比如:消息、鼠标激活、键盘响应)到达应用程序前中途接获事件的机制。而且,钩子函数还可以通过修改、丢弃等手段来对事件起作用。Windows 有两种钩子,一种是特定线程钩子(Thread specific hooks),一种是全局系统钩子(Systemwide hooks)。特定线程钩子只是监视指定的线程,而全局系统钩子则可以监视系统中所有的线程。无论是特定线程钩子,还是全局系统钩子,都是通过SetWindowsHookEx ()来设置钩子的。对于特定线程钩子,钩子的函数既可以是包含在一个.exe也可以是一个.dll。但是对于一个全局系统钩子,钩子函数必须包含在独立的dll中,因此,当我们要捕捉键盘响应时,我们必须创建一个动态链接库。但是当钩子函数在得到了控制权,并对相关的事件处理完后,如果想要该消息得以继续的传递,那么则必须调用另一个函数:CallNextHookEx。由于系统必须对每个消息处理,钩子程序因此增加了处理的负担,因此也降低了系统的性能。鉴于这一点,在windows ce中对钩子程序并不支持。所以当程序完成并退出时,应当释放钩子,调用函数:UnhookWindowsHookEx。下面我们将举一个例子(捕捉键盘)来详细的讲解钩子函数的程序设计。三:程序的设计:I:设置钩子设置钩子是通过SetWindowsHookEx ()的API函数.原形: HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod,DWORD dwThreadId)idhook:装入钩子的类型.lpfn: 钩子进程的入口地址hMod: 应用程序的事件句柄dwThreadId: 装入钩子的线程标示参数:idHook:这个参数可以是以下值:WH_CALLWNDPROC、WH_CALLWNDPROCRET、WH_CBT、WH_DEBUG、WH_FOREGROUNDIDLE、WH_GETMESSAGE、WH_JOURNALPLAYBACK、WH_JOURNALRECORD、WH_KEYBOARD、WH_KEYBOARD_LL、WH_MOUSE、WH_MOUSE_LL、WH_MSGFILTER、WH_SHELL、WH_SYSMSGFILTER。对于这些参数,我不想一一加以解释,因为MSDN
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用鼠标键盘钩子截获密码。
源码示例:/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_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://可以起到截儿消息的目的,我们这里调用之。
}