一种支持多应用的安全输入方法及装置与流程

文档序号:11732090阅读:204来源:国知局
一种支持多应用的安全输入方法及装置与流程

本发明涉及通信领域,尤其涉及一种支持多应用的安全输入方法及装置。



背景技术:

现有技术中,windows驱动中的内存是共享的,在windows驱动与上层应用通讯的过程中,windows驱动将接收到的上层应用发送来的数据均保存至内存中;然而在该机制下,当windows驱动与多个上层应用同时通讯的过程中,windows驱动无法分辨出内存中的数据是对应于哪一个上层应用的,会因数据混淆而造成通讯失败;而且windows驱动通常将用户通过键盘输入的数据直接返回给上层应用,存在数据易被篡改和窃取的风险。



技术实现要素:

本发明为解决现有技术的不足,提供一种支持多应用的安全输入方法及装置。

一方面,本发明提供了一种支持多应用的安全输入方法,包括:

步骤s1:装置等待并接收请求,当接收到第二请求时,执行步骤s2,当接收到第五请求时,执行步骤s4,当接收到第六请求时,执行步骤s5;

步骤s2:所述装置将当前运行环境对应的应用作为当前应用,判断所述当前应用的专属内存是否存在,是则执行步骤s3,否则为所述当前应用分配专属内存,执行步骤s3;

步骤s3:所述装置根据所述第二请求保存所述当前应用的第一密钥至所述当前应用的专属内存中,返回响应数据给所述当前应用,返回步骤s1;

步骤s4:所述装置将当前运行环境对应的应用作为当前应用,等待并接收用户输入的字符,将接收到的字符作为真字符,随机生成与所述真字符对应的伪字符,将所述真字符与所述伪字符对应保存,并将所述伪字符返回给所述当前应用,返回步骤s1;

步骤s5:所述装置将当前运行环境对应的应用作为当前应用,解析所述第六请求得到伪字符,查找到与所述伪字符对应保存的真字符,并在所述当前应用的专属内存中读取第一密钥,使用所述第一密钥对所述真字符加密并将加密结果返回给所述当前应用,返回步骤s1。

可选地,所述步骤s1之前,还包括:装置创建第一设备对象;

所述步骤s1中,所述装置等待并接收请求,具体为:所述装置通过所述第一设备对象等待并接收请求。

可选地,所述方法还包括:当所述装置接收到第一请求时,执行步骤1:

步骤1:所述装置将当前运行环境对应的应用作为当前应用,并判断是否存在第二设备对象,是则返回响应数据给所述当前应用,否则创建第二设备对象,为所述第二设备对象分配第二扩展区;

所述步骤s4中,所述等待并接收用户输入的字符,具体为:所述装置通过所述第二设备对象等待并接收用户输入的字符;

所述步骤s4中,所述将所述真字符与所述伪字符对应保存,具体为:所述装置将所述真字符与所述伪字符对应保存至所述第二扩展区中。

可选地,所述步骤s2中,所述判断所述当前应用的专属内存是否存在,具体为:所述装置获取所述当前应用的线程号、进程号和irp文件对象,根据获取到的线程号、进程号和irp文件对象判断所述当前应用的专属内存是否存在;

所述步骤s2中,所述为所述当前应用分配专属内存之后,还包括:所述装置将获取到的所述当前应用的线程号、进程号和irp文件对象保存至分配的专属内存中。

可选地,所述步骤s2中,所述为所述当前应用分配专属内存之后,还包括:将分配的专属内存的地址保存至用户信息结构链表中;

所述根据获取到的线程号、进程号和irp文件对象判断所述当前应用的专属内存是否存在,具体包括:

步骤a1:所述装置查找到所述用户信息结构链表,并判断所述用户信息结构链表是否为空,是则判定所述当前应用的专属内存不存在;否则执行步骤a2;

步骤a2:所述装置依次读取所述用户信息结构链表的各元素中存有的地址,并在读取到的地址对应的专属内存中读取存有的线程号、进程号和irp文件对象,判断是否能够读取到与获取到的线程号、进程号和irp文件对象均一致的线程号、进程号和irp文件对象,是则判定所述当前应用的专属内存存在,否则判定所述当前应用的专属内存不存在。

可选地,所述步骤s2中,所述为所述当前应用分配专属内存之后,还包括:将分配的专属内存的地址保存至用户信息结构链表中;

所述方法还包括:当所述装置接收到第八请求时,执行步骤2:

步骤2:所述装置将当前运行环境对应的应用作为当前应用,释放所述当前应用的专属内存,在所述用户信息结构链表中移除所述当前应用的专属内存的地址,返回响应数据给所述当前应用,返回步骤s1。

可选地,所述步骤s3中,所述装置根据所述第二请求保存所述当前应用的第一密钥至所述当前应用的专属内存中,具体为:

所述装置解析所述第二请求得到所述当前应用的第一密钥,将所述第一密钥保存至所述当前应用的专属内存中。

可选地,所述步骤s3中,所述装置根据所述第二请求保存所述当前应用的第一密钥至所述当前应用的专属内存中,具体为:

所述装置解析所述第二请求得到第一随机数,根据所述第一随机数生成第一密钥,将所述第一密钥保存至所述当前应用的专属内存中。

可选地,所述方法还包括:当所述装置接收到第七请求时,执行步骤3:

步骤3:所述装置将当前运行环境对应的应用作为当前应用,读取所述当前应用的专属内存中存有的第一密钥,将读取到的第一密钥返回给所述当前应用,返回步骤s1。

可选地,所述步骤3中,所述将读取到的第一密钥返回给所述当前应用之前,还包括:所述装置解析所述第七请求得到第二密钥;

所述步骤3中,所述将读取到的第一密钥返回给所述当前应用,具体为:所述装置使用所述第二密钥加密读取到的第一密钥得到第一密钥密文,将所述第一密钥密文返回给所述当前应用。

可选地,所述方法还包括:当所述装置接收到第三请求时,执行步骤4-1:

步骤4-1:所述装置将当前运行环境对应的应用作为当前应用,判断所述当前应用的专属内存是否存在,是则执行步骤4-2,否则为所述当前应用分配专属内存,执行步骤4-2;

步骤4-2:所述装置解析所述第三请求得到可接受字符类型,将所述可接受字符类型保存至所述当前应用的专属内存中;

所述步骤s4中,所述将接收到的字符作为真字符之前,还包括:

所述装置判断接收到的字符与所述当前应用的专属内存中存有的可接受字符类型是否匹配,是则将接收到的字符作为真字符,否则继续等待并接收用户输入的字符。

可选地,所述步骤s1之前,还包括:所述装置创建模拟输入线程并初始化所述模拟输入线程的按下标识和弹起标识均为第一预设值,所述模拟输入线程模拟用户输入;

所述步骤s4中,所述将接收到的字符作为真字符之前,还包括:所述装置判断接收到的字符是否为用户的真实输入,是则将接收到的字符作为真字符,否则继续等待并接收用户输入的字符。

可选地,所述模拟输入线程模拟用户输入,具体包括:将所述按下标识和所述弹起标识均设置为第二预设值,随机生成扫描码,将所述扫描码发送至键盘并保存至第一扩展区中;

所述继续等待并接收用户输入的字符之前,还包括:将所述按下标识和所述弹起标识均设置为所述第一预设值,清除所述第一扩展区中存有的扫描码;

所述装置判断接收到的字符是否为用户的真实输入,具体包括:

步骤b1:所述装置判断所述按下标识和所述弹起标识是否均为第一预设值,是则判定接收到的字符是用户的真实输入;否则执行步骤b2;

步骤b2:所述装置获取来自键盘的扫描码,判断获取到的扫描码与所述第一扩展区中存有的扫描码是否相同,是则判定接收到的字符不是用户的真实输入;否则判定接收到的字符是用户的真实输入。

可选地,所述步骤s1之前,还包括:所述装置初始化键盘过滤的状态为关闭;

