一种修复驱动程序的方法、装置及电子设备与流程

文档序号:11951541阅读:427来源:国知局
一种修复驱动程序的方法、装置及电子设备与流程

本发明涉及计算机驱动技术领域,尤其涉及一种修复驱动程序的方法、装置及电子设备。



背景技术:

随着互联网技术的发展,病毒、木马等恶意程序技术层出不穷,应用程序,例如,金山毒霸,也需相应地实现技术上的更新。金山毒霸在使用过程中,可能会被竞争软件或者恶意软件拦截、破坏。其中一种破坏场景为,当系统进程在加载金山毒霸驱动程序的时候,会被竞争软件或恶意软件强制加上退出指令,以修改驱动程序的驱动入口,导致驱动程序被竞争软件或恶意软件破坏,以至于驱动程序无法正常使用,从而,使得金山毒霸的各种防御功能失效,这样,竞争软件或恶意软件就可以破坏金山毒霸及系统中的其他文件、注册表等数据。

现有技术中的驱动程序修复方案是针对驱动程序的注册表数据被删除,通过修复驱动程序加载时所需的注册表数据,重新加载驱动程序让应用程序的驱动程序生效,该驱动程序的修复方案不适用于在应用程序的驱动程序在加载时被强制加上退出指令,导致应用程序的驱动程序无法正常工作的场景。



技术实现要素:

有鉴于此,本发明实施例提供一种修复驱动程序的方法、装置及电子设备,以解决现有的驱动程序修复方案无法修复驱动入口被修改的驱动程序的问题。

第一方面,本发明实施例提供一种修复驱动程序的方法,包括:

启动待修复驱动程序对应的驱动修复程序;

通过所述驱动修复程序检测所述待修复驱动程序的驱动入口是否被修改;

若检测到所述待修复驱动程序的驱动入口被修改,则通过所述驱动修复程序主动调用所述待修复驱动程序的驱动入口函数。

结合第一方面,在第一方面的第一种实施方式中,所述启动待修复驱动程序对应的驱动修复程序之前,包括:

安装所述待修复驱动程序对应的驱动修复程序。

结合第一方面的第一种实施方式,在第一方面的第二种实施方式中,所述安装所述待修复驱动程序对应的驱动修复程序,包括:

查询预先保存的驱动修复程序配置文件中的配置信息是否处于可启用状态,其中,所述驱动修复程序配置文件中预设有一条或多条配置信息,每条配置信息包括:所述驱动修复程序的文件名、所述驱动修复程序安装到注册表上的驱动服务键名及表示当前条配置信息是否可启用的启用标志;

若当前条配置信息处于可启用状态,则提取当前条配置信息中的驱动修复程序的文件名及所述驱动修复程序安装到注册表上的驱动服务键名;

获取所述驱动修复程序文件名指定的文件进行安装的同时,将提取的所述驱动服务键名写入注册表。

结合第一方面的第二种实施方式,在第一方面的第三种实施方式中,所述驱动修复程序配置文件的文件格式为可扩展标记语言(Extensible Markup Language,英文缩写为xml)格式;

所述提取当前条配置信息中的驱动修复程序的文件名及所述驱动修复程序安装到注册表上的驱动服务键名,包括:

使用xml公共类解析所述驱动修复程序配置文件中的配置信息;

提取当前条配置信息中的驱动修复程序的文件名及所述驱动修复程序安装到注册表上的驱动服务键名。

结合第一方面,在第一方面的第四种实施方式中,所述启动待修复驱动程序对应的驱动修复程序包括:

以启动服务的方式启动所述待修复驱动程序对应的驱动修复程序。

结合第一方面,在第一方面的第五种实现方式中,所述通过所述驱动修复程序检测所述待修复驱动程序的驱动入口是否被修改包括:

通过所述驱动修复程序检测所述待修复驱动程序是否能打开;

