驱动程序防护方法及装置制造方法及图纸

技术编号:36269911 阅读:44 留言:0更新日期:2023-01-07 10:11
本公开涉及计算机技术领域,尤其涉及一种驱动程序防护方法及装置,所述方法包括:在硬件设备的驱动程序载入内存后,确定所述驱动程序的关键信息;确定第一线程信息、第二线程信息及第三线程信息;启动所述第一线程、所述第二线程及所述第三线程;根据所述关键信息、所述第一线程信息、所述第二线程信息及所述第三线程信息,所述第一线程对所述第二线程、所述第二线程对所述第三线程和所述驱动程序、及所述第三线程对所述第一线程和所述驱动程序进行守护。本公开的实施例通过第一线程、第二线程及第三线程,以环形方式,对驱动程序进行守护,防止驱动程序被劫持,从而提高驱动程序的安全性。安全性。安全性。

【技术实现步骤摘要】
驱动程序防护方法及装置


[0001]本公开涉及计算机
,尤其涉及一种驱动程序防护方法及装置。

技术介绍

[0002]计算机通常包括显卡、声卡、网卡等硬件设备,操作系统通过驱动程序与硬件设备进行通信,例如,操作系统通过显卡驱动程序与显卡进行通信。在计算机使用过程中,硬件设备的驱动程序经常会被劫持,例如,驱动程序中的一些函数经常会被挂钩子(Hook)或被打补丁,从而出现用户数据被篡改或被破坏的情形,影响用户使用。因此,亟需一种能够防止硬件设备的驱动程序被劫持的方法。

技术实现思路