所述方法还包括:当所述装置接收到第四请求时,执行步骤5:

步骤5:所述装置将当前运行环境对应的应用作为当前应用,设置所述键盘过滤的状态为开启,返回响应数据给所述当前应用;

所述步骤s4中,所述等待并接收用户输入的字符之前,还包括:所述装置判断所述键盘过滤的状态是否为开启,是则继续;否则等待并接收用户输入的字符,将接收到的字符返回给所述当前应用。

可选地,所述步骤5中,所述设置所述键盘过滤的状态为开启之前,还包括:所述装置判断所述第四请求中含有的线程号、进程号、irp文件对象是否均正确,是则继续;否则返回错误码给所述当前应用。

可选地,所述装置判断所述第四请求中含有的线程号、进程号、irp文件对象是否均正确,具体为:所述装置获取所述当前应用的线程号、进程号、irp文件对象,判断获取到的线程号、进程号、irp文件对象与第四请求中含有的线程号、进程号、irp文件对象是否均相同,是则判定所述第四请求中含有的线程号、进程号、irp文件对象均正确,否则判定所述第四请求中含有的线程号、进程号、irp文件对象不正确。

可选地,所述步骤s5中,所述使用所述第一密钥对所述真字符加密并将加密结果返回给所述当前应用,具体为:

所述装置根据所述真字符生成明文应答数据,使用所述第一密钥对所述明文应答数据加密得到密文应答数据,将所述密文应答数据返回给所述当前应用。

可选地,所述装置根据所述真字符生成明文应答数据,具体为:

所述装置生成第二随机数,将所述第二随机数的预设位上的数据替换为所述真字符后作为明文应答数据;

或者,

所述装置将预设数据的预设位上的数据替换为所述真字符后作为明文应答数据。

另一方面,本发明提供了一种支持多应用的安全输入装置,包括:

第一接收模块,用于接收请求;

第一作为模块,用于当所述第一接收模块接收到第二请求时,将当前运行环境对应的应用作为当前应用;

第一判断模块,用于判断所述当前应用的专属内存是否存在;

分配模块,用于当所述第一判断模块判断出所述当前应用的专属内存不存在时,为所述当前应用分配专属内存;

第一保存模块,用于当所述第一判断模块判断出所述当前应用的专属内存存在时,根据所述第二请求保存所述当前应用的第一密钥至所述当前应用的专属内存中;还用于当所述分配模块为所述当前应用分配专属内存之后,根据所述第二请求保存所述当前应用的第一密钥至所述当前应用的专属内存中;

第一发送模块,用于在所述第一保存模块根据所述第二请求保存所述当前应用的第一密钥至所述当前应用的专属内存中之后,返回响应数据给所述当前应用;

所述第一接收模块,还用于在所述第一发送模块返回响应数据给所述当前应用之后,接收请求;

所述第一作为模块,还用于当所述第一接收模块接收到第五请求时,将当前运行环境对应的应用作为当前应用;

第二接收模块,用于接收用户输入的字符;

第二作为模块,还用于将所述第二接收模块接收到的字符作为真字符;

生成模块,用于随机生成与所述真字符对应的伪字符;

第二保存模块,用于将所述真字符与所述生成模块生成的伪字符对应保存;

所述第一发送模块,还用于将所述生成模块生成的伪字符返回给所述当前应用;

所述第一接收模块,还用于在所述第一发送模块将所述生成模块生成的伪字符返回给所述当前应用之后,接收请求;

所述第一作为模块,还用于当所述第一接收模块接收到第六请求时,将当前运行环境对应的应用作为当前应用;

解析模块,用于解析所述第一接收模块接收到的第六请求得到伪字符;

查找模块,用于查找到与所述解析模块得到的伪字符对应保存的真字符;

第一读取模块,用于在所述当前应用的专属内存中读取第一密钥;

加密模块,用于使用所述第一读取模块读取到的第一密钥对所述查找模块查找到的真字符加密;

所述第一发送模块,还用于将所述加密模块得到的加密结果返回给所述当前应用;

所述第一接收模块,还用于在所述第一发送模块将所述加密模块加密的真字符返回给所述当前应用之后,接收请求。

可选地,所述装置还包括:第一创建模块;

所述第一创建模块,用于在所述第一接收模块接收请求之前,创建第一设备对象;

所述第一接收模块,具体用于:通过所述第一创建模块创建的第一设备对象接收请求。

可选地,所述装置还包括:第二判断模块和第二创建模块;

所述第一作为模块,还用于当所述第一接收模块接收到第一请求时,将当前运行环境对应的应用作为当前应用;

所述第二判断模块,用于判断是否存在第二设备对象;

所述第一发送模块,还用于当所述第二判断模块判断出存在第二设备对象时,返回响应数据给所述当前应用;

所述第二创建模块,用于当所述第二判断模块判断出不存在第二设备对象时,创建第二设备对象;

所述分配模块,还用于为所述第二创建模块创建的第二设备对象分配第二扩展区;

所述第二接收模块,具体用于:通过所述第二创建模块创建的第二设备对象接收用户输入的字符;

所述第二保存模块,具体用于:将所述真字符与所述生成模块生成的伪字符对应保存至所述第二扩展区中。

可选地,所述第一判断模块,具体包括:第一获取单元和第一判断单元;

所述第一获取单元,用于获取所述当前应用的线程号、进程号和irp文件对象;

所述第一判断单元,用于根据所述第一获取单元获取到的线程号、进程号和irp文件对象判断所述当前应用的专属内存是否存在;

所述第一保存模块,还用于在所述分配模块为所述当前应用分配专属内存之后,将所述第一获取单元获取到的所述当前应用的线程号、进程号和irp文件对象保存至分配的专属内存中。

可选地,所述第一保存模块,还用于在所述分配模块为所述当前应用分配专属内存之后,将分配的专属内存的地址保存至用户信息结构链表中;

所述第一判断单元,具体包括:查找子单元、第一判断子单元、读取子单元和第二判断子单元;

所述查找子单元,用于查找所述用户信息结构链表;

所述第一判断子单元,用于判断所述用户信息结构链表是否为空,是则判定所述当前应用的专属内存不存在;

所述读取子单元,用于当所述第一判断子单元判断出所述用户信息结构链表不为空时,依次读取所述用户信息结构链表的各元素中存有的地址,并在读取到的地址对应的专属内存中读取存有的线程号、进程号和irp文件对象;

所述第二判断子单元,用于判断所述读取子单元是否能够读取到与获取到的线程号、进程号和irp文件对象均一致的线程号、进程号和irp文件对象,是则判定所述当前应用的专属内存存在,否则判定所述当前应用的专属内存不存在。

可选地,所述装置还包括:释放模块;

所述第一保存模块,还用于在所述分配模块为所述当前应用分配专属内存之后,将分配的专属内存的地址保存至用户信息结构链表中;

所述第一作为模块,还用于当所述第一接收模块接收到第八请求时,将当前运行环境对应的应用作为当前应用;

所述释放模块,用于释放所述当前应用的专属内存,在所述用户信息结构链表中移除所述当前应用的专属内存的地址;

所述第一发送模块,还用于在所述释放模块释放所述当前应用的专属内存,在所述用户信息结构链表中移除所述当前应用的专属内存的地址之后,返回响应数据给所述当前应用。

可选地,所述第一保存模块,具体用于:解析所述第二请求得到所述当前应用的第一密钥,将所述第一密钥保存至所述当前应用的专属内存中。

可选地,所述第一保存模块,具体用于:解析所述第二请求得到第一随机数,根据所述第一随机数生成第一密钥,将所述第一密钥保存至所述当前应用的专属内存中。

可选地,所述装置还包括:第二读取模块和第二发送模块;

所述第一作为模块,还用于当所述第一接收模块接收到第七请求时,将当前运行环境对应的应用作为当前应用;

所述第二读取模块,用于读取所述当前应用的专属内存中存有的第一密钥;