若不能打开,则判断是否能获取到所述待修复驱动程序的驱动入口函数;

若能获取到所述待修复驱动程序的驱动入口函数,则确定所述待修复驱动程序的驱动入口被修改。

结合第一方面的第五种实施方式,在第一方面的第六种实现方式中,所述获取到所述待修复驱动程序的驱动入口函数包括:

获取指向所述待修复驱动程序的驱动对象指针;

依据获取到的所述驱动对象指针,获取所述待修复驱动程序的驱动入口函数。

结合第一方面的第五种实施方式,在第一方面的第七种实施方式中,所述方法还包括:

若所述待修复驱动程序不能打开,且无法获取到所述待修复驱动程序的驱动入口函数,则主动创建所述待修复驱动程序的注册表启动项,重新加载所述待修复驱动程序。

结合第一方面的第七种实施方式,在第一方面的第八种实施方式中,所述创建所述待修复驱动程序的注册表启动项包括:

创建所述待修复驱动程序的安装路径;

创建所述待修复驱动程序的启动类型。

第二方面,本发明实施例提供一种修复驱动程序的装置,包括:

启动模块,用于启动待修复驱动程序对应的驱动修复程序;

检测模块,用于通过所述驱动修复程序检测所述待修复驱动程序的驱动入口是否被修改;

修复模块,用于若检测到所述待修复驱动程序的驱动入口被修改,则通过所述驱动修复程序主动调用所述待修复驱动程序的驱动入口函数。

结合第二方面,在第二方面的第一种实施方式中,所述系统还包括:

安装模块,用于安装所述待修复驱动程序对应的驱动修复程序。

结合第二方面的第一种实施方式,在第二方面的第二种实施方式中,所述安装模块包括:

查询子模块,用于查询预先保存的驱动修复程序配置文件中的配置信息是否处于可启用状态,其中,所述驱动修复程序配置文件中预设有一条或多条配置信息,每条配置信息包括:所述驱动修复程序的文件名、所述驱动修复程序安装到注册表上的驱动服务键名及表示当前条配置信息是否可启用的启用标志;

提取子模块,用于若当前条配置信息处于可启用状态,则提取当前条配置信息中的驱动修复程序的文件名及所述驱动修复程序安装到注册表上的驱动服务键名;

安装子模块,用于获取所述驱动修复程序文件名指定的文件进行安装的同时,将提取的所述驱动服务键名写入注册表。

结合第二方面的第二种实施方式,在第二方面的第三种实施方式中,所述驱动修复程序配置文件的文件格式为xml格式;

所述提取子模块包括:

解析单元,用于使用xml公共类解析所述驱动修复程序配置文件中的配置信息;

提取单元,用于提取当前条配置信息中的驱动修复程序的文件名及所述驱动修复程序安装到注册表上的驱动服务键名。

结合第二方面,在第二方面的第四种实施方式中,所述启动模块,具体用于以启动服务的方式启动所述待修复驱动程序对应的驱动修复程序。

结合第二方面,在第二方面的第五种实施方式中,所述检测模块包括:

检测子模块,用于通过所述驱动修复程序检测所述待修复驱动程序是否能打开;

判断子模块,用于当所述待修复驱动程序不能打开时,则判断是否能获取到所述待修复驱动程序的驱动入口函数;

确定子模块,用于当能获取到所述待修复驱动程序的驱动入口函数时,则确定所述待修复驱动程序的驱动入口被修改。

结合第二方面的第五种实施方式,在第二方面的第六种实施方式中,所述检测模块还包括:获取子模块;所述获取子模块包括:

第一获取单元,用于获取指向所述待修复驱动程序的驱动对象指针;

第二获取单元,用于依据获取到的所述驱动对象指针,获取所述待修复驱动程序的驱动入口函数。

结合第二方面的第五种实施方式,在第二方面的第七种实施方式中,所述装置还包括:创建模块;