[0003]有鉴于此,本公开提出了一种驱动程序防护方法及装置。
[0004]根据本公开的一方面,提供了一种驱动程序防护方法,所述方法包括:在硬件设备的驱动程序载入内存后,确定所述驱动程序的关键信息,所述关键信息包括所述驱动程序的回调函数表信息、回调函数信息及派遣函数表信息中的至少一种;确定第一线程信息、第二线程信息及第三线程信息,所述第一线程信息包括第一线程对应的第一代码的地址、长度及哈希值,所述第二线程信息包括第二线程对应的第二代码的地址、长度及哈希值,所述第三线程信息包括第三线程对应的第三代码的地址、长度及哈希值;启动所述第一线程、所述第二线程及所述第三线程;根据所述关键信息、所述第一线程信息、所述第二线程信息及所述第三线程信息,所述第一线程对所述第二线程、所述第二线程对所述第三线程和所述驱动程序、及所述第三线程对所述第一线程和所述驱动程序进行守护。
[0005]在一种可能的实现方式中,所述根据所述关键信息、所述第一线程信息、所述第二线程信息及所述第三线程信息,所述第一线程对所述第二线程、所述第二线程对所述第三线程和所述驱动程序、及所述第三线程对所述第一线程和所述驱动程序进行守护,包括:所述第一线程根据所述第二线程信息,对所述第二线程进行守护;所述第二线程根据所述关键信息及所述第三线程信息,对所述驱动程序的回调函数表、派遣函数表及所述第三线程进行守护;所述第三线程根据所述关键信息及所述第一线程信息,对所述驱动程序的回调函数及所述第一线程进行守护。
[0006]在一种可能的实现方式中,所述第一线程根据所述第二线程信息,对所述第二线程进行守护,包括:所述第一线程根据所述第二线程信息中的地址及长度,计算所述第二代码的哈希值;在所述第二代码的哈希值与所述第二线程信息中的哈希值相同的情况下,所述第一线程检查所述第二线程是否退出;在所述第二线程未退出的情况下,所述第一线程休眠预设时长后,重新从下述步骤开始执行:所述第一线程根据所述第二线程信息中的地址及长度,计算所述第二代码的哈希值。
[0007]在一种可能的实现方式中,所述第一线程根据所述第二线程信息,对所述第二线程进行守护,还包括:在所述第二代码的哈希值与所述第二线程信息中的哈希值不同的情
况下,所述第一线程根据驱动映像、第二线程信息中的地址及长度,对所述第二代码进行修复,所述驱动映像为硬盘上的原始的驱动程序在内存中的备份。
[0008]在一种可能的实现方式中,所述第一线程根据所述第二线程信息,对所述第二线程进行守护,还包括:在所述第二线程退出的情况下,所述第一线程重新启动所述第二线程。
[0009]在一种可能的实现方式中,所述第二线程根据所述关键信息及所述第三线程信息,对所述驱动程序的回调函数表、派遣函数表及所述第三线程进行守护,包括:所述第二线程根据所述关键信息中的回调函数表信息及派遣函数表信息,对所述驱动程序的回调函数表及派遣函数表进行守护;所述第二线程根据所述第三线程信息,对所述第三线程进行守护。
[0010]在一种可能的实现方式中,所述回调函数表信息包括所述驱动程序的回调函数表的地址、长度及哈希值,所述派遣函数表信息包括所述驱动程序的派遣函数表的地址、长度及哈希值;所述第二线程根据所述关键信息中的回调函数表信息及派遣函数表信息,对所述驱动程序的回调函数表及派遣函数表进行守护,包括:所述第二线程根据所述回调函数表信息中的地址及长度,计算所述驱动程序的回调函数表的哈希值;在所述驱动程序的回调函数表的哈希值与所述回调函数表信息中的哈希值不同的情况下,所述第二线程根据驱动映像、所述回调函数表信息中的地址及长度,对所述驱动程序的回调函数表进行修复;所述第二线程根据所述派遣函数表信息中的地址及长度,计算所述驱动程序的派遣函数表的哈希值;在所述驱动程序的派遣函数表的哈希值与所述派遣函数表信息中的哈希值不同的情况下,所述第二线程根据驱动映像、所述派遣函数表信息中的地址及长度,对所述驱动程序的派遣函数表进行修复。
[0011]在一种可能的实现方式中,所述第三线程根据所述关键信息及所述第一线程信息,对所述驱动程序的回调函数及所述第一线程进行守护,包括:所述第三线程根据所述关键信息中的回调函数信息,对所述驱动程序的回调函数进行守护;所述第三线程根据所述第一线程信息,对所述第一线程进行守护。
[0012]在一种可能的实现方式中,所述回调函数信息包括所述驱动程序的所有回调函数的地址、长度及哈希值;所述第三线程根据所述关键信息中的回调函数信息,对所述驱动程序的回调函数进行守护,包括:对于驱动程序的任一回调函数,所述第三线程根据所述回调函数信息中所述回调函数的地址及长度,计算所述回调函数的哈希值;在所述回调函数的哈希值与参考哈希值不同的情况下,所述第二线程根据驱动映像、所述回调函数表信息中所述回调函数的地址及长度,对所述回调函数的代码进行修复,所述参考哈希值为所述回调函数信息中所述回调函数的哈希值。
[0013]在一种可能的实现方式中,所述方法还包括:所述驱动程序的中断服务对所述第一线程进行守护。
[0014]在一种可能的实现方式中,所述驱动程序的中断服务对所述第一线程进行守护,包括:在所述驱动程序的中断服务执行中断处理之前,所述中断服务根据所述第一线程信息中的地址及长度,计算所述第一代码的哈希值;在所述第一代码的哈希值与所述第一线程信息中的哈希值相同的情况下,所述中断服务检查所述第一线程是否退出;在所述第一线程未退出的情况下,所述中断服务执行所述中断处理。
[0015]在一种可能的实现方式中,所述方法还包括:所述硬件设备的固件对所述中断服务进行守护。
[0016]在一种可能的实现方式中,所述关键信息还包括所述中断服务对应的中断处理函数信息,所述中断处理函数信息包括所述中断服务对应的中断处理函数的地址、长度及哈希值;所述硬件设备的固件对所述中断服务进行守护,包括:所述固件根据所述中断处理函数信息中的地址及长度,计算所述中断处理函数的哈希值;在所述中断处理函数的哈希值与所述中断处理函数信息中的哈希值相同的情况下,所述固件休眠预设时长后,重新从下述步骤开始执行:所述固件根据所述中断处理函数信息中的地址及长度,计算所述中断处理函数的哈希值。
[0017]在一种可能的实现方式中,所述硬件设备的固件对所述中断服务进行守护,包括:在所述中断处理函数的哈希值与所述中断处理函数信息中的哈希值不同的情况下,所述固件控制所述硬件设本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种驱动程序防护方法,其特征在于,所述方法包括:在硬件设备的驱动程序载入内存后,确定所述驱动程序的关键信息,所述关键信息包括所述驱动程序的回调函数表信息、回调函数信息及派遣函数表信息中的至少一种;确定第一线程信息、第二线程信息及第三线程信息,所述第一线程信息包括第一线程对应的第一代码的地址、长度及哈希值,所述第二线程信息包括第二线程对应的第二代码的地址、长度及哈希值,所述第三线程信息包括第三线程对应的第三代码的地址、长度及哈希值;启动所述第一线程、所述第二线程及所述第三线程;根据所述关键信息、所述第一线程信息、所述第二线程信息及所述第三线程信息,所述第一线程对所述第二线程、所述第二线程对所述第三线程和所述驱动程序、及所述第三线程对所述第一线程和所述驱动程序进行守护。2.根据权利要求1所述的方法,其特征在于,所述根据所述关键信息、所述第一线程信息、所述第二线程信息及所述第三线程信息,所述第一线程对所述第二线程、所述第二线程对所述第三线程和所述驱动程序、及所述第三线程对所述第一线程和所述驱动程序进行守护,包括:所述第一线程根据所述第二线程信息,对所述第二线程进行守护;所述第二线程根据所述关键信息及所述第三线程信息,对所述驱动程序的回调函数表、派遣函数表及所述第三线程进行守护;所述第三线程根据所述关键信息及所述第一线程信息,对所述驱动程序的回调函数及所述第一线程进行守护。3.根据权利要求2所述的方法,其特征在于,所述第一线程根据所述第二线程信息,对所述第二线程进行守护,包括:所述第一线程根据所述第二线程信息中的地址及长度,计算所述第二代码的哈希值;在所述第二代码的哈希值与所述第二线程信息中的哈希值相同的情况下,所述第一线程检查所述第二线程是否退出;在所述第二线程未退出的情况下,所述第一线程休眠预设时长后,重新从下述步骤开始执行:所述第一线程根据所述第二线程信息中的地址及长度,计算所述第二代码的哈希值。4.根据权利要求3所述的方法,其特征在于,所述第一线程根据所述第二线程信息,对所述第二线程进行守护,还包括:在所述第二代码的哈希值与所述第二线程信息中的哈希值不同的情况下,所述第一线程根据驱动映像、第二线程信息中的地址及长度,对所述第二代码进行修复,所述驱动映像为硬盘上的原始的驱动程序在内存中的备份。5.根据权利要求3所述的方法,其特征在于,所述第一线程根据所述第二线程信息,对所述第二线程进行守护,还包括:在所述第二线程退出的情况下,所述第一线程重新启动所述第二线程。6.根据权利要求2所述的方法,其特征在于,所述第二线程根据所述关键信息及所述第三线程信息,对所述驱动程序的回调函数表、派遣函数表及所述第三线程进行守护,包括:所述第二线程根据所述关键信息中的回调函数表信息及派遣函数表信息,对所述驱动
程序的回调函数表及派遣函数表进行守护;所述第二线程根据所述第三线程信息,对所述第三线程进行守护。7.根据权利要求6所述的方法,其特征在于,所述回调函数表信息包括所述驱动程序的回调函数表的地址、长度及哈希值,所述派遣函数表信息包括所述驱动程序的派遣函数表的地址、长度及哈希值;所述第二线程根据所述关键信息中的回调函数表信息及派遣函数表信息,对所述驱动程序的回调函数表及派遣函数表进行守护,包括:所述第二线程根据所述回调函数表信息中的地址及长度,计算所述驱动程序的回调函数表的哈希值;在所述驱动程序的回调函数表的哈希值与所述回调函数表信息中的哈希值不同的情况下,所述第二线程根据驱动映像、所述回调函数表信息中的地址及长度,对所述驱动程序的回调函数表进行修复;所述第二线程根据所述派遣函数表信息中的地址及长度,计算所述驱动程序的派遣函数表的哈希值;在所述驱动程序的派遣函数表的哈希值与所述派遣函数表信息中的哈希值不同的情况下,所述第二线程根据驱动映像、所述派遣函数表信息中的地址及长度,对所述驱动程序的派遣函数表进行修复。8.根据权利要求2所述的方法,其特征在于,所述第三线程根据所述关键信息及所述第一线程信息,对所述驱动程序的回调函数及所述第一线程进行守护,包括:所述第三线程根据所述关键信息中的回调函数信息,对所述驱动程序的回调函数进行守护;所述第三线程根据所述第一线程信息,对所述第一线程进行守护。9.根据权利要求8所述的方法,其特征在于,所述回调函数信息包括所述驱动程序的所有回调函数的地址、长度及哈希值;所述第三线程根据所述关键信息中的回调函数信息,对所述驱动程序的回调函数进行守护,包括:对于驱动程序的任一回调函数,所述第三线程根据所述回调函数信息中所述回调函数的地址及长度,计算所述回调函数的哈希值;在所述回调函数的哈希值与参考哈希值不同的情况下,所述第二线程根据驱动映像、所述回调函数表信息中所述回调函数的地址及长度,对所述回调函数的代码进行修复,所述参考哈希值为所述回调函数信息中所述回调函数的哈希值。10.根据权利要求1所述的方法,其特征在于,所述方法还包括:所述驱动程序的中断服务对所述第一线程进行守护。11.根据权利要求10所述的方法,其特征在于,所述驱动程序的中断服务对所述第一线程进行守护,包括:在所述驱动程序的中断服务执行中断处理之前,所述中断服务根据所述第一线程信息中的地址及长度,计算所述第一代码的哈希值;在所述第一代码的哈希值与所述第一线程信息中的哈希值相同的情况下,所述中断服务检查所述第一线程是否退出;
在所述第一线程未退出的情况下,所述中断服务执行所述中断处理。12.根据权利要求10所述的方法,其特征在于,所述方法还包括:所述硬件设备的固件对所述中断服务进行守护。13.根据权利要求12所述的方法,其特征在于,所述关键信息还包括所述中断服务对应的中断处理函数信息,所述中断处理函数信息包括所述中断服务对应的中断处理函数的地址、长度及哈希值;所述硬件设备的固件对所述中断服务进行守护,包括:所述固件根据所述中断处理函数信息中的地址及长度,计算所述中断处理函数的哈希值;在所述中断处理函数的哈希值与所述中断处理函数信息中的哈希值相同的情况下,所述固件休眠预设时长后,重新从下述步骤开始执行:所述固件根据所述中断处理函数信息中的地址及长度,计算所述中断处理函数的哈希值。14.根据权利要求13所述的方法,其特征在于,所述硬件设备的固件对所述中断服务进行守护,包括:在所述中断处理函数的哈希值与所述中断处理函数信息中的哈希值不同的情况下,所述固件控制所述硬件设备停止发送中断请求,以停止所述中断服务;所述固件根据驱动映像、所述中断处理函数信息中的地址及长度,对所述中断处理函数进行修复;在修复完成后,所述固件控制所述硬件设备恢复中断请求的发送,以恢复所述中断服务。15.根据权利要求1所述的方法,其特征在于,确定所述驱动程序的关键信息,包括:在所述驱动程序载入内存后,检查所述驱动程序在加载过程中是否被修改;在所述驱动程序在加载过程中未被修改的情况下,确定所述驱动程序的关键信息。16.根据权利要求15所述的方法,其特征在于,所述检查所述驱动程序在加载过程中是否被修改,包括:在所述驱动程序载入内存后,对所述驱动程序进行校验,所述校验包括哈希校验、证书签名校验中的至少一种;在校验通过的情况下,对所述驱动程序进行对齐及重定位处理;根据驱动映像,判断所述驱动程序在加载过程中是否被修改。17.根据权利要求16所述的方法,其特征在于,所述根据驱动映像,判断所述驱动程序在加载过程中是否被修改,包括:分别计算所述驱动映像的哈希值及所述驱动程序的哈希值;在所述驱动映像的哈希值与所述驱动程序的哈希值相同的情况下,确定所述驱动程序在加载过程中未被修改。18.根据权利要求15所述的方法,其特征在于,确定所述驱动程序的关键信息,包括:在驱动程序在加载过程中被修改的情况下,根据驱动映像,对所述驱动程序进行修复;在所述驱动程序修复完成后,确定所述驱动程序的关键信息。19.根据权利要求1所述的方法,其特征在于,所述方法还包括:确定出所述回调函数信息后,通过自定义的回调注册函数,对所述驱动程序的回调函
数进行注册。20.根据权利要求1

19中任意一项所述的方法,其特征在于,所述方法还包括:将所述关键信息、所述第一线程信息、...

【专利技术属性】
技术研发人员:ꢀ七四专利代理机构
申请(专利权)人:摩尔线程智能科技北京有限责任公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1