所述第二发送模块,还用于将所述第二读取模块读取到的第一密钥返回给所述当前应用;

所述第一接收模块,还用于在所述第二发送模块将所述第二读取模块读取到的第一密钥返回给所述当前应用之后,接收请求。

可选地,所述解析模块,还用于在所述第二发送模块将所述第二读取模块读取到的第一密钥返回给所述当前应用之前,解析所述第七请求得到第二密钥;

所述第二发送模块,具体用于:使用所述解析模块得到的第二密钥加密所述第二读取模块读取到的第一密钥得到第一密钥密文,将所述第一密钥密文返回给所述当前应用。

可选地,所述装置还包括:第三判断模块和第四判断模块;

所述第一作为模块,还用于在所述第一接收模块接收到第三请求时,将当前运行环境对应的应用作为当前应用;

所述第三判断模块,用于判断所述当前应用的专属内存是否存在;

所述分配模块,还用于当所述第三判断模块判断出所述当前应用的专属内存不存在时,为所述当前应用分配专属内存;

所述解析模块,还用于当所述第三判断模块判断出所述当前应用的专属内存存在时,解析所述第三请求得到可接受字符类型;还用于当所述分配模块为所述当前应用分配专属内存之后,解析所述第三请求得到可接受字符类型;

所述第一保存模块,还用于将所述解析模块得到的可接受字符类型保存至所述当前应用的专属内存中;

所述第四判断模块,用于在所述第二作为模块将所述第二接收模块接收到的字符作为真字符之前,判断所述第二接收模块接收到的字符与所述当前应用的专属内存中存有的可接受字符类型是否匹配;

所述第二作为模块,具体用于:当所述第四判断模块判断出所述第二接收模块接收到的字符与所述当前应用的专属内存中存有的可接受字符类型匹配时,将所述第二接收模块接收到的字符作为真字符;

所述第二接收模块,还用于当所述第四判断模块判断出所述第二接收模块接收到的字符与所述当前应用的专属内存中存有的可接受字符类型不匹配时,继续接收用户输入的字符。

可选地,所述装置还包括:第三创建模块和第五判断模块;

所述第三创建模块,用于在所述第一接收模块接收请求之前,创建模拟输入模块并初始化所述模拟输入模块的按下标识和弹起标识均为第一预设值,所述模拟输入模块用于模拟用户输入;

所述第五判断模块,用于在所述第二作为模块将所述第二接收模块接收到的字符作为真字符之前,判断所述第二接收模块接收到的字符是否为用户的真实输入;

所述第二作为模块,具体用于:当所述第五判断模块判断出所述第二接收模块接收到的字符是用户的真实输入时,将所述第二接收模块接收到的字符作为真字符;

所述第二接收模块,还用于当所述第五判断模块判断出所述第二接收模块接收到的字符不是用户的真实输入时,继续接收用户输入的字符。

可选地,所述装置还包括:第一设置模块和清除模块;

所述模拟输入模块,具体用于:将所述按下标识和所述弹起标识均设置为第二预设值,随机生成扫描码,将所述扫描码发送至键盘并保存至第一扩展区中;

所述第一设置模块,用于在所述第二接收模块继续接收用户输入的字符之前,将所述按下标识和所述弹起标识均设置为所述第一预设值;

所述清除模块,用于在所述第二接收模块继续接收用户输入的字符之前,清除所述第一扩展区中存有的扫描码;

所述第五判断模块,具体包括:第二判断单元、第二获取单元和第三判断单元;

所述第二判断单元,用于判断所述按下标识和所述弹起标识是否均为第一预设值,是则判定所述第二接收模块接收到的字符是用户的真实输入;

所述第二获取单元,用于当所述第二判断单元判断出所述按下标识和所述弹起标识不均为第一预设值时,获取来自键盘的扫描码;

所述第三判断单元,用于判断所述获取单元获取到的扫描码与所述第一扩展区中存有的扫描码是否相同,是则判定所述第二接收模块接收到的字符不是用户的真实输入;否则判定所述第二接收模块接收到的字符是用户的真实输入。

可选地,所述装置还包括:初始化模块、第二设置模块和第六判断模块;

所述初始化模块,用于在所述第一接收模块接收请求之前,初始化键盘过滤的状态为关闭;

所述第一作为模块,还用于当所述第一接收模块接收到第四请求时,将当前运行环境对应的应用作为当前应用;

所述第二设置模块,用于设置所述键盘过滤的状态为开启;

所述第一发送模块,还用于在所述第二设置模块设置所述键盘过滤的状态为开启之后,返回响应数据给所述当前应用;

所述第六判断模块,用于在所述第二接收模块接收用户输入的字符之前,判断所述键盘过滤的状态是否为开启;

所述第二接收模块,具体用于:当所述第六判断模块判断出所述键盘过滤的状态为开启时,接收用户输入的字符;还用于当所述第六判断模块判断出所述键盘过滤的状态不为开启时,接收用户输入的字符;

所述第二作为模块,具体用于:当所述第六判断模块判断出所述键盘过滤的状态为开启时,将所述第二接收模块接收到的字符作为真字符;

所述第一发送模块,还用于当所述第六判断模块判断出所述键盘过滤的状态不为开启时,将所述第二接收模块接收到的字符返回给所述当前应用。

可选地,所述装置还包括:第七判断模块;

所述第七判断模块,用于在所述第二设置模块设置所述键盘过滤的状态为开启之前,判断所述第四请求中含有的线程号、进程号、irp文件对象是否均正确;

所述第二设置模块,具体用于:在所述第七判断模块判断出所述第四请求中含有的线程号、进程号、irp文件对象均正确时,设置所述键盘过滤的状态为开启;

所述第一发送模块,还用于在所述第七判断模块判断出所述第四请求中含有的线程号、进程号、irp文件对象不均正确时,返回错误码给所述当前应用。

可选地,所述第七判断模块,具体用于:获取所述当前应用的线程号、进程号、irp文件对象,判断获取到的线程号、进程号、irp文件对象与第四请求中含有的线程号、进程号、irp文件对象是否均相同,是则判定所述第四请求中含有的线程号、进程号、irp文件对象均正确,否则判定所述第四请求中含有的线程号、进程号、irp文件对象不正确。

可选地,所述加密模块,包括:生成单元和加密单元;

所述生成单元,用于根据所述查找模块查找到的真字符生成明文应答数据;

所述加密单元,用于使用所述第一读取模块读取到的第一密钥对所述生成单元生成的明文应答数据加密得到密文应答数据;

所述第一发送模块,具体用于:将所述加密单元得到的密文应答数据返回给所述当前应用。

可选地,所述生成单元,具体用于:

生成第二随机数,将所述第二随机数的预设位上的数据替换为所述真字符后作为明文应答数据;

或者,

将预设数据的预设位上的数据替换为所述真字符后作为明文应答数据。

本发明与现有技术相比,具有以下优势:

本发明中的技术方案,在windows驱动与多个上层应用通讯时,驱动为上层应用分配专属内存,并将与上层应用对应的数据保存至对应的专属内存中,有效的避免了驱动因数据混淆而造成的通讯失败;并且驱动对用户通过键盘输入的数据进行处理后返回给上层应用,提高了数据的安全性。

附图说明

图1为本发明实施例一提供的一种支持多应用的安全输入方法流程图;

图2和图3为本发明实施例二提供的一种支持多应用的安全输入方法流程图;

图4为本发明实施例三提供的一种支持多应用的安全输入装置的模块组成框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚完整的描述;显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明中所述的装置即为windows驱动,并将系统的当前运行环境作为当前运行环境。

实施例一

本发明实施例一提供一种支持多应用的安全输入方法,如图1所示,包括:

步骤101:装置等待并接收请求,当接收到第二请求时,执行步骤102,当接收到第五请求时,执行步骤104,当接收到第六请求时,执行步骤105;

步骤102:装置将当前运行环境对应的应用作为当前应用,判断当前应用的专属内存是否存在,是则执行步骤103,否则为当前应用分配专属内存,执行步骤103;