所述创建模块,用于当所述待修复驱动程序不能打开,且无法获取到所述待修复驱动程序的驱动入口函数时,则主动创建所述待修复驱动程序的注册表启动项,重新加载所述待修复驱动程序。

结合第二方面的第七种实施方式,在第二方面的第八种实施方式中,所述创建模块包括:

第一创建子模块,用于创建所述待修复驱动程序的安装路径;

第二创建子模块,用于创建所述待修复驱动程序的启动类型。

第三方面,本发明实施例提供一种电子设备,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一所述的修复驱动程序的方法。

本发明实施例提供的一种修复驱动程序的方法、装置及电子设备,通过启动待修复驱动程序对应的驱动修复程序;并通过所述驱动修复程序检测所述待修复驱动程序的驱动入口是否被修改;若检测到所述待修复驱动程序的驱动入口被修改,则通过所述驱动修复程序主动调用所述待修复驱动程序的驱动入口函数。这样,通过所述驱动修复程序主动调用所述待修复驱动程序的驱动入口函数,避免通过系统进程加载驱动程序时,被竞争软件或恶意软件修改驱动程序的驱动入口,从而解决现有的驱动程序修复方案无法修复驱动入口被修改的驱动程序的问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为本发明的实施例修复驱动程序的方法流程示意图;

图2为本发明的实施例修复驱动程序的方法具体流程示意图;

图3为本发明的实施例修复驱动程序的装置结构示意图;

图4为本发明电子设备一个实施例的结构示意图。

具体实施方式

下面结合附图对本发明实施例进行详细描述。

应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

图1为本发明的实施例修复驱动程序的方法流程示意图,如图1所示,本实施例的方法可以包括:

步骤101、启动待修复驱动程序对应的驱动修复程序。

本实施例中,所述待修复驱动程序以金山毒霸的驱动程序为例,当然也可以是其他应用程序的驱动程序,在此不作限定。在启动金山毒霸的驱动程序对应的驱动修复程序之前,需安装金山毒霸驱动程序对应的驱动修复程序。

本实施例中,作为一可选实施例,所述启动待修复驱动程序对应的驱动修复程序之前,包括:

安装所述待修复驱动程序对应的驱动修复程序。

本实施例中,安装金山毒霸驱动程序对应的驱动修复程序之后,可以通过系统中的StartService函数启动所述驱动修复程序。

本发明实施例中,作为一可选实施例,所述启动待修复驱动程序对应的驱动修复程序包括:

以启动服务的方式启动所述待修复驱动程序对应的驱动修复程序。

步骤102、通过所述驱动修复程序检测所述待修复驱动程序的驱动入口是否被修改。

本实施例中,由于金山毒霸的驱动程序是被竞争软件或恶意软件修改了驱动入口,强加上退出指令,让金山毒霸的驱动程序失效的,所以所述驱动修复程序先判断金山毒霸的驱动程序是否工作正常,具体的,可以调用CreateFile函数打开kisknl(金山毒霸驱动程序的名称),看是否可以打开成功,打开成功说明金山毒霸的驱动程序正常,打开失败,说明金山毒霸的驱动程序已失效,若金山毒霸的驱动程序已失效,则继续判断是否能获取到金山毒霸驱动程序的驱动入口函数。

本实施例中,由于金山毒霸的驱动程序是被竞争软件或恶意软件修改了驱动入口数据,但未删除金山毒霸驱动程序的注册表的启动项数据,所以注册表无需修复,接着,尝试获取金山毒霸驱动程序的驱动入口函数,如果可以获取到金山毒霸驱动程序的驱动入口函数,则说明金山毒霸的驱动程序已经被加载,但是,驱动入口被修改了。

本实施例中,作为一可选实施例,所述通过所述驱动修复程序检测所述待修复驱动程序的驱动入口是否被修改包括:

通过所述驱动修复程序检测所述待修复驱动程序是否能打开;

