一种高安全性密码口令框的制作方法

文档序号:8259354阅读:277来源:国知局
一种高安全性密码口令框的制作方法
【技术领域】
[0001]本发明涉及一种网络信息安全技术,具体涉及一种密码口令框技术。
【背景技术】
[0002]一般windows系统的密码框通过一些键盘记录器和星号查看器就可以获取到用户输入的口令,这极大的影响到用户的账号安全。
[0003]针对该情况,人们提出在用户输入口令后通过加密的方式加密口令,以此来保护用户通过密码框输入口令的安全性,但是即使在用户输入口令后通过加密的方式加密口令,一些网络不法分子也可以在加密口令之前通过远程注入程序代码的方式通过发送windows消息WM_GETTEXT获取到加密之前的明文口令。
[0004]由此可见,提供一种密码口令框的安全性,避免输入口令的泄漏是本领域亟需要解决的问题。

【发明内容】

[0005]针对现有密码口令框安全性差的问题,本发明的目的在于提供一种高安全性的密码口令框,防止用户口令泄漏。
[0006]为了达到上述目的,本发明采用如下的技术方案:
[0007]一种高安全性密码口令框,所述口令框在应用层使用保护键盘低级钩子捕获用户的按键,该保护键盘钩子处于钩子链的顶端,且在捕获到按键后不调用CalINextHookEx函数将消息传给后面的钩子。
[0008]在本发明的优选实例中,所述口令框中包括保护键盘钩子模块SafeHook.dll和密码模块,所述保护键盘钩子模块SafeHook.dll在有其它进程安装针对口令框的键盘钩子时,向口令框发送消息,使口令框重新安装局部钩子,并更新到本口令框进程空间的模块输入节中。
[0009]进一步的,所述密码口令框包含:
[0010]键盘驱动模块,所述键盘驱动一直存在一个记录线程RawInputThread,该线程中有一个等待操作IRP Pending,等待来自键盘的输入数据,当有个键盘按键按下时,这个等待操作将会完成,记录线程将对得到的数据进行处理,分发给合适的应用进程,这时记录线程RawInputThread又会立即调用ntlZwReadFile要求读取数据,又进入下一个等待,周而复始开始循环;
[0011]密码框进程模块,所述密码框进程模块中设置有保护键盘钩子模块SafeHook.dll和密码模块,在Windows系统从消息队列中取出键盘消息,分配到密码框进程所在的消息队列中,SafeHook.dll模块会对收到的键盘消息设置键盘钩子保护,通过更新系统函数的地址使键盘钩子处于钩子链的顶端,由此每次输入一个字符时,就会截获这个输入字符,对输入字符进行加密操作,直接对密码框中输入字符进行保护操作;
[0012]其他相关进程模块,所述其他进程模块做为密码口令框的辅助进程,实现密码框进程载入safeHook.dll模块的功能。
[0013]本发明提供的方法能够使得口令框的键盘钩子函数一直处于钩子链的顶端,有效的实现密码口令框的高安全性,既能抵抗键盘记录器的攻击又能保证用户口令在内存中是以密文形式传输,即使黑客截取到信息,也不能恢复用户的真实口令。
【附图说明】
[0014]以下结合附图和【具体实施方式】来进一步说明本发明。
[0015]图1为本发明中密码口令框的框架示意图。
【具体实施方式】
[0016]为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
[0017]为了实现密码口令框的高安全性,本密码口令框在应用层使用保护键盘低级钩子捕获用户的按键,由于windows系统的钩子消息是链状的,先装的钩子在最前面,前面的钩子通过调用CallNextHookEx函数将消息传给后面的钩子,如果在前面的钩子中捕获到按键后不调用此函数,后面的钩子就永远不能获得消息。
[0018]由此,本密码口令框中的保护键盘钩子函数处于钩子链的顶端,且在捕获到按键后不把钩子消息传给后面的钩子,从而防止用户密码被窃取。
[0019]为了使密码口令框中的保护键盘钩子函数处于钩子链的顶端,采用输入表挂钩的方式对调用SetWindowsHookEx的行为进行监控,针对windows系统中的函数动态调用方式,程序调用LoadLibrary动态加载User32.dll,再调用GetProcAddress获取函数地址。把系统的SetWindowsHookEx、LoadLibrary和GetProcAddress在输入表中的地址替换为挂钩函数的地址。
[0020]输入表挂钩(IAT Hook)实际上修改程序模块中的IAT导入表(import AddressTable),使API地址重定向。基本原理是这样的:模块文件结构(ΕΧΕ/DLL),有一个IAT表,保存着该模块用到的API函数的地址,在调用该函数(即挂钩函数)时会先跳转到该IAT表中查找该API具体的函数地址,再跳转到该具体的地址执行API函数。
[0021 ] SetffindowsHookEx函数,即安装一个应用进程钩子到系统钩子链中,调用API函数SetWindowsHookEx是把一个应用程序定义的钩子子程安装到钩子链表,SetffindowsHookEx函数总是在钩子链的顶端安装钩子子程。当指定类型的钩子监视的事件发生时,系统就调用与这个钩子关联的钩子链的顶端的钩子子程。每一个钩子链中的钩子子程都决定是否把这个事件传递到下一个钩子子程。钩子子程传递事件到下一个钩子子程需要调用CallNextHookEx函数。
[0022]Windows系统中的函数调用方式为动态调用,即应用层使用API函数加载和卸载动态库的方式来调用函数。函数LoadLibary的中文含义是载入指定的动态库,并将它映射到当前进程使用的地址空间,一旦载入,即可访问动态库内保存的资源,函数LoadLibrary的目的是加载相应的动态库到应用层。
[0023]函数GetProcAddress,即检索指定函数在动态库中的输出函数地址,函数GetProcAddress的目的是获取动态库中的函数地址,由于SetWindowsHookEx函数是windows系统的API函数,因此要动态调用该函数,首先需要加载windows系统动态库User32.dlI,该动态库是windows用户界面相关的一整套应用程序接口,它随着windows系统安装的时候释放到系统目录下。调用该动态库后,再通过调用函数GetProcAddress获取到函数SetWindowsHookEx的地址。
[0024]针对上述方案,本发明在具体实现时,在密码口令框中设置保护键盘钩子模块SafeHook.dll,通过该模块使密码口令框中的保护键盘钩子函数处于钩子链的顶端(如图1所示)。
[0025]该模块的实现包括三个钩子函数:
[0026](I)Void Hook_SetffindowsHookEx(idHook, dwThreadID)
[0027]该函数的功能为当目标钩子的ID等于idHook并且密码框所在线程ID等于dwThreadID时,则发送消息给密码框所在的进程
[0028](2)Void Hook_GetProcAdd
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1