步骤103:装置根据第二请求保存当前应用的第一密钥至当前应用的专属内存中,返回响应数据给当前应用,返回步骤101;

步骤104:装置将当前运行环境对应的应用作为当前应用,等待并接收用户输入的字符,将接收到的字符作为真字符,随机生成与真字符对应的伪字符,将真字符与伪字符对应保存,并将伪字符返回给当前应用,返回步骤101;

步骤105:装置将当前运行环境对应的应用作为当前应用,解析第六请求得到伪字符,查找到与得到的伪字符对应保存的真字符,并在当前应用的专属内存中读取第一密钥,使用读取到的第一密钥对查找到的真字符加密并将加密结果返回给当前应用,返回步骤101。

在本实施例中,步骤101之前,还包括:装置创建第一设备对象;

对应地,步骤101中,装置等待并接收请求,具体为:装置通过第一设备对象等待并接收请求。

本实施例中的方法还包括:当装置接收到第一请求时,执行步骤1:

步骤1:装置将当前运行环境对应的应用作为当前应用,并判断是否存在第二设备对象,是则返回响应数据给当前应用,否则创建第二设备对象,为第二设备对象分配第二扩展区;

对应地,步骤104中,等待并接收用户输入的字符,具体为:装置通过第二设备对象等待并接收用户输入的字符;

步骤104中,将真字符与伪字符对应保存,具体为:装置将真字符与伪字符对应保存至第二扩展区中。

本实施例步骤102中,判断当前应用的专属内存是否存在,具体为:装置获取当前应用的线程号、进程号和irp(英文:i/orequestpackage;中文:i/o请求数据包)文件对象,根据获取到的线程号、进程号和irp文件对象判断当前应用的专属内存是否存在;

对应地,步骤102中,为当前应用分配专属内存之后,还包括:装置将获取到的当前应用的线程号、进程号和irp文件对象保存至分配的专属内存中。

本实施例步骤102中,为当前应用分配专属内存之后,还包括:将分配的专属内存的地址保存至用户信息结构链表中;

对应地,上述根据获取到的线程号、进程号和irp文件对象判断当前应用的专属内存是否存在,具体包括:

步骤a1:装置查找到用户信息结构链表,并判断用户信息结构链表是否为空,是则判定当前应用的专属内存不存在;否则执行步骤a2;

步骤a2:装置依次读取用户信息结构链表的各元素中存有的地址,并在读取到的地址对应的专属内存中读取存有的线程号、进程号和irp文件对象,判断是否能够读取到与获取到的线程号、进程号和irp文件对象均一致的线程号、进程号和irp文件对象,是则判定当前应用的专属内存存在,否则判定当前应用的专属内存不存在。

本实施例中的方法还包括:当装置接收到第八请求时,执行步骤2:

步骤2:装置将当前运行环境对应的应用作为当前应用,释放当前应用的专属内存,在用户信息结构链表中移除当前应用的专属内存的地址,返回响应数据给当前应用,返回步骤101。

可选地,步骤103中,装置根据第二请求保存当前应用的第一密钥至当前应用的专属内存中,具体为:

装置解析第二请求得到当前应用的第一密钥,将第一密钥保存至当前应用的专属内存中。

可选地,步骤103中,装置根据第二请求保存当前应用的第一密钥至当前应用的专属内存中,具体为:

装置解析第二请求得到第一随机数,根据第一随机数生成第一密钥,将第一密钥保存至当前应用的专属内存中。

对应地,本实施例中的方法,还包括:当装置接收到第七请求时,执行步骤3:

步骤3:装置将当前运行环境对应的应用作为当前应用,读取当前应用的专属内存中存有的第一密钥,将读取到的第一密钥返回给当前应用,返回步骤101。

进一步地,本实施例步骤3中,将读取到的第一密钥返回给当前应用之前,还包括:装置解析第七请求得到第二密钥;

对应地,步骤3中,将读取到的第一密钥返回给当前应用,具体为:装置使用第二密钥加密读取到的第一密钥得到第一密钥密文,将第一密钥密文返回给当前应用。

本实施例中的方法,还包括:当装置接收到第三请求时,执行步骤4-1:

步骤4-1:装置将当前运行环境对应的应用作为当前应用,判断当前应用的专属内存是否存在,是则执行步骤4-2,否则为当前应用分配专属内存,执行步骤4-2;

步骤4-2:装置解析第三请求得到可接受字符类型,将得到的可接受字符类型保存至当前应用的专属内存中;

对应地,步骤104中,将接收到的字符作为真字符之前,还包括:

装置判断接收到的字符与当前应用的专属内存中存有的可接受字符类型是否匹配,是则将接收到的字符作为真字符,否则继续等待并接收用户输入的字符。

可选地,在本实施例中,步骤101之前,还包括:装置创建模拟输入线程并初始化模拟输入线程的按下标识和弹起标识均为第一预设值,所述模拟输入线程模拟用户输入;

对应地,步骤104中,将接收到的字符作为真字符之前,还包括:装置判断接收到的字符是否为用户的真实输入,是则将接收到的字符作为真字符,否则继续等待并接收用户输入的字符。

在本实施例中,模拟输入线程模拟用户输入,具体包括:将所述按下标识和所述弹起标识均设置为第二预设值,随机生成扫描码,将生成的扫描码发送至键盘并保存至第一扩展区中;

对应地,所述继续等待并接收用户输入的字符之前,还包括:将所述按下标识和所述弹起标识均设置为第一预设值,清除第一扩展区中存有的扫描码;

在本实施例中,装置判断接收到的字符是否为用户的真实输入,具体包括:

步骤b1:装置判断所述按下标识和所述弹起标识是否均为第一预设值,是则判定接收到的字符是用户的真实输入;否则执行步骤b2;

步骤b2:装置获取来自键盘的扫描码,判断获取到的扫描码与第一扩展区中存有的扫描码是否相同,是则判定接收到的字符不是用户的真实输入;否则判定接收到的字符是用户的真实输入。

在本实施例中,步骤101之前,还包括:装置初始化键盘过滤的状态为关闭;

对应地,本实施例中的方法,还包括:当装置接收到第四请求时,执行步骤5:

步骤5:装置将当前运行环境对应的应用作为当前应用,设置键盘过滤的状态为开启,返回响应数据给当前应用;

步骤104中,等待并接收用户输入的字符之前,还包括:装置判断键盘过滤的状态是否为开启,是则继续;否则等待并接收用户输入的字符,将接收到的字符返回给当前应用。

进一步地,在本实施例中,步骤5中,设置键盘过滤的状态为开启之前,还包括:装置判断第四请求中含有的线程号、进程号、irp文件对象是否均正确,是则继续,否则返回错误码给当前应用。

其中,装置判断第四请求中含有的线程号、进程号、irp文件对象是否均正确,具体为:装置获取当前应用的线程号、进程号、irp文件对象,判断获取到的线程号、进程号、irp文件对象与第四请求中含有的线程号、进程号、irp文件对象是否均相同,是则判定第四请求中含有的线程号、进程号、irp文件对象均正确,否则判定第四请求中含有的线程号、进程号、irp文件对象不正确。

本实施例步骤105中,使用读取到的第一密钥对查找到的真字符加密并将加密结果返回给当前应用,具体为:

装置根据查找到的真字符生成明文应答数据,使用读取到的第一密钥对生成的明文应答数据加密得到密文应答数据,将密文应答数据返回给当前应用。

其中,装置根据查找到的真字符生成明文应答数据,具体为:

装置生成第二随机数,将第二随机数的预设位上的数据替换为查找到的真字符后作为明文应答数据;

或者,

装置将预设数据的预设位上的数据替换为查找到的真字符后作为明文应答数据。

实施例二

本发明实施例二提供一种支持多应用的安全输入方法,如图2和图3所示,包括:

步骤201:装置创建第一设备对象,为第一设备对象分配第一扩展区,创建模拟输入线程,初始化键盘过滤的状态为关闭;