若不能打开,则判断是否能获取到所述待修复驱动程序的驱动入口函数;

若能获取到所述待修复驱动程序的驱动入口函数,则确定所述待修复驱动程序的驱动入口被修改。

本实施例中,获取金山毒霸驱动程序的驱动入口函数,具体的,可以调用函数ObReferenceObiectByName获取到指向kisknl的驱动对象指针,由指向kisknl的驱动对象指针可定位到kisknl的DriverInit(驱动入口函数)。

本实施例中,作为又一可选实施例,所述获取到所述待修复驱动程序的驱动入口函数包括:

获取指向所述待修复驱动程序的驱动对象指针;

依据获取到的所述驱动对象指针,获取所述待修复驱动程序的驱动入口函数。

步骤103、若检测到所述待修复驱动程序的驱动入口被修改,则通过所述驱动修复程序主动调用所述待修复驱动程序的驱动入口函数。

本实施例中,为了更好的理解本实施例,需对正常的驱动程序加载流程进行说明:

在正常情况下,由系统进程加载金山毒霸的驱动程序并调用金山毒霸驱动程序的驱动入口函数,在系统进程加载金山毒霸驱动程序时,竞争软件或恶意软件会修改金山毒霸驱动程序的驱动入口(例如,加上退出指令),也就是说,驱动入口的修改是发生在每一次加载驱动程序的时候,且是以系统进程的方式加载驱动程序的时候,被修改的是内存数据,当再次加载驱动程序时,加载到内存中的驱动入口是全新的数据,被修改的驱动入口是上一次被加载的驱动入口。

本实施例中,通过驱动修复程序去直接主动地调用(不通过系统进程)金山毒霸驱动程序的驱动入口函数,使得金山毒霸驱动程序的驱动入口再次被调用,由于此时,不通过系统进程加载金山毒霸驱动程序,竞争软件或恶意软件就无法修改金山毒霸驱动程序的驱动入口,也就无法在金山毒霸驱动程序的驱动入口函数里写入退出指令,从而可以达到修复金山毒霸驱动程序的目的,对维护系统安全有积极意义。

本实施例提供的一种修复驱动程序的方法,通过启动待修复驱动程序对应的驱动修复程序;并通过所述驱动修复程序检测所述待修复驱动程序的驱动入口是否被修改;若检测到所述待修复驱动程序的驱动入口被修改,则通过所述驱动修复程序主动调用所述待修复驱动程序的驱动入口函数。这样,通过所述驱动修复程序主动调用所述待修复驱动程序的驱动入口函数,避免通过系统进程加载驱动程序时,被竞争软件或恶意软件修改驱动程序的驱动入口,从而解决现有的驱动程序修复方案无法修复驱动入口被修改的驱动程序的问题。

本实施例中,如果金山毒霸驱动程序不能被成功打开,且不能获取到金山毒霸驱动程序的驱动入口函数,即说明,金山毒霸的驱动程序并不是被修改了驱动入口,所以不能执行步骤103修复金山毒霸驱动程序,则需主动创建金山毒霸驱动程序的注册表启动项,然后调用对应的内核函数,例如,ZwLoadDriver重新加载金山毒霸的驱动程序,以达到修复金山毒霸驱动程序的目的。

本实施例中,作为一可选实施例,所述方法还包括:

若所述待修复驱动程序不能打开,且无法获取到所述待修复驱动程序的驱动入口函数,则主动创建所述待修复驱动程序的注册表启动项,重新加载所述待修复驱动程序。

本实施例中,作为又一可选实施例,所述创建所述待修复驱动程序的注册表启动项包括:

创建所述待修复驱动程序的安装路径;

创建所述待修复驱动程序的启动类型。

本实施例中,所述启动类型至少可以包括:按需启动、BOOT类型启动中的一种或多种,本实施例不作限定。

图2为本发明实施例修复驱动程序的方法具体流程示意图,如图2所示,本实施例的方法可以包括:

