基于Windows的防键盘记录方法与流程

文档序号:14072734阅读:1914来源:国知局

发明涉及计算机安全技术领域,特别涉及一种基于windows的防键盘记录方法。



背景技术:

现有的windows系统上键盘记录技术多采用hook(挂钩)技术,从钩子函数被调用运行的位置将键盘记录技术分为两大类,分别为用户态hook和内核态hook。因为在windows用户态下,键盘按键是以windows消息的形式进行传递,所以用户态hook主要通过windows消息钩子函数实现键盘记录。而内核态hook相对于用户态hook来说更加灵活,从按键产生键盘中断开始一直到内核态完成irp(io请求包)返回用户态需要经过多层调用,可以在此路径的多处实现键盘记录,主要包括以下方法:

修改系统服务描述表实现键盘记录,即hook系统服务描述表。

修改键盘设备栈,添加虚拟设备,irp在设备栈逐层返回的途中被虚拟设备截获。

修改键盘驱动的分发函数实现键盘记录,即hook驱动分发函数。

修改键盘中断处理函数,即hook中断处理函数。

对于用户态的键盘记录器,可以同样使用windows消息钩子函数来防御,主要是调用wh_debug类型的钩子函数,因为windows操作系统总是先执行wh_debug类型的钩子函数,而这个钩子函数可以直接决定是否继续执行键盘的钩子函数(用户态键盘记录以键盘钩子函数的形式存在),所以在用户态防键盘记录的方法就是在wh_debug类型的钩子函数中将按键信息直接提交给用户进程,并阻断键盘钩子函数的运行,但是如果内核态的键盘记录器,此方法不能阻止按键信息被窃取。



技术实现要素:

本发明的目的在于提供一种基于windows的防键盘记录方法,用于解决上述现有技术的问题。

本发明的一种基于windows的防键盘记录方法,其中,包括:对于内核态,在windows正常按键中断之前,增加一中断,在收到用户按键信息后,进行中断,对按键信息是否进行过按键信息转换进行判断,对于该按键信息为原始按键信息,执行按键信息转换,并将转换后的信息重新发送给io端口,对于该按键信息为转换后的按键信息,执行windows正常按键中断;对于用户态,根据按键映射关系进行反向转换然后直接将按键信息提交给用户进程。

根据本发明的基于windows的防键盘记录方法,其中,如果io端口第2n-1次中断,则认为该按键信息为原始按键信息,执行按键信息转换,并将转换后的信息重新发送给io端口,如io端口第2n次中断,则认为该按键信息为转换后的按键信息,执行windows正常按键中断。

根据本发明的基于windows的防键盘记录方法,其中,包括:在windows的中断处理表中,不断将增加的中断更新到键盘中断项中,使得增加的中断始终处于windows中断的优先级的前列。

根据本发明的基于windows的防键盘记录方法,其中,还包括:建立一键盘映射表,映射表中存储键盘实际字符与转换后的字符的映射关系。

本发明的基于windows的防键盘记录方法,能够实现键盘的按键防护。

附图说明

具体实施方式

为使本发明的目的、内容、和优点更加清楚,下面结合实施例,对本发明的具体实施方式作进一步详细描述。

针对于内核态的键盘记录器,主要是通过设置键盘中断处理函数的方式进行防御,新的中断处理函数读取按键信息,并在按键信息转码处理后直接交给用户进程,关系到键盘驱动、键盘设备栈和系统服务描述表的所有步骤被省略,所以防键盘记录的效果最好,因为中断处理是最贴近底层硬件获取按键信息的位置,所以在内核其他位置做防护是无法阻拦hook中断处理函数型的键盘记录器。但是此方法需要新的键盘中断处理函数实现键盘驱动的所有内容,而且兼容较差针对不用的键盘需要实现不同的键盘驱动。有鉴于此,本发明人针对现有技术的缺陷深入研究,并有本发明基于windows的防键盘记录方法。

本发明基于windows的防键盘记录方法,采用内核态和用户态hook相结合的方式实现防键盘记录功能,包括:

对于内核态,在windows正常按键中断之前,增加一中断,在收到用户按键信息后,进行中断,对按键信息是否进行过按键信息转换进行判断,如果io端口第2n-1次中断,则认为该按键信息为原始按键信息,执行按键信息转换,并将转换后的信息重新发送给io端口,如io端口第2n次中断,则认为该按键信息为转换后的按键信息,执行windows正常按键中断;

对于用户态,根据按键映射关系进行反向转换然后直接将按键信息提交给用户进程。

对于本发明基于windows的防键盘记录方法的一实施例,其中,包括:在windows的中断处理表中,不断将增加的中断更新到键盘中断项中,使得增加的中断始终处于windows中断的优先级的前列。

对于本发明基于windows的防键盘记录方法的一实施例,其中,包括:建立一键盘映射表,映射表中存储键盘实际字符与转换后的字符的映射关系;

对于本发明基于windows的防键盘记录方法的一实施例,包括:采用内核态和用户态hook相结合的方式实现防键盘记录功能。内核态首先hook键盘中断处理函数,使用io端口直接读写技术,先将按键信息(扫描码)直接从键盘的数据端口读出,然后对按键信息作转换变成另一个按键信息,之后将新的按键信息重新写入键盘的数据端口。在windows进入用户态后,将读取的转换后的按键信息查找映射关系表,将转换后的按键信息转换为实际的输入按键信息。

对于本发明基于windows的防键盘记录方法的一实施例,由于是在键盘中断产生的时候触发io端口直接读写,先读取转换再写入按键信息,但是后一次的写回键盘会再次引起键盘中断,这就导致再次进入中断处理函数,引起死循环,所以通过标记变量来标记此次是原始按键还是转换按键引起的中断。如果是转换按键引起中断就不需要再进行转换可直接调用原有键盘中断处理函数,按键信息将按照原来的处理路径传递,在到达用户态后此方法在用户态使用wh_debug类型的钩子函数,将收到的按键信息再转化一次还原成内核态最初的按键信息,然后将按键信息直接交付给用户进程。

在内核态的所有类型键盘记录器虽然能够获取按键信息,但是这个按键信息是经过转换之后的而非用户的原始输入,类似于按键被加了密,所以在内核态起到了防护作用。在用户态使用wh_debug类型的钩子,获取按键信息然后在经过一次转换后直接交付给用户进程,类似于按键解密,所以任何用户态的键盘记录器都截获不到最后的按键信息。

为了保证内核态的中断处理函数和用户态的钩子函数始终是最先被调用的,因此,可以在内核态和用户态分别启动一个线程来不断设置中断处理函数和钩子函数。因为内核态中最后一次设置的中断处理函数才能够在键盘中断到来之时被调用,而用户态中最后一次设置的钩子函数是被最先调用的,所以需要线程来执行此操作。

对于对按键信息作转换变成另一个按键信息包括:本发明基于windows的防键盘记录方法对字母、数字按键进行转换。由以上两类按键组成按键集,转换方法的输入和输出按键是一一对应的映射关系并且都属于按键集。此一对一映射关系的功能需动态生成并且每次用户进程启动之时就需重新生成映射关系,可以防止恶意用户猜解映射关系。此映射关系在内核态生成,供内核态的中断处理函数做按键信息转换用,然后通过内核态和用户态通讯的方法传递给用户态,再由用户态的钩子函数使用做反向转换。

综上,本发明的基于windows的防键盘记录方法,能够实现键盘的按键防护。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1