在本实施例中,装置创建模拟输入线程,具体包括:装置创建模拟输入线程,初始化模拟输入线程的按下标识和弹起标识均为第一预设值,并保存至第一扩展区中;

优选地,第一预设值为false;

在本实施例中,初始化键盘过滤的状态为关闭,具体为:初始化键盘过滤的状态标识flag为0。

需要说明地,本发明中当将键盘过滤的状态为开启时,装置对接收到的用户输入的字符执行安全处理,且在将键盘过滤的状态设置为开启时,模拟输入线程启动并开始模拟用户输入;当键盘过滤的状态为关闭时,装置将接收到的用户输入的字符直接返回给上层应用。

步骤202:装置通过第一设备对象等待并接收请求,当接收到第一请求时,执行步骤203;当接收到第二请求时,执行步骤204;当接收到第三请求时,执行步骤208;当接收到第四请求时,执行步骤212;当接收到第五请求时,执行步骤214;当接收到第六请求时,执行步骤219;当接收到第七请求时,执行步骤221;当接收到第八请求时,执行步骤222;

在本实施例中,上层应用向装置发送请求之前,还包括:上层应用打开第一设备对象,获取第一设备对象句柄,并使用获取到的第一设备对象句柄向装置发送请求。

步骤203:装置将当前运行环境对应的上层应用作为当前应用,并判断是否存在第二设备对象,是则返回响应数据给当前应用,返回步骤202;否则创建第二设备对象,为第二设备对象分配第二扩展区,返回响应数据给当前应用,返回步骤202;

在本实施例中,第一请求为创建第二设备对象请求;其中,第二设备对象具体用于获取用户通过键盘输入的字符;

第一请求具体为:irp_mj_create;

具体地,装置判断键盘的设备栈中是否存有第二设备对象,是则返回响应数据给当前应用,返回步骤202;否则创建第二设备对象,为第二设备对象分配第二扩展区,并将创建的第二设备对象挂载至键盘的设备栈中,返回响应数据给当前应用,返回步骤202。

步骤204:装置将当前运行环境对应的上层应用作为当前应用,获取当前应用的线程号、进程号和irp文件对象;

在本实施例中,第二请求为设置第一密钥请求;

第二请求具体为:irp_mj_device_control;

具体地,装置调用第一函数接口获取当前应用的线程号,调用第二函数接口获取当前应用的进程号,调用第三函数接口获取当前应用的irp文件对象;

在本实施例中,第一函数接口具体为:psgetcurrentthreadid;

第二函数接口具体为:psgetcurrentprocessid;

第三函数接口具体为:iogetcurrentirpstacklocation;

例如,在本实施例中,获取到的当前应用的线程号为1000、进程号为2000、irp文件对象为0x00001001。

步骤205:装置根据获取到的线程号、进程号和irp文件对象判断当前应用的专属内存是否存在,是则执行步骤207,否则执行步骤206;

在本实施例中,装置根据获取到的线程号、进程号和irp文件对象判断当前应用的专属内存是否存在,具体包括:

步骤n1:装置查找到第一设备对象的第一扩展区;

步骤n2:装置在第一扩展区中查找到用户信息结构链表,判断用户信息结构链表是否为空,是则判定当前应用的专属内存不存在,执行步骤206;否则将用户信息结构链表中的第一个元素作为当前元素,执行步骤n3;

步骤n3:装置读取当前元素中的地址,根据读取到的地址查找到对应的专属内存;

步骤n4:装置读取查找到的专属内存中存有的进程号、线程号和irp文件对象,判断读取到的进程号、线程号和irp文件对象与获取到的进程号、线程号和irp文件对象是否均相同,是则判定当前应用的专属内存存在,执行步骤207;否则执行步骤n5;

步骤n5:装置判断当前元素是否为用户信息结构链表中的最后一个元素,是则判定当前应用的专属内存不存在,执行步骤206;否则将当前元素的下一个元素作为当前元素,返回步骤n3。

步骤206:装置为当前应用分配专属内存,并将获取到的线程号、进程号和irp文件对象保存至分配的专属内存中;

具体地,装置在共享内存中分配一块存储空间作为当前应用的专属内存,并将获取到的线程号、进程号和irp文件对象保存至分配的专属内存中;

在本实施例中,步骤206之后,还包括:装置将分配的专属内存的地址添加到第一扩展区中的用户信息结构链表中;

例如,在本实施例中,分配的与当前应用对应的专属内存的地址为0x100100f1,将其添加到第一扩展区中的用户信息结构链表中。

步骤207:装置解析接收到的第二请求得到第一随机数,根据得到的第一随机数生成第一密钥,将第一密钥保存至当前应用的专属内存中,返回响应数据给当前应用,返回步骤202;

在本实施例中,装置根据得到的第一随机数生成第一密钥,具体为:装置将得到的第一随机数作为参数传入第四函数接口,调用第四函数接口生成第一密钥;

优选地,在本实施例中,第一密钥为sm4对称密钥;

在本实施例中,第四函数接口具体为getsymmtrickey;

例如,在本实施例中,装置解析第二请求得到第一随机数为0031ea702e30ea70da30ea700830ea70,生成的第一密钥为5a853403a922a688dfdf2264f4e30b41。

步骤208:装置将当前运行环境对应的上层应用作为当前应用,获取当前应用的线程号、进程号和irp文件对象;

在本实施例中,第三请求为设置可接受字符类型请求;

第三请求具体为:irp_mj_device_control;

本步骤中,装置获取当前应用对应的线程号、进程号和irp文件对象的方法同步骤204中所述的装置获取当前应用对应的线程号、进程号和irp文件对象的方法相同,在此不在赘述;

例如,装置获取到的当前应用对应的线程号为1001、进程号为2001和irp文件对象为0x00001001。

步骤209:装置根据获取到的线程号、进程号和irp文件对象判断当前应用的专属内存是否存在,是则执行步骤211,否则执行步骤210;

在本实施例中,步骤209的实现方法同步骤205的实现方法相同,在此不再赘述。

步骤210:装置为当前应用分配专属内存,并将获取到的线程号、进程号和irp文件对象保存至分配的专属内存中;

具体地,装置在共享内存中分配一块存储空间作为当前应用的专属内存,并将获取到的线程号、进程号和irp文件对象保存至分配的专属内存中;

在本实施例中,步骤210之后,还包括:装置将分配的专属内存的地址添加到第一扩展区中的用户信息结构链表中。

步骤211:装置解析第三请求得到可接受字符类型,将可接受字符类型保存至当前应用的专属内存中,返回响应数据给当前应用,返回步骤202;

具体地,装置解析第三请求得到可接受字符类型,并将当前应用的专属内存中的可接受字符类型标识设置为相应的值;

优选地,在本实施例中,当可接受字符类型为数字时,装置将所述可接受字符类型标识设置为1,当可接受字符类型为大写字母时,装置将所述可接受字符类型标识设置为2;当可接受字符类型为小写字母时,装置将所述可接受字符类型标识设置为4;当可接受字符类型为所有字符时,装置将所述可接受字符类型标识设置为8;

例如,在本实施例中,装置解析第三请求得到可接受字符类型为所有字符,则将可接受字符类型标识设置为8。

步骤212:装置将当前运行环境对应的上层应用作为当前应用,解析接收到的第四请求得到线程号、进程号和irp文件对象,判断解析得到的线程号、进程号和irp文件对象是否均正确,是则执行步骤213,否则返回错误码给当前应用,返回步骤202;

在本实施例中,第四请求为开启键盘过滤请求;

第四请求具体为:irp_mj_device_control;

具体地,装置获取当前应用对应的线程号、进程号和irp文件对象,判断获取到的线程号和进程号与解析得到的线程号、进程号和irp文件对象是否均相同,是则判定解析得到的线程号、进程号和irp文件对象正确,执行步骤213;否则判定解析得到的线程号、进程号和irp文件对象不正确,返回错误码给当前应用,返回步骤202。