步骤201、查询预先保存的驱动修复程序配置文件中的配置信息是否处于可启用状态,其中,所述驱动修复程序配置文件中预设有一条或多条配置信息,每条配置信息包括:所述驱动修复程序的文件名、所述驱动修复程序安装到注册表上的驱动服务键名及表示当前条配置信息是否可启用的启用标志。

本实施例中,例如,所述驱动修复程序配置文件的内容如下:

在所述驱动修复程序配置文件中,name用于记录驱动修复程序的文件名,regname用于记录所述驱动修复程序安装到注册表上的驱动服务键名,enable用于表示当前条配置信息是否可启用的启用标志,所述驱动修复程序的name、regname、enable是可配置的,将所述驱动修复程序的name、regname、enable配置在配置文件中,当通过所述驱动修复程序修复驱动程序时,不易被竞争软件或恶意软件发现或删除,即使被发现,也可快速更新配置文件中的信息,例如,更新regname信息,从而使得所述驱动修复程序长期有效。

本实施例中,在实际使用过程中,可以根据实际情况,扩展或修改所述驱动修复程序配置文件中的配置项,能够提高驱动修复程序相关信息的灵活性。

本实施例中,第一条配置信息中的fixkisknldriverinitial.sys为用于修复金山毒霸驱动程序的驱动入口被修改的驱动修复程序的文件名,fixkisknldriverinitial.sys加载到注册表的键名是abc,且此条配置信息处于可启用状态。第二条配置信息中的fixkisknlstart.sys为用于修复金山毒霸驱动程序的注册表启动项被修改的驱动修复程序的文件名,fixkisknlstart.sys加载到注册表的键名是astart,且此条配置信息处于不可启用状态。

步骤202、若当前条配置信息处于可启用状态,则提取当前条配置信息中的驱动修复程序的文件名及所述驱动修复程序安装到注册表上的驱动服务键名。

本实施例中,查询预先保存的驱动修复程序配置文件中的配置信息,第一条配置信息处于可启用状态,提取第一条配置信息中的驱动修复程序的文件名及所述驱动修复程序安装到注册表上的驱动服务键名。

本实施例中,作为一可选实施例,所述驱动修复程序配置文件的文件格式为xml格式;

所述提取当前条配置信息中的驱动修复程序的文件名及所述驱动修复程序安装到注册表上的驱动服务键名,包括:

使用xml公共类解析所述驱动修复程序配置文件中的配置信息;

提取当前条配置信息中的驱动修复程序的文件名及所述驱动修复程序安装到注册表上的驱动服务键名。

步骤203、获取所述驱动修复程序文件名指定的文件进行安装的同时,将提取的所述驱动服务键名写入注册表。

本实施例中,所述驱动修复程序文件名指定的文件是保存在指定的目录下,例如,“系统盘:\Windows\System32\drivers”目录下,在安装时,到“系统盘:\Windows\System32\drivers”目录下,获取第一条配置信息中的驱动修复程序文件名指定的文件(fixkisknldriverinitial.sys)进行安装,同时将提取的所述驱动服务键名“abc”写入注册表。

本实施例中,当需要对“系统盘:\Windows\System32\drivers”目录下的fixkisknldriverinitial.sys进行更新时,新的fixkisknldriverinitial.sys文件会替换原始的fixkisknldriverinitial.sys文件。

步骤204、启动待修复驱动程序对应的驱动修复程序。

本实施例中,步骤204的过程和上述方法实施例的步骤101类似,此处不再赘述。

步骤205、通过所述驱动修复程序检测所述待修复驱动程序的驱动入口是否被修改。

本实施例中,步骤205的过程和上述方法实施例的步骤102类似,此处不再赘述。

步骤206、若检测到所述待修复驱动程序的驱动入口被修改,则通过所述驱动修复程序主动调用所述待修复驱动程序的驱动入口函数。

