免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 各类编程 > 挂钩xxxkeyevent实现安全键盘输入

挂钩xxxkeyevent实现安全键盘输入

时间:2012-02-18 18:22来源:未知 整理:寂涯网络 点击:

在输入密码等隐私信息的时候,用户总是不希望自己所输入的 信息被软件监听到。各种安全输入控件、密码保护器,大多会提供一定程度的反键盘监听的功能。然而,部分安 全输入控件,仅仅通过不断注册WH_DEBUG钩子,来阻止消息钩子获取按键信息,这种做法 是相当脆弱的。先不考虑WH_DEBUG钩子被卸除的可能性,除了广为键盘记录器所用的消息 钩子之外,Windows操作系统提供了很多记录按键信息的方式,如GetAsyncKeyState、 GetKeyboardState等api函数,通过调用这些函数,恶意软件完全可以绕过此类保护。即 使这些方法也被屏蔽,恶意软件甚至可以通过DirectInput等更为复杂的接口,获取到按 键信息。可以发现,如果要通过一一阻止用户层获取按键信息的各种方法来实现安全键盘输 入,其复杂度是难以想象的。因此,有的安全输入控件会选择直接访问键盘硬件,然而除了传统的?3/2键盘之外,还存在仍8键盘、蓝牙无线键盘等多种类型,对这些产品的兼容性一直是一个很大的问题,此外,对于远程桌面等访问方式,直接访问硬件显然行不通。而本 文所要介绍的方法,从内核入手,仅需挂钩一个函数,就可以在按键信息到达用户层之前进 行处理,在确保安全性的同时降低了复杂程度。
在按键事件发生的时候,xxxkeyevent的函数会被调用。111&67£¥6的函数将按键消息分 发到用户层的各种接口,包括更新八巧0洗印31站1调用各种消息钩子处理函数,及发送消 息到窗口等等。通过挂钩此函数,我们可以在按键信息被发送到用户层之前进行处理。 xxxKeyEvent函数是win32子系统内核驱动程序win32k. sys所包含的未导出的私有函数。 通过下载其对应的调试符号文件,我们可以在“!《«^等调试工具中找到它。需要注意的是, 贾化32匕878加载在会话空间(session address space)中,在System等非GUI进程中是 不可见的,如果要对其进行调试分析,需要切换到如1进程的环境中。在“!《«^中输入以 下命令即可完成。 
kd> !process 0 0 csrss. exe
PROCESS 81233020 SessionId: 0 Cid: 0254 Peb: 7ffd7000 ParentCid: 0214 DirBase: 04197000 ObjectTable: el4c3c20 HandleCount: 270.
Image: csrss.exe
当前系统中csrss.exe进程的EPROCESS结构地址为0x81233020,接下来可以通 过.process命令切换到此进程的环境。
kd> . process /i 81233020   
You need to continue execution (press ,g, <enter>) for the context
to be switched. When the debugger breaks in again, you will be in
the new process context.   
kd> g   
Break instruction exception - code 80000003 (first chance)
nt!Rt1pBreakWithStatusInstruction:   
804e4592 cc int 3   

成功后,windbg会在csrss. exe进程的环境中中断下来,接下来就可以查看xxxKeyEvent 函数了。
之后,可以对这个函数设置断点进行分析。 kd> bp xxxKeyEvent
按下任意键,就会在1117f1^上中断下来,说明&&&{^^^^^^^盘有动作时会被 调用。可以发现每按下或松开一个键,此函数就会被调用一次,分别对应KeyDown, KeyUp
通过进一步的分析,可以知道111仏7£仲的函数调用方式为#(^^11,共有8个参数,并且 第一个参数为按键的虚拟键值。
为了对按键信息进行处理,本文中简单的使用lastkey^$*ft#,之后由用户态程 序通过IoControl取出。
ULONG __stdcall hooked_xxxKeyEvent(ULONG al, ULONG a2, ULONG a3, ULONG a4, ULONG a5, ULONG a6, ULONG a7, ULONG a8)
{
lastkey = al; return 1;
注意这里并没有调用原函数,因而所有的按键信息都不会发送到用户层,运行示例程序 时可以发现即使输入焦点切换到别的窗口上,仍只能在安全输入框中进行输入。读者可以在 输入框失去焦点时进行处理,或者卸除钩子,以进一步完善。教程分享(http://www.jybase.net
由于111&^£^的函数是未导出的私有函数,因此在挂钩前需要对其定位,在本文中使 用特征码定位的方式,xxxKeyEvent函数头部反汇编如下:
kd> u xxxKeyEvent win32k!xxxKeyEvent: bf85bbce 8bff mov edi, edi
bf85bbd0 55 push ebp 
bf85bbdl 8bec mov ebp, esp
bf85bbd3 83ec40 sub esp, 40h
bf85bbd6 al38a59abf  mov eax, dword ptr [win32k!gptiCurrent
(bf9aa538)]   
bf85bbdb 8b5508 mov edx, dword ptr [ebp+8]
通过匹配前六条指令即可完成定位,而指令购¥ eax, dword ptr

本页地址 http://www.jybase.net/biancheng/20120218777.html

百度搜索更多

谷歌搜索更多

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com