步骤213:装置将键盘过滤的状态置为开启,并返回响应数据给当前应用,返回步骤202;

在本实施例中,装置将键盘过滤的状态置为开启,即将标识flag置为1。

在本实施例中,装置将键盘过滤的状态置为开启时,步骤201中装置创建的模拟输入线程启动并模拟用户输入;

其中,模拟输入线程模拟用户输入的过程,具体包括:模拟输入线程将第一扩展区中的按下标识和弹起标识的状态均设置为第二预设值,随机生成扫描码,将生成的扫描码保存至第一扩展区中,并将生成的扫描码发送至键盘硬件端口来模拟用户输入。

优选地,在本实施例中,第二预设值为true。

步骤214:装置将当前运行环境对应的应用作为当前应用,判断键盘过滤的状态是否为开启,是则执行步骤215;否则通过第二设备对象等待并接收用户输入的字符,并将接收到的字符返回给当前应用,返回步骤202;

在本实施例中,第五请求具体为获取键盘输入字符请求;

第五请求具体为:irp_mj_read;

需要说明地,当用户将光标移动至上层应用的输入框时,上层应用等待用户通过键盘输入字符,系统发送第五请求给装置获取用户通过键盘输入的字符,并将获取到的字符返回给上层应用;

步骤215:装置通过创建的第二设备对象等待并接收用户输入的字符,判断接收到的字符是否为用户的真实输入,是则执行步骤216,否则继续执行步骤215;

在本实施例中,判断接收到的字符是否为用户的真实输入,具体包括:

步骤215-1:装置在第一扩展区中读取模拟输入线程的按下标识和弹起标识的状态信息,判断是否均为第一预设值,是则判定接收到的字符是用户的真实输入;否则执行步骤215-2;

步骤215-2:装置获取来自键盘的扫描码,判断获取到的扫描码与第一扩展区中存有的扫描码是否相同,是则判定接收到的字符不是用户的真实输入,否则判定接收到的字符是用户的真实输入。

进一步地,在本实施例中,当装置判断出接收到的字符不是用户的真实输入时,还包括:装置将模拟输入线程的按下标识和弹起标识的状态均设置为第一预设值,并清除第一扩展区中的扫描码。

步骤216:装置判断接收到的字符是否为可接受字符,是则执行步骤217,否则返回步骤215;

具体地,装置判断接收到的字符与当前应用的专属内存中存有的可接受字符类型是否匹配,是则判定接收到的字符是可接受字符,否则判定接收到的字符不是可接受字符;

更加具体地,装置解析第五请求得到当前应用的线程号、进程号和irp文件对象,根据得到的线程号、进程号和irp文件对象查找到当前应用对应的专属内存,读取查找到的专属内存中存有的可接受字符标识的值,根据读取到的值确定可接受字符类型,判断接收到的字符与确定的可接受字符类型是否匹配,是则判定接收到的字符是可接受字符,否则判定接收到的字符不是可接受字符;

例如,在本实施例中,接收到的字符为0,读取到可接受字符标识的值为8,确定可接受字符类型为所有字符,判定接收到的字符0是可接受字符。

进一步地,在本实施例中,根据得到的线程号、进程号和irp文件对象查找到当前应用对应的专属内存,具体包括:

步骤m1:装置查找到第一设备对象的第一扩展区;

步骤m2:装置在第一扩展区中查找到用户信息结构链表,将用户信息结构链表中的第一个元素作为当前元素,执行步骤m3;

步骤m3:装置根据读取当前元素中的地址,根据读取到的地址查找到对应的专属内存;

步骤m4:装置读取查找到的专属内存中存有的进程号、线程号和irp文件对象,判断读取到的进程号、线程号和irp文件对象与获取到的进程号、线程号和irp文件对象是否均相同,是则判定查找到当前应用对应的专属内存;否则执行步骤m5;

步骤m5:装置判断当前元素是否为用户信息结构链表中的最后一个元素,是则判定未查找到当前应用对应的专属内存,返回错误码给上层应用;否则将当前元素的下一个元素作为当前元素,返回步骤m3。

步骤217:装置将接收到的字符作为真字符,生成与真字符对应的伪字符,并将真字符和伪字符对应保存至第二扩展区中;

例如,在本实施例中,装置接收到的字符为0,将其作为用户输入的真字符,随机生成对应的伪字符为m,将0与m对应保存至第二扩展区中。

步骤218:装置将生成的伪字符返回给当前应用,返回步骤202;

步骤219:装置将当前运行环境对应的上层应用作为当前应用,解析第六请求得到伪字符,读取与伪字符对应保存的真字符;

在本实施例中,第六请求为获取用户输入字符请求;

第六请求具体为:irp_mj_device_control;

具体地,装置解析第六请求得到伪字符,在第二扩展区中查找到与得到的伪字符对应保存的真字符;

例如,在本实施例中,装置解析第六请求得到伪字符m,在第二扩展区中查找到与得到的伪字符m对应保存的真字符0。

步骤220:装置根据读取到的真字符生成明文应答数据,使用当前应用的第一密钥对明文应答数据加密得到密文应答数据,发送密文应答数据给当前应用,返回步骤202;

具体地,装置生成第二随机数,并将生成的第二随机数的预设位上的数据替换为读取到的真字符后作为明文应答数据,并获取当前应用的线程号、进程号和irp文件对象,根据获取到的线程号、进程号和irp文件对象查找到当前应用的专属内存,读取查找到的专属内存中的第一密钥,使用读取到的第一密钥对明文应答数据加密得到密文应答数据,将得到的密文应答数据返回给当前应用;

其中,根据获取到的线程号、进程号和irp文件对象查找到当前应用的专属内存的方法同步骤216中所述的根据获取到的线程号、进程号和irp文件对象查找到当前应用的专属内存的方法相同,在此不再赘述;

优选地,在本实施例中,预设位为第二随机数的最后一位,但不限于最后一位。

例如,在本实施例中,生成的第二随机数为a30b7de557bf31990b73e54dbf279901,明文应答数据为a30b7de557bf31990b73e54dbf279900,读取到的第一密钥为5a853403a922a688dfdf2264f4e30b41,使用读取到的第一密钥对明文应答数据加密得到密文应答数据为f714722ba883f7d26ef8befd15938919。

进一步地,在本实施例中,装置根据读取到的真字符生成明文应答数据,还可以为:装置将预设数据的预设位上的数据替换为读取到的真字符后,作为明文应答数据。

更进一步地,在本实施例中,当上层应用接收到装置返回的密文应答数据时,将密文应答数据保存,并根据第二密钥生成第七请求,发送第七请求给装置获取第一密钥;

在本实施例中,第七请求具体为irp_mj_device_control;

优选地,在本实施例中,第二密钥为sm2公钥;

例如,在本实施例中,第二密钥为26ea8a3930208efd9132f71c510aab57438b3dbc27d304e798eccaf2a0ea74eb7500d9cff30e631015c773728e8c2509380a22e1e742b6aba09dcf857c42ccea。

步骤221:装置将当前运行环境对应的应用作为当前应用,解析第七请求得到第二密钥,读取当前应用的第一密钥,并使用第二密钥对第一密钥加密得到第一密钥密文,发送第一密钥密文给当前应用,返回步骤202;

具体地,装置解析第七请求得到第二密钥,并获取当前应用的线程号、进程号和irp文件对象,根据获取到线程号、进程号和irp文件对象查找到当前应用的专属内存,读取查找到的专属内存中存有的第一密钥,使用第二密钥对读取到的第一密钥加密得到第一密钥密文,发送第一密钥密文给当前应用,返回步骤202;