本实施例中,步骤206的过程和上述方法实施例的步骤103类似,此处不再赘述。

本发明实施例提供的一种修复驱动程序的方法、装置及电子设备,通过启动待修复驱动程序对应的驱动修复程序;并通过所述驱动修复程序检测所述待修复驱动程序的驱动入口是否被修改;若检测到所述待修复驱动程序的驱动入口被修改,则通过所述驱动修复程序主动调用所述待修复驱动程序的驱动入口函数。这样,通过所述驱动修复程序主动调用所述待修复驱动程序的驱动入口函数,避免通过系统进程加载驱动程序时,被竞争软件或恶意软件修改驱动程序的驱动入口,从而解决现有的驱动程序修复方案无法修复驱动入口被修改的驱动程序的问题,且所述驱动修复程序的文件名、安装到注册表上的驱动服务键名是可配置,不易被竞争软件或恶意软件发现或删除,即使被发现,也可快速更新配置信息,从而使得所述驱动修复程序长期有效。

图3为本发明修复驱动程序的装置的结构示意图,如图3所示,本实施例的装置可以包括:启动模块11、检测模块12和修复模块13,其中,

所述启动模块11,用于启动待修复驱动程序对应的驱动修复程序。

本实施例中,所述待修复驱动程序以金山毒霸的驱动程序为例,当然也可以是其他应用程序的驱动程序,在此不作限定。在启动金山毒霸的驱动程序对应的驱动修复程序之前,需安装金山毒霸驱动程序对应的驱动修复程序。

本实施例中,作为一可选实施例,所述系统还包括:安装模块;

所述安装模块,用于安装所述待修复驱动程序对应的驱动修复程序。

本实施例中,安装金山毒霸驱动程序对应的驱动修复程序之后,可以通过系统中的StartService函数启动所述驱动修复程序。

本发明实施例中,作为一可选实施例,所述启动模块11,具体用于以启动服务的方式启动所述待修复驱动程序对应的驱动修复程序。

本发明实施例中,作为一可选实施例,所述安装模块包括:查询子模块、提取子模块及安装子模块;

所述查询子模块,用于查询预先保存的驱动修复程序配置文件中的配置信息是否处于可启用状态,其中,所述驱动修复程序配置文件中预设有一条或多条配置信息,每条配置信息包括:所述驱动修复程序的文件名、所述驱动修复程序安装到注册表上的驱动服务键名及表示当前条配置信息是否可启用的启用标志。

本实施例中,例如,所述驱动修复程序配置文件的内容如下:

在所述驱动修复程序配置文件中,name用于记录驱动修复程序的文件名,regname用于记录所述驱动修复程序安装到注册表上的驱动服务键名,enable用于表示当前条配置信息是否可启用的启用标志,所述驱动修复程序的name、regname、enable是可配置的,将所述驱动修复程序的name、regname、enable配置在配置文件中,当通过所述驱动修复程序修复驱动程序时,不易被竞争软件或恶意软件发现或删除,即使被发现,也可快速更新配置文件中的信息,例如,更新regname信息,从而使得所述驱动修复程序长期有效。

本实施例中,在实际使用过程中,可以根据实际情况,扩展或修改所述驱动修复程序配置文件中的配置项,能够提高驱动修复程序相关信息的灵活性。

本实施例中,第一条配置信息中的fixkisknldriverinitial.sys为用于修复金山毒霸驱动程序的驱动入口被修改的驱动修复程序的文件名,fixkisknldriverinitial.sys加载到注册表的键名是abc,且此条配置信息处于可启用状态。第二条配置信息中的fixkisknlstart.sys为用于修复金山毒霸驱动程序的注册表启动项被修改的驱动修复程序的文件名,fixkisknlstart.sys加载到注册表的键名是astart,且此条配置信息处于不可启用状态。

所述提取子模块,用于若当前条配置信息处于可启用状态,则提取当前条配置信息中的驱动修复程序的文件名及所述驱动修复程序安装到注册表上的驱动服务键名。

