本发明涉及计算机技术领域,尤其涉及一种应用程序识别处理方法以及装置。
背景技术:
随着互联网技术发展,病毒、木马等恶意程序技术层出不穷。例如,木马程序将会导致用户设备中的文件被任意毁坏、窃取。因此,为了保障用户设备的系统安全,需要及时对这些恶意程序进行拦截和查杀。
目前,某些恶意程序为了不被杀毒软件拦截和查杀,这些恶意程序将会在关键时刻设置系统电源状态,使得杀毒软件处于不拦截状态,此时,这些恶意程序将会在系统中任意启动和传播,从而导致用户设备的系统安全无法得到保障。
技术实现要素:
本发明实施例提供一种应用程序识别处理方法以及装置,能够解决因无法拦截和查杀恶意程序而导致用户设备的系统安全无法得到保障的技术问题。
为了解决上述技术问题,本发明实施例提供了一种应用程序识别处理方法,包括:
当检测到对系统电源状态进行设置时,获取电源状态参数;
当所述电源状态参数满足预设的参数匹配条件时,查找当前处于电源设置状态的应用程序所对应的进程路径;所述电源设置状态是指对系统电源状态进行设置的状态;
当所述进程路径包含非法进程名时,确定所述应用程序为非法应用程序,并拦截所述应用程序对系统电源状态的设置操作。
相应地,本发明实施例还提供了一种应用程序识别处理装置,包括:
参数获取模块,用于当检测到对系统电源状态进行设置时,获取电源状态参数;
路径查找模块,用于当所述电源状态参数满足预设的参数匹配条件时,查找当前处于电源设置状态的应用程序所对应的进程路径;所述电源设置状态是指对系统电源状态进行设置的状态;
拦截模块,用于当所述进程路径包含非法进程名时,确定所述应用程序为非法应用程序,并拦截所述应用程序对系统电源状态的设置操作。
本发明实施例通过在检测到对系统电源状态进行设置时获取电源状态参数,并当电源状态参数满足预设的参数匹配条件时,查找当前处于电源设置状态的应用程序所对应的进程路径,并当进程路径包含非法进程名时,确定应用程序为非法应用程序,并拦截应用程序对系统电源状态的设置操作,由于应用程序无法成功设置系统电源状态,所以可以保证该应用程序能够被杀毒软件拦截和查杀,进而使用户设备的系统安全可以得到保障。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种应用程序识别处理方法的流程示意图;
图2是本发明实施例提供的另一种应用程序识别处理方法的流程示意图;
图3是本发明实施例提供的一种应用程序识别处理装置的结构示意图;
图4是本发明实施例提供的另一种应用程序识别处理装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图1,是本发明实施例提供的一种应用程序识别处理方法的流程示意图,所述方法可以包括:
S101,当检测到对系统电源状态进行设置时,获取电源状态参数;
具体的,计算机设备可以从SSDT(System Services Descriptor Table,系统服务描述符表)表中找出用于设置系统电源状态的内核函数的函数地址(如内核函数中的NtSetSystemPowerState函数地址),并定义一个电源状态钩子函数(如NewNtSetSystemPowerState函数),并将SSDT表中用于设置系统电源状态的内核函数的函数地址替换为所定义的电源状态钩子函数的函数地址,以便于完成对所述用于设置系统电源状态的内核函数的挂钩操作。即所述电源状态钩子函数是对用于设置系统电源状态的内核函数进行挂钩的函数。
完成了对所述用于设置系统电源状态的内核函数的挂钩操作后,所述计算机设备即可实时检测所述电源状态钩子函数是否被调用,并当检测到所述电源状态钩子函数被调用时(即说明检测到对系统电源状态进行设置),获取所述电源状态钩子函数中的电源状态参数。其中,在所述计算机设备中的应用程序若要设置系统电源状态,则所述电源状态钩子函数必定会被调用,因此,通过检测所述电源状态钩子函数是否被调用,即可知道当前是否有应用程序正在尝试对系统电源状态进行设置。所述计算机设备还可以进一步判断预设的参数匹配表中是否存在与所述电源状态参数相同的预设参数;若判断为是,则确定所述电源状态参数满足预设的参数匹配条件;若判断为否,则确定所述电源状态参数不满足所述参数匹配条件;所述参数匹配表包括休眠状态参数、关机状态参数、重启状态参数、注释状态参数中的至少一个预设参数,即当所述电源状态参数为休眠状态参数或关机状态参数或重启状态参数或注释状态参数时,可以确定所述电源状态参数满足所述参数匹配条件。
例如,若应用程序A要将系统电源状态设置为关机,则所述应用程序A将先调用ntdll模块(ntdll是微软操作系统中的重要模块)中的NtShutdownSystem函数,ntdll模块中的NtShutdownSystem函数再调用NewNtSetSystemPowerState函数(即所述电源状态钩子函数),此时,所述计算机设备即可检测到NewNtSetSystemPowerState函数被调用,所述计算机设备可以进一步获取NewNtSetSystemPowerState函数中的POWER_ACTION参数(即所述电源状态参数),此处的POWER_ACTION参数为关机状态参数,因此,可以确定所述电源状态参数满足所述参数匹配条件。其中,POWER_ACTION参数=2时,代表休眠状态参数;POWER_ACTION参数=4时,代表关机状态参数;POWER_ACTION参数=5时,代表重启状态参数;POWER_ACTION参数=6时,代表注释状态参数。因此,只要检测到POWER_ACTION参数=2或4或5或6时,即可确定所述电源状态参数满足所述参数匹配条件。
S102,当所述电源状态参数满足预设的参数匹配条件时,查找当前处于电源设置状态的应用程序所对应的进程路径;
具体的,当所述电源状态参数满足所述参数匹配条件时,所述计算机设备中存在有应用程序正在设置系统电源为关机或休眠或重启或注释,此时,所述计算机设备将可以进一步查找当前处于电源设置状态的应用程序所对应的进程路径,所述电源设置状态是指对系统电源状态进行设置的状态,即所查找出的所述应用程序为正在尝试设置系统电源状态的应用程序。其中,查找当前处于电源设置状态的应用程序所对应的进程路径的具体方式可以为:通过调用微软提供的内核函数PsGetCurrentProcess和ZwQueryInformationProcess即可查找出当前处于电源设置状态的应用程序所对应的进程路径,例如,所查找出的进程路径可以为C:\windows\system32\ab22.exe。
可选的,当所述电源状态参数不满足所述参数匹配条件时,说明所述计算机设备中没有应用程序正在设置系统电源为关机或休眠或重启或注释,但由于所述电源状态钩子函数已被调用,说明此时所述计算机设备中存在有应用程序正在设置系统电源状态,只是所设置的系统电源状态并不会影响杀毒软件对该应用程序进行拦截和查杀的功能,因此,所述电源状态钩子函数可以进一步调用其他内核函数,以完成该应用程序对系统电源状态的设置操作。
S103,当所述进程路径包含非法进程名时,确定所述应用程序为非法应用程序,并拦截所述应用程序对系统电源状态的设置操作;
具体的,所述计算机设备查找出所述应用程序对应的进程路径后,可以进一步提取所述应用程序对应的进程路径中的进程名,例如,若所查找出的进程路径为C:\windows\system32\ab22.exe,则可以提取该进程路径中的进程名“ab22.exe”。所述计算机设备可以进一步判断预设的非法进程名匹配表中是否存在与所述进程路径中的进程名相同的非法进程名,所述非法进程名匹配表包括多个预设的非法进程名。若判断出所述非法进程名匹配表中不存在与所述进程路径中的进程名相同的非法进程名,则说明所述进程路径中的进程名不是非法进程名,即可以确定所述进程路径包含合法进程名,此时,可以确定所述应用程序为合法应用程序,并进一步调用所述用于设置系统电源状态的内核函数,以便于所述应用程序完成对系统电源状态的设置操作。例如,若应用程序A要将系统电源状态设置为关机,则所述应用程序A将先调用ntdll模块(ntdll是微软操作系统中的重要模块)中的NtShutdownSystem函数,ntdll模块中的NtShutdownSystem函数再调用NewNtSetSystemPowerState函数(即所述电源状态钩子函数),此时,所述计算机设备即可检测到NewNtSetSystemPowerState函数被调用,所述计算机设备可以进一步获取NewNtSetSystemPowerState函数中的POWER_ACTION参数(所述电源状态参数),此处的POWER_ACTION参数为关机状态参数,因此,可以确定所述电源状态参数满足所述参数匹配条件,并进一步查找当前处于电源设置状态的应用程序(即应用程序A)所对应的进程路径,并当该进程路径包含合法进程名时,确定所述应用程序为合法应用程序,此时,NewNtSetSystemPowerState函数可以进一步调用内核函数的NtShutdownSystem函数,再由内核函数的NtShutdownSystem函数调用内核函数的NtSetSystemPowerState函数,以实现对系统电源进行关机。
若判断出所述非法进程名匹配表中存在与所述进程路径中的进程名相同的非法进程名,则说明所述进程路径中的进程名为非法进程名,即可以确定所述进程路径包含非法进程名,进而可以确定所述应用程序为非法应用程序,并控制所述电源状态钩子函数返回拒绝访问状态,以停止调用所述用于设置系统电源状态的内核函数,以便于所述应用程序终止对系统电源状态的设置操作。以关机操作为例,当确定应用程序B为非法应用程序时,可以控制NewNtSetSystemPowerState函数(即所述电源状态钩子函数)返回拒绝访问状态,使得NewNtSetSystemPowerState函数直接退出执行,进而就不会调用到内核函数的NtShutdownSystem函数,也进而不会调用到内核函数的NtShutdownSystem函数,因此,应用程序B是无法对系统电源进行关机,即拦截了应用程序B对系统电源状态的设置操作,由于系统电源无法被应用程序B关机,所以杀毒软件可以有效的对应用程序B进行拦截和查杀,进而使用户设备的系统安全可以得到保障。
本发明实施例通过对用于设置系统电源状态的内核函数进行挂钩以得到电源状态钩子函数,从而可以在检测到电源状态钩子函数被调用时,获取电源状态钩子函数中的电源状态参数,并当电源状态参数满足预设的参数匹配条件时,查找当前处于电源设置状态的应用程序所对应的进程路径,并当进程路径包含非法进程名时,确定应用程序为非法应用程序,并拦截应用程序对系统电源状态的设置操作,由于应用程序无法成功设置系统电源状态,所以可以保证该应用程序能够被杀毒软件拦截和查杀,进而使用户设备的系统安全可以得到保障。
请参见图2,是本发明实施例提供的一种应用程序识别处理方法的流程示意图,所述方法可以包括:
S201,查找系统服务描述符表中的用于设置系统电源状态的内核函数的函数地址;
S202,创建电源状态钩子函数,并将所述系统服务描述符表中的用于设置系统电源状态的内核函数的函数地址替换为所述电源状态钩子函数的函数地址,以便于完成对所述用于设置系统电源状态的内核函数的挂钩操作;
具体的,在微软操作系统中,应用程序将系统电源设置为关机的流程为:应用程序调用ntdll模块中的NtShutdownSystem函数,再由ntdll模块中的NtShutdownSystem函数调用内核函数中的NtShutdownSystem函数,再由内核函数中的NtShutdownSystem函数调用内核函数中的NtSetSystemPowerState函数,到此即可完成对系统电源的关机操作。而应用程序将系统电源设置为注销的流程为:应用程序调用ntdll模块中的NtSetSystemPowerState函数,再由ntdll模块中的NtSetSystemPowerState函数调用内核函数中的NtSetSystemPowerState函数,到此即可完成对系统电源的注销操作。对于系统电源的其他设置类型(如重启、休眠等等)也均会执行“调用内核函数中的NtSetSystemPowerState函数”这一步,因此,本发明实施例将选择对内核函数中的NtSetSystemPowerState函数进行挂钩。
所述计算机设备可以从SSDT表中找出用于设置系统电源状态的内核函数的函数地址(即内核函数中的NtSetSystemPowerState函数地址),并定义一个电源状态钩子函数(如NewNtSetSystemPowerState函数),并将SSDT表中用于设置系统电源状态的内核函数的函数地址替换为所定义的电源状态钩子函数的函数地址,以便于完成对所述用于设置系统电源状态的内核函数的挂钩操作,即完成对内核函数中的NtSetSystemPowerState函数的挂钩操作。
完成了对所述用于设置系统电源状态的内核函数的挂钩操作后,应用程序将系统电源设置为关机的流程将变为:应用程序调用ntdll模块中的NtShutdownSystem函数,再由ntdll模块中的NtShutdownSystem函数再调用NewNtSetSystemPowerState函数,然后通过以下S203-S209的步骤分析确定NewNtSetSystemPowerState函数是否继续或停止调用内核函数的NtShutdownSystem函数,若NewNtSetSystemPowerState函数可以继续调用内核函数的NtShutdownSystem函数,则由NewNtSetSystemPowerState函数进一步调用内核函数的NtShutdownSystem函数,再由内核函数中的NtShutdownSystem函数调用内核函数中的NtSetSystemPowerState函数,到此即可完成对系统电源的关机操作。其中,若NewNtSetSystemPowerState函数停止调用内核函数的NtShutdownSystem函数,则退出关机流程,即应用程序无法将系统电源设置为关机。
S203,当检测到预设的电源状态钩子函数被调用时,获取所述电源状态钩子函数中的电源状态参数;
具体的,完成了对所述用于设置系统电源状态的内核函数的挂钩操作后,所述计算机设备即可实时检测所述电源状态钩子函数是否被调用,并当检测到所述电源状态钩子函数被调用时,获取所述电源状态钩子函数中的电源状态参数。其中,在所述计算机设备中的应用程序若要设置系统电源状态,则所述电源状态钩子函数必定会被调用,因此,通过检测所述电源状态钩子函数是否被调用,即可知道当前是否有应用程序正在尝试对系统电源状态进行设置。所述计算机设备还可以进一步判断预设的参数匹配表中是否存在与所述电源状态参数相同的预设参数;若判断为是,则确定所述电源状态参数满足预设的参数匹配条件;若判断为否,则确定所述电源状态参数不满足所述参数匹配条件;所述参数匹配表包括休眠状态参数、关机状态参数、重启状态参数、注释状态参数中的至少一个预设参数,即当所述电源状态参数为休眠状态参数或关机状态参数或重启状态参数或注释状态参数时,可以确定所述电源状态参数满足所述参数匹配条件。
例如,若应用程序A要将系统电源状态设置为关机,则所述应用程序A将先调用ntdll模块(ntdll是微软操作系统中的重要模块)中的NtShutdownSystem函数,ntdll模块中的NtShutdownSystem函数再调用NewNtSetSystemPowerState函数(即所述电源状态钩子函数),此时,所述计算机设备即可检测到NewNtSetSystemPowerState函数被调用,所述计算机设备可以进一步获取NewNtSetSystemPowerState函数中的POWER_ACTION参数(即所述电源状态参数),此处的POWER_ACTION参数为关机状态参数,因此,可以确定所述电源状态参数满足所述参数匹配条件(即可以判断出预设的参数匹配表中存在与此处的POWER_ACTION参数相同的预设参数)。其中,POWER_ACTION参数=2时,代表休眠状态参数;POWER_ACTION参数=4时,代表关机状态参数;POWER_ACTION参数=5时,代表重启状态参数;POWER_ACTION参数=6时,代表注释状态参数;即所述参数匹配表包括预设参数“2”、预设参数“4”、预设参数“5”、预设参数“6”。因此,只要检测到POWER_ACTION参数=2或4或5或6时,即可确定所述电源状态参数满足所述参数匹配条件。
S204,当所述电源状态参数满足预设的参数匹配条件时,查找当前处于电源设置状态的应用程序所对应的进程路径;
具体的,当所述电源状态参数满足所述参数匹配条件时,所述计算机设备中存在有应用程序正在设置系统电源为关机或休眠或重启或注释,此时,所述计算机设备将可以进一步查找当前处于电源设置状态的应用程序所对应的进程路径,所述电源设置状态是指对系统电源状态进行设置的状态,即所查找出的所述应用程序为正在尝试设置系统电源状态的应用程序。其中,查找当前处于电源设置状态的应用程序所对应的进程路径的具体方式可以为:通过调用微软提供的内核函数PsGetCurrentProcess和ZwQueryInformationProcess即可查找出当前处于电源设置状态的应用程序所对应的进程路径,例如,所查找出的进程路径可以为C:\windows\system32\ab22.exe。
可选的,当所述电源状态参数不满足所述参数匹配条件时,说明所述计算机设备中没有应用程序正在设置系统电源为关机或休眠或重启或注释,但由于所述电源状态钩子函数已被调用,说明此时所述计算机设备中存在有应用程序正在设置系统电源状态,只是所设置的系统电源状态并不会影响杀毒软件对该应用程序进行拦截和查杀的功能,因此,所述电源状态钩子函数可以进一步调用其他内核函数,以完成该应用程序对系统电源状态的设置操作。
S205,提取所述应用程序对应的进程路径中的进程名;
具体的,所述计算机设备查找出所述应用程序对应的进程路径后,可以进一步提取所述应用程序对应的进程路径中的进程名,例如,若所查找出的进程路径为C:\windows\system32\ab22.exe,则可以提取该进程路径中的进程名“ab22.exe”。
S206,判断预设的非法进程名匹配表中是否存在与所述进程路径中的进程名相同的非法进程名;
其中,所述非法进程名匹配表包括多个预设的非法进程名。
S207,确定所述进程路径包含合法进程名,并确定所述应用程序为合法应用程序,并进一步调用所述用于设置系统电源状态的内核函数,以便于所述应用程序完成对系统电源状态的设置操作;
具体的,若S206判断出所述非法进程名匹配表中不存在与所述进程路径中的进程名相同的非法进程名,则说明所述进程路径中的进程名不是非法进程名,即可以确定所述进程路径包含合法进程名,此时,可以确定所述应用程序为合法应用程序,并进一步调用所述用于设置系统电源状态的内核函数,以便于所述应用程序完成对系统电源状态的设置操作。例如,若应用程序A要将系统电源状态设置为关机,则所述应用程序A将先调用ntdll模块(ntdll是微软操作系统中的重要模块)中的NtShutdownSystem函数,ntdll模块中的NtShutdownSystem函数再调用NewNtSetSystemPowerState函数(即所述电源状态钩子函数),此时,所述计算机设备即可检测到NewNtSetSystemPowerState函数被调用,所述计算机设备可以进一步获取NewNtSetSystemPowerState函数中的POWER_ACTION参数(所述电源状态参数),此处的POWER_ACTION参数为关机状态参数,因此,可以确定所述电源状态参数满足所述参数匹配条件,并进一步查找当前处于电源设置状态的应用程序(即应用程序A)所对应的进程路径,并当该进程路径包含合法进程名时,确定所述应用程序为合法应用程序,此时,NewNtSetSystemPowerState函数可以进一步调用内核函数的NtShutdownSystem函数,再由内核函数的NtShutdownSystem函数调用内核函数的NtSetSystemPowerState函数,以实现对系统电源进行关机。
S208,确定所述进程路径包含非法进程名,确定所述应用程序为非法应用程序,并控制所述电源状态钩子函数返回拒绝访问状态,以停止调用所述用于设置系统电源状态的内核函数,以便于所述应用程序终止对系统电源状态的设置操作;
具体的,若S206判断出所述非法进程名匹配表中存在与所述进程路径中的进程名相同的非法进程名,则说明所述进程路径中的进程名为非法进程名,即可以确定所述进程路径包含非法进程名,进而可以确定所述应用程序为非法应用程序,并控制所述电源状态钩子函数返回拒绝访问状态,以停止调用所述用于设置系统电源状态的内核函数,以便于所述应用程序终止对系统电源状态的设置操作。以关机操作为例,当确定应用程序B为非法应用程序时,可以控制NewNtSetSystemPowerState函数(即所述电源状态钩子函数)返回拒绝访问状态,使得NewNtSetSystemPowerState函数直接退出执行,进而就不会调用到内核函数的NtShutdownSystem函数,也进而不会调用到内核函数的NtShutdownSystem函数,因此,应用程序B是无法对系统电源进行关机,即拦截了应用程序B对系统电源状态的设置操作,由于系统电源无法被应用程序B关机,所以杀毒软件可以有效的对应用程序B进行拦截和查杀,进而使用户设备的系统安全可以得到保障。
本发明实施例通过对用于设置系统电源状态的内核函数进行挂钩以得到电源状态钩子函数,从而可以在检测到电源状态钩子函数被调用时,获取电源状态钩子函数中的电源状态参数,并当电源状态参数满足预设的参数匹配条件时,查找当前处于电源设置状态的应用程序所对应的进程路径,并当进程路径包含非法进程名时,确定应用程序为非法应用程序,并拦截应用程序对系统电源状态的设置操作,由于应用程序无法成功设置系统电源状态,所以可以保证该应用程序能够被杀毒软件拦截和查杀,进而使用户设备的系统安全可以得到保障。
请参见图3,是本发明实施例提供的一种应用程序识别处理装置的结构示意图。所述应用程序识别处理装置1可以应用于计算机设备,所述计算机设备为具有微软操作系统的设备,所述应用程序识别处理装置1可以包括:函数地址查找模块10、挂钩设置模块20、参数获取模块30、第一判断模块40、第一确定模块50、路径查找模块60、进程名提取模块70、第二判断模块80、第二确定模块90、拦截模块100;
所述函数地址查找模块10,用于查找系统服务描述符表中的用于设置系统电源状态的内核函数的函数地址;
所述挂钩设置模块20,用于创建电源状态钩子函数,并将所述系统服务描述符表中的用于设置系统电源状态的内核函数的函数地址替换为所述电源状态钩子函数的函数地址,以便于完成对所述用于设置系统电源状态的内核函数的挂钩操作;
具体的,在微软操作系统中,应用程序将系统电源设置为关机的流程为:应用程序调用ntdll模块中的NtShutdownSystem函数,再由ntdll模块中的NtShutdownSystem函数调用内核函数中的NtShutdownSystem函数,再由内核函数中的NtShutdownSystem函数调用内核函数中的NtSetSystemPowerState函数,到此即可完成对系统电源的关机操作。而应用程序将系统电源设置为注销的流程为:应用程序调用ntdll模块中的NtSetSystemPowerState函数,再由ntdll模块中的NtSetSystemPowerState函数调用内核函数中的NtSetSystemPowerState函数,到此即可完成对系统电源的注销操作。对于系统电源的其他设置类型(如重启、休眠等等)也均会执行“调用内核函数中的NtSetSystemPowerState函数”这一步,因此,本发明实施例将选择对内核函数中的NtSetSystemPowerState函数进行挂钩。
所述函数地址查找模块10可以从SSDT表中找出用于设置系统电源状态的内核函数的函数地址(即内核函数中的NtSetSystemPowerState函数地址),再由所述挂钩设置模块20定义一个电源状态钩子函数(如NewNtSetSystemPowerState函数),并将SSDT表中用于设置系统电源状态的内核函数的函数地址替换为所定义的电源状态钩子函数的函数地址,以便于完成对所述用于设置系统电源状态的内核函数的挂钩操作,即完成对内核函数中的NtSetSystemPowerState函数的挂钩操作。
完成了对所述用于设置系统电源状态的内核函数的挂钩操作后,应用程序将系统电源设置为关机的流程将变为:应用程序调用ntdll模块中的NtShutdownSystem函数,再由ntdll模块中的NtShutdownSystem函数再调用NewNtSetSystemPowerState函数,然后通过所述参数获取模块30、所述第一判断模块40、所述第一确定模块50、所述路径查找模块60、所述进程名提取模块70、所述第二判断模块80以及所述第二确定模块90进行分析确定NewNtSetSystemPowerState函数是否继续或停止调用内核函数的NtShutdownSystem函数,若NewNtSetSystemPowerState函数可以继续调用内核函数的NtShutdownSystem函数,则由NewNtSetSystemPowerState函数进一步调用内核函数的NtShutdownSystem函数,再由内核函数中的NtShutdownSystem函数调用内核函数中的NtSetSystemPowerState函数,到此即可完成对系统电源的关机操作。其中,若NewNtSetSystemPowerState函数停止调用内核函数的NtShutdownSystem函数,则退出关机流程,即应用程序无法将系统电源设置为关机。
所述参数获取模块30,用于当检测到对系统电源状态进行设置时,获取电源状态参数;
具体的,完成了对所述用于设置系统电源状态的内核函数的挂钩操作后,所述参数获取模块30即可实时检测所述电源状态钩子函数是否被调用,并当检测到所述电源状态钩子函数被调用时(即检测到对系统电源状态进行设置),所述参数获取模块30具体用于获取所述电源状态钩子函数中的电源状态参数。其中,在所述计算机设备中的应用程序若要设置系统电源状态,则所述电源状态钩子函数必定会被调用,因此,通过检测所述电源状态钩子函数是否被调用,即可知道当前是否有应用程序正在尝试对系统电源状态进行设置。
所述第一判断模块40,用于判断预设的参数匹配表中是否存在与所述电源状态参数相同的预设参数;所述预设参数包括休眠状态参数、关机状态参数、重启状态参数、注释状态参数;
所述第一确定模块50,用于若所述第一判断模块40判断为是,则确定所述电源状态参数满足预设的参数匹配条件;
所述第一确定模块50,还用于若所述第一判断模块40判断为否,则确定所述电源状态参数不满足所述参数匹配条件;
具体的,所述第一判断模块40可以判断预设的参数匹配表中是否存在与所述电源状态参数相同的预设参数;若所述第一判断模块40判断为是,则所述第一确定模块50可以确定所述电源状态参数满足预设的参数匹配条件;若所述第一判断模块40判断为否,则所述第一确定模块50可以确定所述电源状态参数不满足所述参数匹配条件;所述预设参数包括休眠状态参数、关机状态参数、重启状态参数、注释状态参数,即当所述电源状态参数为休眠状态参数或关机状态参数或重启状态参数或注释状态参数时,所述第一确定模块50可以确定所述电源状态参数满足所述参数匹配条件。
例如,若应用程序A要将系统电源状态设置为关机,则所述应用程序A将先调用ntdll模块(ntdll是微软操作系统中的重要模块)中的NtShutdownSystem函数,ntdll模块中的NtShutdownSystem函数再调用NewNtSetSystemPowerState函数(即所述电源状态钩子函数),此时,所述参数获取模块30即可检测到NewNtSetSystemPowerState函数被调用,所述参数获取模块30可以进一步获取NewNtSetSystemPowerState函数中的POWER_ACTION参数(即所述电源状态参数),此处的POWER_ACTION参数为关机状态参数,因此,所述第一确定模块50可以确定所述电源状态参数满足所述参数匹配条件。其中,POWER_ACTION参数=2时,代表休眠状态参数;POWER_ACTION参数=4时,代表关机状态参数;POWER_ACTION参数=5时,代表重启状态参数;POWER_ACTION参数=6时,代表注释状态参数。因此,只要检测到POWER_ACTION参数=2或4或5或6时,即可确定所述电源状态参数满足所述参数匹配条件。
所述路径查找模块60,用于当所述电源状态参数满足预设的参数匹配条件时,查找当前处于电源设置状态的应用程序所对应的进程路径;所述电源设置状态是指对系统电源状态进行设置的状态;
具体的,当所述电源状态参数满足所述参数匹配条件时,所述计算机设备中存在有应用程序正在设置系统电源为关机或休眠或重启或注释,此时,所述路径查找模块60将可以进一步查找当前处于电源设置状态的应用程序所对应的进程路径,所述电源设置状态是指对系统电源状态进行设置的状态,即所查找出的所述应用程序为正在尝试设置系统电源状态的应用程序。其中,所述路径查找模块60查找当前处于电源设置状态的应用程序所对应的进程路径的具体方式可以为:通过调用微软提供的内核函数PsGetCurrentProcess和ZwQueryInformationProcess即可查找出当前处于电源设置状态的应用程序所对应的进程路径,例如,所查找出的进程路径可以为C:\windows\system32\ab22.exe。
可选的,当所述第一确定模块50确定所述电源状态参数不满足所述参数匹配条件时,说明所述计算机设备中没有应用程序正在设置系统电源为关机或休眠或重启或注释,但由于所述电源状态钩子函数已被调用,说明此时所述计算机设备中存在有应用程序正在设置系统电源状态,只是所设置的系统电源状态并不会影响杀毒软件对该应用程序进行拦截和查杀的功能,因此,所述电源状态钩子函数可以进一步调用其他内核函数,以完成该应用程序对系统电源状态的设置操作。
所述进程名提取模块70,用于提取所述应用程序对应的进程路径中的进程名;
具体的,所述路径查找模块60查找出所述应用程序对应的进程路径后,所述进程名提取模块70可以进一步提取所述应用程序对应的进程路径中的进程名,例如,若所查找出的进程路径为C:\windows\system32\ab22.exe,则所述进程名提取模块70可以提取该进程路径中的进程名“ab22.exe”。
所述第二判断模块80,用于判断预设的非法进程名匹配表中是否存在与所述进程路径中的进程名相同的非法进程名;
所述第二确定模块90,用于若所述第二判断模块80判断为否,则确定所述进程路径包含合法进程名,并确定所述应用程序为合法应用程序,并进一步调用所述用于设置系统电源状态的内核函数,以便于所述应用程序完成对系统电源状态的设置操作;
具体的,若所述第二判断模块80判断为否,则说明所述进程路径中的进程名不是非法进程名,即所述第二确定模块90可以确定所述进程路径包含合法进程名,此时,所述第二确定模块90可以确定所述应用程序为合法应用程序,并进一步调用所述用于设置系统电源状态的内核函数,以便于所述应用程序完成对系统电源状态的设置操作。例如,若应用程序A要将系统电源状态设置为关机,则所述应用程序A将先调用ntdll模块(ntdll是微软操作系统中的重要模块)中的NtShutdownSystem函数,ntdll模块中的NtShutdownSystem函数再调用NewNtSetSystemPowerState函数(即所述电源状态钩子函数),此时,所述参数获取模块30即可检测到NewNtSetSystemPowerState函数被调用,所述参数获取模块30可以进一步获取NewNtSetSystemPowerState函数中的POWER_ACTION参数(所述电源状态参数),此处的POWER_ACTION参数为关机状态参数,因此,所述第一确定模块50可以确定所述电源状态参数满足所述参数匹配条件,并由所述路径查找模块60进一步查找当前处于电源设置状态的应用程序(即应用程序A)所对应的进程路径,并当该进程路径包含合法进程名时,所述第二确定模块90可以确定所述应用程序为合法应用程序,此时,NewNtSetSystemPowerState函数可以进一步调用内核函数的NtShutdownSystem函数,再由内核函数的NtShutdownSystem函数调用内核函数的NtSetSystemPowerState函数,以实现对系统电源进行关机。
所述第二确定模块90,还用于若所述第二判断模块80判断为是,则确定所述进程路径包含非法进程名;
所述拦截模块100,用于当所述进程路径包含非法进程名时,确定所述应用程序为非法应用程序,并拦截所述应用程序对系统电源状态的设置操作;
具体的,若所述第二判断模块80判断为是,则说明所述进程路径中的进程名为非法进程名,即所述第二确定模块90可以确定所述进程路径包含非法进程名,进而所述拦截模块100可以确定所述应用程序为非法应用程序,并且所述拦截模块100可以控制所述电源状态钩子函数返回拒绝访问状态,以停止调用所述用于设置系统电源状态的内核函数,以便于所述应用程序终止对系统电源状态的设置操作。以关机操作为例,当确定应用程序B为非法应用程序时,所述拦截模块100可以控制NewNtSetSystemPowerState函数(即所述电源状态钩子函数)返回拒绝访问状态,使得NewNtSetSystemPowerState函数直接退出执行,进而就不会调用到内核函数的NtShutdownSystem函数,也进而不会调用到内核函数的NtShutdownSystem函数,因此,应用程序B是无法对系统电源进行关机,即所述拦截模块100拦截了应用程序B对系统电源状态的设置操作,由于系统电源无法被应用程序B关机,所以杀毒软件可以有效的对应用程序B进行拦截和查杀,进而使用户设备的系统安全可以得到保障。
本发明实施例通过对用于设置系统电源状态的内核函数进行挂钩以得到电源状态钩子函数,从而可以在检测到电源状态钩子函数被调用时,获取电源状态钩子函数中的电源状态参数,并当电源状态参数满足预设的参数匹配条件时,查找当前处于电源设置状态的应用程序所对应的进程路径,并当进程路径包含非法进程名时,确定应用程序为非法应用程序,并拦截应用程序对系统电源状态的设置操作,由于应用程序无法成功设置系统电源状态,所以可以保证该应用程序能够被杀毒软件拦截和查杀,进而使用户设备的系统安全可以得到保障。
请参见图4,是本发明实施例提供的另一种应用程序识别处理装置的结构示意图。所述应用程序识别处理装置1000可以应用于计算机设备,所述计算机设备可以为安装有微软操作系统的设备,所述应用程序识别处理装置1000可以包括处理器1001、通信接口1002和存储器1003(应用程序识别处理装置1000中的处理器1001的数量可以为一个或多个,图4中以一个处理器1001为例)。本发明的一些实施例中,处理器1001、通信接口1002和存储器1003可通过通信总线或其他方式连接,其中,图4以通过通信总线连接为例。
其中,所述通信接口1002,用于与服务器进行通信;
所述存储器1003用于存储程序;
所述处理器1001用于执行所述程序,以实现
当检测到对系统电源状态进行设置时,获取电源状态参数;
当所述电源状态参数满足预设的参数匹配条件时,查找当前处于电源设置状态的应用程序所对应的进程路径;所述电源设置状态是指对系统电源状态进行设置的状态;
当所述进程路径包含非法进程名时,确定所述应用程序为非法应用程序,并拦截所述应用程序对系统电源状态的设置操作。
在一个实施例中,所述处理器1001在执行当所述电源状态参数满足预设的参数匹配条件时,查找当前处于电源设置状态的应用程序所对应的进程路径之前,还执行以下步骤:
判断预设的参数匹配表中是否存在与所述电源状态参数相同的预设参数;所述预设参数包括休眠状态参数、关机状态参数、重启状态参数、注释状态参数;
若判断为是,则确定所述电源状态参数满足预设的参数匹配条件;
若判断为否,则确定所述电源状态参数不满足所述参数匹配条件。
在一个实施例中,所述处理器1001在执行当检测到对系统电源状态进行设置时,获取电源状态参数之前,还执行以下步骤:
查找系统服务描述符表中的用于设置系统电源状态的内核函数的函数地址;
创建电源状态钩子函数,并将所述系统服务描述符表中的用于设置系统电源状态的内核函数的函数地址替换为所述电源状态钩子函数的函数地址,以便于完成对所述用于设置系统电源状态的内核函数的挂钩操作;
则所述处理器1001在执行当检测到对系统电源状态进行设置时,获取电源状态参数时,具体执行以下步骤:
当检测到所述电源状态钩子函数被调用时,获取所述电源状态钩子函数中的电源状态参数。
在一个实施例中,所述处理器1001在执行当所述进程路径包含非法进程名时,确定所述应用程序为非法应用程序,并拦截所述应用程序对系统电源状态的设置操作之前,还执行以下步骤:
提取所述应用程序对应的进程路径中的进程名;
判断预设的非法进程名匹配表中是否存在与所述进程路径中的进程名相同的非法进程名;
若判断为是,则确定所述进程路径包含非法进程名;
若判断为否,则确定所述进程路径包含合法进程名,并确定所述应用程序为合法应用程序,并进一步调用所述用于设置系统电源状态的内核函数,以便于所述应用程序完成对系统电源状态的设置操作。
在一个实施例中,所述处理器1001在执行确定所述应用程序为非法应用程序,并拦截所述应用程序对系统电源状态的设置操作时,具体执行以下步骤:
确定所述应用程序为非法应用程序,并控制所述电源状态钩子函数返回拒绝访问状态,以停止调用所述用于设置系统电源状态的内核函数,以便于所述应用程序终止对系统电源状态的设置操作。
本发明实施例通过对用于设置系统电源状态的内核函数进行挂钩以得到电源状态钩子函数,从而可以在检测到电源状态钩子函数被调用时,获取电源状态钩子函数中的电源状态参数,并当电源状态参数满足预设的参数匹配条件时,查找当前处于电源设置状态的应用程序所对应的进程路径,并当进程路径包含非法进程名时,确定应用程序为非法应用程序,并拦截应用程序对系统电源状态的设置操作,由于应用程序无法成功设置系统电源状态,所以可以保证该应用程序能够被杀毒软件拦截和查杀,进而使用户设备的系统安全可以得到保障。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。