例如,在本实施例中,装置解析上述第七请求得到的第二密钥为26ea8a3930208efd9132f71c510aab57438b3dbc27d304e798eccaf2a0ea74eb7500d9cff30e631015c773728e8c2509380a22e1e742b6aba09dcf857c42ccea,读取到当前应用的第一密钥为5a853403a922a688dfdf2264f4e30b41,加密得到的第一密钥密文为0436d7771476d887636dfdf2feda814b97faf935630f56ba044c51fe43c6499c1df9f3dcff7ef833dcbf6cc8e2134cdc281bf886f5172ec64720fb4925799d5551c0586ef53c77b0e2a42928db605b68f27fb11b68d87f1e5548743aeea41dcbc0c6521361bf84008d82e870761f19689b。

进一步地,在本实施例中,当前应用接收到第一密钥密文之后,将第一密钥密文与上述密文应答数据对应保存,当服务器需要用户输入的字符时,上层应用将第一密钥密文和密文应答数据发送给服务器,服务器使用与第二密钥对应的sm2私钥解密第一密钥密文得到第一密钥,使用第一密钥解密密文应答数据得到明文应答数据,读取明文应答数据中最后一位上的数据得到真字符。

步骤222:装置将当前运行环境对应的应用作为当前应用,获取当前应用的线程号、进程号和irp文件对象;

在本实施例中,第八请求为关闭请求,

第八请求具体为closehandle;

进一步地,本步骤中,获取当前应用的线程号、进程号和irp文件对象的方法,同步骤204中所述的获取当前应用的线程号、进程号和irp文件对象的方法相同,在此不再赘述。

步骤223:装置根据获取到的线程号、进程号和irp文件对象,查找到当前应用的专属内存,释放查找到的专属内存,返回步骤202;

本步骤中,根据获取到的线程号、进程号和irp文件对象查找到当前应用的专属内存的方法同步骤216中所述的根据获取到的线程号、进程号和irp文件对象查找到当前应用对应的专属内存的方法相同,在此不再赘述;

在本实施例中,释放查找到的专属内存,具体为:清空查找到的专属内存;

在装置释放查找到的专属内存之后,还包括:将第一扩展区中的用户信息结构链表中含有的当前应用对应的专属内存的地址移除;例如,在本实施例中,将当前应用对应的专属内存的地址0x100100f1移除。

需要说明地,在本实施例中,装置接收到的请求均为irp请求,当装置接收到irp请求时,还包括:装置将接收到的irp请求挂起;

对应地,装置返回响应数据给上层应用,具体为:装置将响应数据保存至对应的irp数据包中,系统读取所述irp数据包中的响应数据并发送给当前应用。

进一步地,在本实施例中,装置接收上层应用发送来的上述请求之前,还包括:装置接收上层应用发送来的获取会话密钥请求,并生成随机数作为会话密钥返回给对应的上层应用;

对应地,当装置接收到上述请求时,还包括:装置使用对应的随机数作为会话密钥解密接收到的请求。

更进一步地,在本实施例中,步骤207还可以为:装置解析接收到的第二请求得到第一密钥,将第一密钥保存至当前应用的专属内存中,返回响应数据给当前应用,返回步骤202;

对应地,上层应用无需发送第七请求获取第一密钥。

本实施例中的技术方案,在装置与多个上层应用通讯时,装置为上层应用分配专属内存,并将接收到的数据保存至对应的专属内存中,有效的避免了装置因数据混淆而造成的通讯失败;并且装置对用户通过键盘输入的数据进行处理后返回给上层应用,提升了数据的安全性。

实施例三

本发明实施例三提供一种支持多应用的安全输入装置,如图4所示,包括:

第一接收模块301,用于接收请求;

第一作为模块302,用于当第一接收模块301接收到第二请求时,将当前运行环境对应的应用作为当前应用;

第一判断模块303,用于判断当前应用的专属内存是否存在;

分配模块304,用于当第一判断模块303判断出当前应用的专属内存不存在时,为当前应用分配专属内存;

第一保存模块305,用于当第一判断模块303判断出当前应用的专属内存存在时,根据第二请求保存当前应用的第一密钥至当前应用的专属内存中;还用于当分配模块304为当前应用分配专属内存之后,根据第二请求保存当前应用的第一密钥至当前应用的专属内存中;

第一发送模块306,用于在第一保存模块305根据第二请求保存当前应用的第一密钥至当前应用的专属内存中之后,返回响应数据给当前应用;

第一接收模块301,还用于在第一发送模块306返回响应数据给当前应用之后,接收请求;

第一作为模块302,还用于当第一接收模块301接收到第五请求时,将当前运行环境对应的应用作为当前应用;

第二接收模块307,用于接收用户输入的字符;

第二作为模块308,还用于将第二接收模块307接收到的字符作为真字符;

生成模块309,用于随机生成与所述第二作为模块308得到的真字符对应的伪字符;

第二保存模块310,用于将所述第二作为模块308得到的真字符与生成模块309生成的伪字符对应保存;

第一发送模块306,还用于将生成模块309生成的伪字符返回给当前应用;

第一接收模块301,还用于在第一发送模块306将生成模块309生成的伪字符返回给当前应用之后,接收请求;

第一作为模块302,还用于当第一接收模块301接收到第六请求时,将当前运行环境对应的应用作为当前应用;

解析模块311,用于解析第一接收模块301接收到的第六请求得到伪字符;

查找模块312,用于查找到与解析模块311得到的伪字符对应保存的真字符;

第一读取模块313,用于在当前应用的专属内存中读取第一密钥;

加密模块314,用于使用第一读取模块313读取到的第一密钥对查找模块312查找到的真字符加密;

第一发送模块306,还用于将加密模块314得到的加密结果返回给当前应用;

第一接收模块301,还用于在第一发送模块306将加密模块314得到的加密结果返回给当前应用之后,接收请求。

本实施例中的装置,还包括:第一创建模块;

所述第一创建模块,用于第一接收模块301接收请求之前,创建第一设备对象;

对应地,第一接收模块301,具体用于:通过第一创建模块创建的第一设备对象接收请求。

本实施例中的装置,还包括:第二判断模块和第二创建模块;

第一作为模块302,还用于当第一接收模块301接收到第一请求时,将当前运行环境对应的应用作为当前应用;

第二判断模块,用于判断是否存在第二设备对象;

第一发送模块306,还用于当第二判断模块判断出存在第二设备对象时,返回响应数据给当前应用;

第二创建模块,用于当第二判断模块判断出不存在第二设备对象时,创建第二设备对象;

分配模块304,还用于为第二创建模块创建的第二设备对象分配第二扩展区;

对应地,第二接收模块307,具体用于:通过第二创建模块创建的第二设备对象接收用户输入的字符;

第二保存模块310,具体用于:将真字符与生成模块309生成的伪字符对应保存至第二扩展区中。

在本实施例中,第一判断模块303,具体包括:第一获取单元和第一判断单元;

其中,第一获取单元,用于获取当前应用的线程号、进程号和irp文件对象;

第一判断单元,用于根据第一获取单元获取到的线程号、进程号和irp文件对象判断当前应用的专属内存是否存在;

第一保存模块305,还用于在分配模块304为当前应用分配专属内存之后,将第一获取单元获取到的当前应用的线程号、进程号和irp文件对象保存至分配的专属内存中。

在本实施例中,第一保存模块305,还用于在分配模块304为当前应用分配专属内存之后,将分配的专属内存的地址保存至用户信息结构链表中;

对应地,第一判断单元,具体包括:查找子单元、第一判断子单元、读取子单元和第二判断子单元;

其中,查找子单元,用于查找用户信息结构链表;

第一判断子单元,用于判断用户信息结构链表是否为空,是则判定当前应用的专属内存不存在;

读取子单元,用于当第一判断子单元判断出用户信息结构链表不为空时,依次读取用户信息结构链表的各元素中存有的地址,并在读取到的地址对应的专属内存中读取存有的线程号、进程号和irp文件对象;

第二判断子单元,用于判断读取子单元是否能够读取到与获取到的线程号、进程号和irp文件对象均一致的线程号、进程号和irp文件对象,是则判定当前应用的专属内存存在,否则判定当前应用的专属内存不存在。