本实施例中,查询预先保存的驱动修复程序配置文件中的配置信息,第一条配置信息处于可启用状态,提取第一条配置信息中的驱动修复程序的文件名及所述驱动修复程序安装到注册表上的驱动服务键名。

本实施例中,作为一可选实施例,所述驱动修复程序配置文件的文件格式为xml格式;

所述提取子模块包括:

解析单元,用于使用xml公共类解析所述驱动修复程序配置文件中的配置信息;

提取单元,用于提取当前条配置信息中的驱动修复程序的文件名及所述驱动修复程序安装到注册表上的驱动服务键名。

所述安装子模块,用于获取所述驱动修复程序文件名指定的文件进行安装的同时,将提取的所述驱动服务键名写入注册表。

本实施例中,所述驱动修复程序文件名指定的文件是保存在指定的目录下,例如,“系统盘:\Windows\System32\drivers”目录下,在安装时,到“系统盘:\Windows\System32\drivers”目录下,获取第一条配置信息中的驱动修复程序文件名指定的文件(fixkisknldriverinitial.sys)进行安装,同时将提取的所述驱动服务键名“abc”写入注册表。

本实施例中,当需要对“系统盘:\Windows\System32\drivers”目录下的fixkisknldriverinitial.sys进行更新时,新的fixkisknldriverinitial.sys文件会替换原始的fixkisknldriverinitial.sys文件。

所述检测模块12,用于通过所述驱动修复程序检测所述待修复驱动程序的驱动入口是否被修改。

本实施例中,由于金山毒霸的驱动程序是被竞争软件或恶意软件修改了驱动入口,强加上退出指令,让金山毒霸的驱动程序失效的,所以所述驱动修复程序先判断金山毒霸的驱动程序是否工作正常,具体的,可以调用CreateFile函数打开kisknl(金山毒霸驱动程序的名称),看是否可以打开成功,打开成功说明金山毒霸的驱动程序正常,打开失败,说明金山毒霸的驱动程序已失效,若金山毒霸的驱动程序已失效,则继续判断是否能获取到金山毒霸驱动程序的驱动入口函数。

本实施例中,由于金山毒霸的驱动程序是被竞争软件或恶意软件修改了驱动入口数据,但未删除金山毒霸驱动程序的注册表的启动项数据,所以注册表无需修复,接着,尝试获取金山毒霸驱动程序的驱动入口函数,如果可以获取到金山毒霸驱动程序的驱动入口函数,则说明金山毒霸的驱动程序已经被加载,但是,驱动入口被修改了。

本实施例中,作为一可选实施例,所述检测模块12包括:检测子模块、判断子模块及确定子模块;

所述检测子模块,用于通过所述驱动修复程序检测所述待修复驱动程序是否能打开。

所述判断子模块,用于当所述待修复驱动程序不能打开时,则判断是否能获取到所述待修复驱动程序的驱动入口函数。

所述确定子模块,用于当能获取到所述待修复驱动程序的驱动入口函数时,则确定所述待修复驱动程序的驱动入口被修改。

本实施例中,获取金山毒霸驱动程序的驱动入口函数,具体的,可以调用函数ObReferenceObiectByName获取到指向kisknl的驱动对象指针,由指向kisknl的驱动对象指针可定位到kisknl的DriverInit(驱动入口函数)。

本实施例中,作为又一可选实施例,所述检测模块12还包括:获取子模块;所述获取子模块包括:

第一获取单元,用于获取指向所述待修复驱动程序的驱动对象指针;

第二获取单元,用于依据获取到的所述驱动对象指针,获取所述待修复驱动程序的驱动入口函数。

修复模块13,用于若检测到所述待修复驱动程序的驱动入口被修改,则通过所述驱动修复程序主动调用所述待修复驱动程序的驱动入口函数。

本实施例中,为了更好的理解本实施例,需对正常的驱动程序加载流程进行说明:

在正常情况下,由系统进程加载金山毒霸的驱动程序并调用金山毒霸驱动程序的驱动入口函数,在系统进程加载金山毒霸驱动程序时,竞争软件或恶意软件会修改金山毒霸驱动程序的驱动入口(例如,加上退出指令),也就是说,驱动入口的修改是发生在每一次加载驱动程序的时候,且是以系统进程的方式加载驱动程序的时候,被修改的是内存数据,当再次加载驱动程序时,加载到内存中的驱动入口是全新的数据,被修改的驱动入口是上一次被加载的驱动入口。

本实施例中,通过驱动修复程序去直接主动地调用(不通过系统进程)金山毒霸驱动程序的驱动入口函数,使得金山毒霸驱动程序的驱动入口再次被调用,由于此时,不通过系统进程加载金山毒霸驱动程序,竞争软件或恶意软件就无法修改金山毒霸驱动程序的驱动入口,也就无法在金山毒霸驱动程序的驱动入口函数里写入退出指令,从而可以达到修复金山毒霸驱动程序的目的,对维护系统安全有积极意义。

本实施例提供的一种修复驱动程序的装置,通过启动待修复驱动程序对应的驱动修复程序;并通过所述驱动修复程序检测所述待修复驱动程序的驱动入口是否被修改;若检测到所述待修复驱动程序的驱动入口被修改,则通过所述驱动修复程序主动调用所述待修复驱动程序的驱动入口函数。这样,通过所述驱动修复程序主动调用所述待修复驱动程序的驱动入口函数,避免通过系统进程加载驱动程序时,被竞争软件或恶意软件修改驱动程序的驱动入口,从而解决现有的驱动程序修复方案无法修复驱动入口被修改的驱动程序的问题。

本实施例中,如果金山毒霸驱动程序不能被成功打开,且不能获取到金山毒霸驱动程序的驱动入口函数,即说明,金山毒霸的驱动程序并不是被修改了驱动入口,所以不能通过修复模块13修复金山毒霸驱动程序,则需主动创建金山毒霸驱动程序的注册表启动项,然后调用对应的内核函数,例如,ZwLoadDriver重新加载金山毒霸的驱动程序,以达到修复金山毒霸驱动程序的目的。

本实施例中,作为又一可选实施例,所述装置还包括:创建模块;

所述创建模块,用于当所述待修复驱动程序不能打开,且无法获取到所述待修复驱动程序的驱动入口函数时,则主动创建所述待修复驱动程序的注册表启动项,重新加载所述待修复驱动程序。

本实施例中,作为又一可选实施例,所述创建模块包括:

第一创建子模块,用于创建所述待修复驱动程序的安装路径;

第二创建子模块,用于创建所述待修复驱动程序的启动类型。

本实施例中,所述启动类型至少可以包括:按需启动、BOOT类型启动中的一种或多种,本实施例不作限定。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。

尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,”计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。

在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

本发明实施例还提供一种电子设备。图4为本发明电子设备一个实施例的结构示意图,可以实现本发明图1或2所示实施例的流程,如图4所示,上述电子设备可以包括:壳体41、处理器42、存储器43、电路板44和电源电路45,其中,电路板44安置在壳体41围成的空间内部,处理器42和存储器43设置在电路板44上;电源电路45,用于为上述电子设备的各个电路或器件供电;存储器43用于存储可执行程序代码;处理器42通过读取存储器43中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实施例所述的修复驱动程序的方法。

处理器42对上述步骤的具体执行过程以及处理器42通过运行可执行程序代码来进一步执行的步骤,可以参见本发明图1-3所示实施例的描述,在此不再赘述。

该电子设备以多种形式存在,包括但不限于:

(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等。

(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC设备等,例如iPad。

(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。

(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。

(5)其他具有数据交互功能的电子设备。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。

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

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