本实施例中的装置,还包括:释放模块;

第一保存模块305,还用于在分配模块304为当前应用分配专属内存之后,将分配的专属内存的地址保存至用户信息结构链表中;

第一作为模块302,还用于当第一接收模块301接收到第八请求时,将当前运行环境对应的应用作为当前应用;

释放模块,用于释放当前应用的专属内存,在用户信息结构链表中移除当前应用的专属内存的地址;

第一发送模块306,还用于在释放模块释放当前应用的专属内存,在用户信息结构链表中移除当前应用的专属内存的地址之后,返回响应数据给当前应用。

可选地,在本实施例中,第一保存模块305,具体用于:解析第二请求得到当前应用的第一密钥,将第一密钥保存至当前应用的专属内存中。

可选地,在本实施例中,第一保存模块305,具体用于:解析第二请求得到第一随机数,根据第一随机数生成第一密钥,将第一密钥保存至当前应用的专属内存中。

对应地,本实施例中的装置,还包括:第二读取模块和第二发送模块;

第一作为模块302,还用于当第一接收模块301接收到第七请求时,将当前运行环境对应的应用作为当前应用;

第二读取模块,用于读取当前应用的专属内存中存有的第一密钥;

第二发送模块,用于将第二读取模块读取到的第一密钥返回给当前应用;

第一接收模块301,还用于在第二发送模块将第二读取模块读取到的第一密钥返回给当前应用之后,接收请求。

在本实施例中,解析模块311,还用于在第二发送模块将第二读取模块读取到的第一密钥返回给当前应用之前,解析第七请求得到第二密钥;

第二发送模块,具体用于:使用解析模块311得到的第二密钥加密第二读取模块读取到的第一密钥得到第一密钥密文,将第一密钥密文返回给当前应用。

本实施例中的装置,还包括:第三判断模块和第四判断模块;

第一作为模块302,还用于在第一接收模块301接收到第三请求时,将当前运行环境对应的应用作为当前应用;

第三判断模块,用于判断当前应用的专属内存是否存在;

分配模块304,还用于当第三判断模块判断出当前应用的专属内存不存在时,为当前应用分配专属内存;

解析模块311,还用于当第三判断模块判断出当前应用的专属内存存在时,解析第三请求得到可接受字符类型;还用于当分配模块304为当前应用分配专属内存之后,解析第三请求得到可接受字符类型;

第一保存模块305,还用于将解析模块311得到的可接受字符类型保存至当前应用的专属内存中;

第四判断模块,用于在第二作为模块308将第二接收模块307接收到的字符作为真字符之前,判断第二接收模块307接收到的字符与当前应用的专属内存中存有的可接受字符类型是否匹配;

第二作为模块308,具体用于:当第四判断模块判断出第二接收模块307接收到的字符与当前应用的专属内存中存有的可接受字符类型匹配时,将第二接收模块307接收到的字符作为真字符;

第二接收模块307,还用于当第四判断模块判断出第二接收模块307接收到的字符与当前应用的专属内存中存有的可接受字符类型不匹配时,继续接收用户输入的字符。

本实施例中的装置,还包括:第三创建模块和第五判断模块;

其中,第三创建模块,用于在第一接收模块301接收请求之前,创建模拟输入模块并初始化模拟输入模块的按下标识和弹起标识均为第一预设值,所述模拟输入模块用于模拟用户输入;

第五判断模块,用于在第二作为模块308将第二接收模块307接收到的字符作为真字符之前,判断第二接收模块307接收到的字符是否为用户的真实输入;

第二作为模块308,具体用于:当第五判断模块判断出第二接收模块307接收到的字符是用户的真实输入时,将第二接收模块307接收到的字符作为真字符;

第二接收模块307,还用于当第五判断模块判断出第二接收模块307接收到的字符不是用户的真实输入时,继续接收用户输入的字符。

本实施例中的装置,还包括:第一设置模块和清除模块;

所述模拟输入模块,具体用于:将所述按下标识和所述弹起标识均设置为第二预设值,随机生成扫描码,将所述扫描码发送至键盘并保存至第一扩展区中;

第一设置模块,用于在第二接收模块307继续接收用户输入的字符之前,将所述按下标识和所述弹起标识均设置为第一预设值;

清除模块,用于在第二接收模块307继续接收用户输入的字符之前,清除第一扩展区中存有的扫描码;

在本实施例中,第五判断模块,具体包括:第二判断单元、第二获取单元和第三判断单元;

其中,第二判断单元,用于判断所述按下标识和所述弹起标识是否均为第一预设值,是则判定第二接收模块307接收到的字符是用户的真实输入;

第二获取单元,用于当第而判断单元判断出所述按下标识和所述弹起标识不均为第一预设值时,获取来自键盘的扫描码;

第三判断单元,用于判断第二获取单元获取到的扫描码与第一扩展区中存有的扫描码是否相同,是则判定第二接收模块307接收到的字符不是用户的真实输入;否则判定第二接收模块307接收到的字符是用户的真实输入。

本实施例中的装置,还包括:初始化模块、第二设置模块和第六判断模块;

其中,初始化模块,用于在第一接收模块301接收请求之前,初始化键盘过滤的状态为关闭;

第一作为模块302,还用于当第一接收模块301接收到第四请求时,将当前运行环境对应的应用作为当前应用;

第二设置模块,用于设置键盘过滤的状态为开启;

第一发送模块306,还用于在第二设置模块设置键盘过滤的状态为开启之后,返回响应数据给当前应用;

第六判断模块,用于在第二接收模块307接收用户输入的字符之前,判断键盘过滤的状态是否为开启;

第二接收模块307,具体用于:当第六判断模块判断出键盘过滤的状态为开启时,接收用户输入的字符;还用于当第六判断模块判断出键盘过滤的状态不为开启时,接收用户输入的字符;

第二作为模块308,具体用于:当第六判断模块判断出键盘过滤的状态为开启时,将第二接收模块307接收到的字符作为真字符;

第一发送模块306,还用于当第六判断模块判断出键盘过滤的状态不为开启时,将第二接收模块307接收到的字符返回给当前应用。

本实施例中的装置,还包括:第七判断模块;

第七判断模块,用于在第二设置模块设置键盘过滤的状态为开启之前,判断第四请求中含有的线程号、进程号、irp文件对象是否均正确;

第二设置模块,具体用于:在第七判断模块判断出第四请求中含有的线程号、进程号、irp文件对象均正确时,设置键盘过滤的状态为开启;

第一发送模块306,还用于在第七判断模块判断出第四请求中含有的线程号、进程号、irp文件对象不均正确时,返回错误码给当前应用。

在本实施例中,第七判断模块,具体用于:获取当前应用的线程号、进程号、irp文件对象,判断获取到的线程号、进程号、irp文件对象与第四请求中含有的线程号、进程号、irp文件对象是否均相同,是则判定第四请求中含有的线程号、进程号、irp文件对象均正确,否则判定第四请求中含有的线程号、进程号、irp文件对象不正确。

在本实施例中,加密模块314,包括:生成单元和加密单元;

其中,生成单元,用于根据查找模块312查找到的真字符生成明文应答数据;

加密单元,用于使用第一读取模块313读取到的第一密钥对生成单元生成的明文应答数据加密得到密文应答数据;

第一发送模块306,具体用于:将加密单元得到的密文应答数据返回给当前应用。

在本实施例中,生成单元,具体用于:

生成第二随机数,将第二随机数的预设位上的数据替换为所述真字符后作为明文应答数据;

或者,

将预设数据的预设位上的数据替换为所述真字符后作为明文应答数据。

本发明中的技术方案,在所述装置(即:windows驱动)与多个上层应用通讯时,为上层应用分配专属内存,并将接收到的数据保存至对应的专属内存中,有效的避免了装置因数据混淆而造成的通讯失败;并且装置对用户通过键盘输入的数据进行处理后返回给上层应用,提升了数据的安全性。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

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