函数地址获取及应用其的方法、装置、设备及存储介质与流程

文档序号:11406765阅读:259来源:国知局
函数地址获取及应用其的方法、装置、设备及存储介质与流程

本发明涉及软件安全技术领域,特别是涉及一种操作实现函数地址获取方法及装置、一种内核配置信息操作方法及装置,以及对应的一种计算机设备和一种计算机存储介质。



背景技术:

在常见的安全软件中,内核配置信息的操作,如注册表穿透操作通常由用户层接口和内核层驱动配合来实现。当产品需要操作内核配置信息时,调用用户层接口,将传入的参数信息发送给内核驱动,内核驱动根据这些参数执行具体操作。由于内核驱动拥有较高的权限且处于系统底层,这就能尽量保证操作可以正常执行,不会被恶意软件拦截。

系统内核在完成用户层的内核配置信息操作请求时,在用户层的操作请求转入内核中后,内核通过调用一个应答请求的封装接口(如,zwsetvaluekey,注册表项值设置的封装接口,用于应答用户层regsetvalue的操作请求;其中,regsetvalue为应用层接口,用于向内核层发送设置注册表项值的操作请求)来应答用户层的操作请求。该封装接口继而调用参数有效性验证及资源准备函数(如,ntsetvaluekey,用于完成设置注册表项的值的参数有效性验证及资源准备),验证参数有效性并准备资源,然后调用对应的操作实现函数(如,cmsetvaluekey,内核中用于实现设置注册表值的操作的函数)来完成最终的操作。

常见的内核配置信息的操作(如注册表穿透驱动)都是模仿系统内核的实现方法,自己实现一套参数有效性验证及资源准备函数(如ntxxxxx系列的注册表参数有效性验证及资源准备函数)。参数有效性验证及资源准备函数需要调用对应的操作实现函数来完成最终的操作,但是操作实现函数(如,cmxxxxxx系列的注册表操作实现函数)都是未文档化的函数,无法直接进行调用。

传统的解决未文档化的操作实现函数无法调用问题的内核配置信息操作方法包括:在内核地址空间中搜索操作实现函数。具体地,先通过逆向内核文件得到操作实现函数的指令序列(或者调用该操作实现函数的指令序列),然后在内核地址空间中搜索该指令序列。需要说明的是该指令序列由硬编码表示,由于不同的系统版本采用不同的硬编码,因此其兼容性差。



技术实现要素:

基于此,有必要针对兼容性差的问题,提供一种提高兼容性的操作实现函数地址获取、内核配置信息操作方法及装置、计算机设备、计算机存储介质。

一种操作实现函数地址获取方法,包括:

获取内核配置信息操作对应的栈内存的起始地址;

根据所述起始地址在所述栈内存中搜索与内核函数的预设参数相对应的内存单元;

获取所述预设参数与返回地址的相对偏移,并根据所述相对偏移及所述内存单元的地址确定所述返回地址的存储位置;

根据所述存储位置确定所述返回地址,并根据所述返回地址对应的指令的前一条指令,确定所述内核配置信息操作对应的操作实现函数的地址。

一种操作实现函数地址获取方法,包括:

获取内核加载的内存的地址范围;

获取所述地址范围内的调用指令;

将所述调用指令调用的函数的地址确定为候选函数的地址,根据所述候选函数的地址获取所述候选函数;

将所述候选函数与所述内核配置信息操作对应的操作实现函数进行特征匹配,并将匹配成功的所述候选函数的地址确定为所述操作实现函数的地址。

一种内核配置信息操作方法,包括:

获取根据权利要求上述的操作实现函数地址获取方法,获得的内核配置信息操作对应的操作实现函数的地址;

接收操作请求;

根据所述操作实现函数的地址,调用所述操作请求对应的操作实现函数。

一种操作实现函数地址获取装置,包括:

起始地址获取模块,用于获取内核配置信息操作对应的栈内存的起始地址;

内存单元搜索模块,用于根据所述起始地址在所述栈内存中搜索与内核函数的预设参数相对应的内存单元;

存储位置确定模块,用于获取所述预设参数与返回地址的相对偏移,并根据所述相对偏移及所述内存单元的地址确定所述返回地址的存储位置;

函数地址确定模块,用于根据所述存储位置确定所述返回地址,并根据所述返回地址对应的指令的前一条指令,确定所述内核配置信息操作对应的操作实现函数的地址。

一种操作实现函数地址获取装置,包括:

地址范围获取模块,用于获取内核加载的内存的地址范围;

调用指令获取模块,用于获取所述地址范围内的调用指令;

候选函数确定模块,用于将所述调用指令调用的函数的地址确定为候选函数的地址,根据所述候选函数的地址获取所述候选函数;

函数地址确定模块,用于将所述候选函数与所述内核配置信息操作对应的操作实现函数进行特征匹配,并将匹配成功的所述候选函数的地址确定为所述操作实现函数的地址。

一种内核配置信息操作装置,包括:

操作函数地址获取模块,用于获取根据上述的操作实现函数地址获取装置,获得的内核配置信息操作对应的操作实现函数的地址;

操作请求接收模块,用于接收操作请求;

操作实现调用模块,用于根据所述操作实现函数的地址,调用所述操作请求对应的操作实现函数。

一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:

获取内核配置信息操作对应的栈内存的起始地址;

根据所述起始地址在所述栈内存中搜索与内核函数的预设参数相对应的内存单元;

获取所述预设参数与返回地址的相对偏移,并根据所述相对偏移及所述内存单元的地址确定所述返回地址的存储位置;

根据所述存储位置确定所述返回地址,并根据所述返回地址对应的指令的前一条指令,确定所述内核配置信息操作对应的操作实现函数的地址。

一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

获取内核加载的内存的地址范围;

获取所述地址范围内的调用指令;

将所述调用指令调用的函数的地址确定为候选函数的地址,根据所述候选函数的地址获取所述候选函数;

将所述候选函数与所述内核配置信息操作对应的操作实现函数进行特征匹配,并将匹配成功的所述候选函数的地址确定为所述操作实现函数的地址。

一种计算机存储介质,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现以下步骤:

获取内核配置信息操作对应的栈内存的起始地址;

根据所述起始地址在所述栈内存中搜索与内核函数的预设参数相对应的内存单元;

获取所述预设参数与返回地址的相对偏移,并根据所述相对偏移及所述内存单元的地址确定所述返回地址的存储位置;

根据所述存储位置确定所述返回地址,并根据所述返回地址对应的指令的前一条指令,确定所述内核配置信息操作对应的操作实现函数的地址。

一种计算机存储介质,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现以下步骤:

获取内核加载的内存的地址范围;

获取所述地址范围内的调用指令;

将所述调用指令调用的函数的地址确定为候选函数的地址,根据所述候选函数的地址获取所述候选函数;

将所述候选函数与所述内核配置信息操作对应的操作实现函数进行特征匹配,并将匹配成功的所述候选函数的地址确定为所述操作实现函数的地址。

由于上述方法、装置、计算机设备及存储介质,无需通过硬编码形式的指令序列的严格搜索对比,便可以确定内核配置信息操作对应的操作实现函数的地址,因此其兼容性有所提高。

附图说明

图1为一实施方式的操作实现函数地址获取、内核配置信息操作内核配置信息操作方法及装置的执行终端的内部结构示意图;

图2为一实施方式的操作实现函数地址获取、内核配置信息操作内核配置信息操作方法及装置的系统结构图;

图3为一实施方式的内核配置信息操作方法的流程图;

图4为图3的内核配置信息操作方法一个步骤的具体流程图;

图5为图4的一个步骤的一实施方式的具体流程图;

图6为图4的一个步骤的另一实施方式的具体流程图;

图7为一具体实施例的函数的调用顺序及操作实现函数地址获取方法的原理图;

图8为另一实施方式的操作实现函数地址获取方法的流程图;

图9为一实施方式的内核配置信息操作方法的流程图;

图10为另一实施方式的内核配置信息操作方法的流程图;

图11为图10的内核配置信息操作方法的一个步骤的具体流程图;

图12为一具体实施例的内核配置信息操作方法的时序图;

图13为一个实施例的内核配置信息操作装置的结构图;

图14为图13的内核配置信息操作装置一个模块的具体结构图;

图15为图13的内核配置信息操作装置一个模块的具体结构图;

图16为另一实施方式的操作实现函数地址获取装置的结构图;

图17为一实施方式的内核配置信息操作装置的结构图;

图18为另一实施方式的内核配置信息操作装置的结构图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步的详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不限定本发明的保护范围。

图1为一个实施方式中的执行终端的内部结构示意图。如图1所示,该终端包括通过系统总线连接的处理器、存储介质、内存储器、网络接口、输出装置和输入装置。其中,终端的存储介质存储有操作系统以及一种操作实现函数地址获取、内核配置信息操作装置,该操作实现函数地址获取、内核配置信息操作装置用于实现一种操作实现函数地址获取、内核配置信息操作方法。该处理器用于提供计算和控制能力,支撑整个终端的运行。终端的内存储器为存储介质中的操作实现函数地址获取、内核配置信息操作装置运行提供环境,该内存储器中可存储有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器执行一种操作实现函数地址获取、内核配置信息操作方法。终端的网络接口用于与服务器进行网络通信。终端的输出装置可以为显示屏,显示屏可以是液晶显示屏或者电子墨水显示屏等;输入装置可以是显示屏上覆盖的触摸层,也可以是终端外壳上设置的按键、轨迹球或触控板,也可以是外接的键盘、触控板或鼠标等。该终端可以是手机、平板电脑或者个人数字助理或穿戴式设备等。本领域技术人员可以理解,图1中示出的结构,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的终端的限定,具体的终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

图2为当内核配置信息为注册表时的一实施方式中操作实现函数地址获取、内核配置信息操作方法及装置的系统结构示意图。该系统结构包括用户层及内核层。

其中,用户层包括对内核层的操作进行调用的应用层接口,如,regcreatekey,创建注册表项;regopenkey,打开注册表项;regqueryvalue,取得指定项或子项的值;regsetvalue,设置指定项或子项的值;regenumeratekey,枚举注册表项;regenumeratevalue,枚举注册表项的值;regdeletekey,删除注册表项;regdeletevalue,删除注册表项的值;regclosekey,释放注册项的值。

内核层包括穿透驱动,也可以称为内核函数。如,与上述应用层接口一一对应的内核函数,分别为:ntcreatekey、ntopenkey、ntqueryvalue、ntsetvalue、ntenumeratekey、ntenumeratevalue、ntdeletekey、ntdeletevalue、ntclosekey。

请参照图3,在一实施方式中,提供一种操作实现函数地址获取方法,该方法运行在如图1所示的终端中,该方法包括以下步骤:

s310:获取内核配置信息操作对应的栈内存的起始地址。

内核配置信息为在内核层中进行操作的系统配置信息。内核配置信息的形式可以为数据库的形式,如可以为注册表。每一个注册表项都是一条内核配置信息。内核配置信息操作包括对内核配置信息可以进行的操作,包括多种操作。栈内存为当前运行的线程或进程中存储相关参数的内存空间。可以通过一个参数获取到内核配置信息操作对应的栈内存的起始地址。如,该参数可以为esp,即当前线程或进程的栈内存指针,指向栈内存的起始地址。

s320:根据起始地址在栈内存中搜索与内核函数的预设参数相对应的内存单元。

内核函数为对内核配置信息进行操作的函数,或者与对内核配置信息操作相关的函数。内核函数可以包括应答请求的封装接口、参数有效性验证及资源准备函数及操作实现函数。

预设参数为内核函数的参数中值相对稳定或者具有预设规律的参数,因此可以根据该参数的值搜索到相对应的值,进而确定该值的内存单元。

如,一内核配置信息操作对应的应答请求的封装接口的第4个参数及第6个参数,在调用该内核配置信息操作对应的参数有效性验证及资源准备函数时,将该封装接口的第4个参数及第6个参数传递至该参数有效性验证及资源准备函数的第4个参数及第6个参数。在参数有效性验证及资源准备函数执行的过程中,需要调用该内核配置信息操作对应的操作实现函数,且该第4个参数及第6个参数将传递至该操作实现函数。该第4个参数可以表示该内核配置信息操作对应的内核配置信息项的值的类型;该第6个参数可以表示用于存储该内核操作信息操作对应的内核配置信息项的值的内存大小。而内核配置信息项的值的类型一般为固定的值,如用1表示字符串型;存储内核配置信息项的值的内存大小一般也为固定值,如用16,表示16字节。可以理解地,预设参数的数量至少为1,数量越多则准确性越高。可选地,为综合性能及准确性,预设参数的数量为2。

s330:获取预设参数与返回地址的相对偏移,并根据相对偏移及内存单元的地址确定所述返回地址的存储位置。

由于调用函数时会将参数和返回地址顺序压栈,因此可以根据预设参数与返回地址的相对偏移,以及存储预设参数的内存单元的地址,确定返回地址的存储位置。如上述的第4个参数及该第6个参数,即为表示内核配置信息项的值的类型的参数及表示存储内核配置信息项的值的内存大小的参数。可以根据这两个参数与返回地址之间的关系(如它们之间间隔的参数的个数),确定预设参数与返回地址的相对偏移。进而,可以根据该相对偏移及与内核函数的预设参数相对应的内存单元确定可能是返回地址的存储位置。

s340:根据存储位置确定返回地址,并根据返回地址对应的指令的前一条指令,确定内核配置信息操作对应的操作实现函数的地址。

可以将该存储位置认定是返回地址的存储位置,即将该存储位置对应的返回地址对应的指令的前一条指令认定为调用内核配置信息操作对应的操作实现函数的指令。因此,可以根据该存储位置确定返回地址,并根据该返回地址对应的指令的前一条指令,确定内核配置信息操作对应的操作实现函数的地址。

由于上述方法无需通过硬编码形式的指令序列的严格搜索对比,便可以确定内核配置信息操作对应的操作实现函数的地址,因此其兼容性有所提高。

请参阅图4,在其中一实施方式中,根据返回地址对应的指令的前一条指令,确定内核配置信息操作对应的操作实现函数的地址的步骤,即步骤s340,包括:

s350:当返回地址对应的指令的前一条指令为调用指令时,根据调用指令确定内核配置信息操作对应的操作实现函数的地址。

与上一实施方式相比,本实施方式在确定了返回地址对应的指令的前一条指令为调用指令时,才确定内核配置信息操作对应的操作对应的操作实现函数的地址。即在确定了返回地址对应的指令的前一条指令为调用指令时,才将调用指令所调用的内核函数的地址确定为内核配置信息操作对应的操作对应的操作实现函数的地址。如此,确定的操作实现函数的地址的准确性更高。

需要说明的是,当返回地址对应的指令的前一条指令不为调用指令时,可以返回步骤s320,继续搜索与预设参数相对应的内存单元。

请继续参阅图4,在其中一实施方式中,根据调用指令确定内核配置信息操作对应的操作实现函数的地址的步骤之前,即步骤s350之前,还包括:

s345:验证返回地址是否处于内核加载的内存的地址范围。

在验证通过时,才继续执行根据调用指令确定内核配置信息操作对应的操作实现函数的地址的步骤;否则,返回执行步骤s320,继续搜索与预设参数相对应的内存单元。如此,可进一步提高确定的操作实现函数的地址的准确性。

可以理解地,由于步骤s350属于步骤s340,因此步骤s340可以包括上述步骤s345、s350,且在步骤s350之前,还可以包括步骤s341。

s341:根据存储位置确定返回地址。

请参阅图5,在其中一实施方式中,根据调用指令确定内核配置信息操作对应的操作实现函数的地址的步骤,即步骤s350,包括:

s351:将调用指令调用的函数的地址确定为候选函数的地址,根据候选函数的地址获取候选函数。

s353:将候选函数与内核配置信息操作对应的操作实现函数进行特征匹配,并将匹配成功的候选函数的地址确定为操作实现函数的地址。

进行特征匹配的条件相对通过硬编码形式的指令序列的严格搜索对比,较宽松。如可以匹配函数对应的执行指令的前预设字节内应该包括一个立即数,或者包括某条特殊的汇编指令。可以理解地,还可以对相互对比的函数采用聚类算法进行聚类,若属于一类,则特征匹配成功,否则匹配失败。

如此,将同时满足与内核函数的预设参数相对应、返回地址对应的指令的前一条指令为调用指令、及与内核配置信息操作对应的操作实现函数的特征匹配成功的条件。因此,可更进一步提高确定的操作实现函数的地址的准确性。

可以理解地,为进一步提高确定的操作实现函数的地址的准确性,还可以在满足上述条件的同时,还满足返回地址处于内核加载的内存的地址范围的条件。

请参阅图6,在其中一实施方式中,根据返回地址对应的指令的前一条指令,确定内核配置信息操作对应的操作实现函数的地址的步骤,包括:

s352:获取返回地址对应的指令的前一条指令所对应的函数。

s354:将获取的函数与操作实现函数进行特征匹配,并将匹配成功的函数的地址确定为操作实现函数的地址。

进行特征匹配的条件可以与上一实施方式一致,故在此不作赘述。

如此,将同时满足与内核函数的预设参数相对应、及与内核配置信息操作对应的操作实现函数特征匹配成功的条件。因此,可在一定程度上更进一步提高确定的操作实现函数的地址的准确性。

上述的操作实现函数地址获取方法,可以通过对内核操作对象的文件结构对象的获取操作对象的地址信息的成员进行挂钩(hook),在挂钩后运行上述操作实现函数地址获取方法。如对hhive对象的getcellroutine成员进行挂钩,将其值赋值为挂钩函数的地址。然后调用参数有效性验证及资源准备函数,依次执行参数有效性验证及资源准备函数、操作实现函数、挂钩函数、上述操作实现函数地址获取方法。

以设置注册表项的值为例,函数的调用顺序及操作实现函数地址获取方法的原理,如图7所示。在内核层接收到应用层的操作请求之后,依次调用zwsetvaluekey、ntsetvaluekey、cmsetvaluekey、hookedgetcellroutine及matchcmsetvaluekey。其中,hookedgetcellroutine及matchcmsetvaluekey分别为挂钩函数及设置注册表项的值分别对应的操作实现函数地址获取方法。该操作实现函数地址获取方法,包括步骤:1、获取栈内存的起始地址;2、向上搜索与预设参数相对应的参数并确定该参数的内存单元;3、根据预设参数与返回地址的相对偏移,定位返回地址的存储位置;4、获取返回地址位置(即返回地址的存储位置);5、根据返回地址找到返回地址对应的指令的前一条调用cmsetvaluekey的指令,从而计算cmsetvaluekey的地址。

请参阅图8,本发明还提供另一实施方式的操作实现函数地址获取方法。该操作实现函数地址获取方法,包括:

s810:获取内核加载的内存的地址范围。

s820:获取地址范围内的调用指令。

s830:将调用指令调用的函数的地址确定为候选函数的地址,根据候选函数的地址获取候选函数。

s840:将候选函数与内核配置信息操作对应的操作实现函数进行特征匹配,并将匹配成功的候选函数的地址确定为操作实现函数的地址。

进行特征匹配的条件可以与上一实施方式一致,故在此不作赘述。在本实施方式中,将同时满足是内核加载的内存的地址范围内的调用指令、调用指令调用的函数与内核配置信息操作对应的操作实现函数特征匹配成功的条件,如此,可以确定较为准确的操作函数的地址。另外,由于上述方法无需通过硬编码形式的指令序列的严格搜索对比,便可以确定内核配置信息操作对应的操作实现函数的地址,因此其兼容性有所提高。

请参阅图9,本发明还提供一实施方式的内核配置信息操作方法。该内核配置信息操作方法,包括:

s910:获取根据操作实现函数地址获取方法,获得的内核配置信息操作对应的操作实现函数的地址。

操作实现函数地址获取方法为上述的操作实现函数地址获取方法。由于内核配置信息操作包括多种操作,因此其对应的操作实现函数也包括多种函数,操作实现函数的地址包括多个地址。

s930:接收操作请求。

接收由用户接口层发送的操作请求。当通过用户层接口来调用内核驱动中对内核配置信息进行操作的函数时,用户层接口向内核驱动发送操作请求,操作请求中包括参数,通过该操作请求将参数传递给内核驱动。内核驱动接收该操作请求。

s970:根据操作实现函数的地址,调用操作请求对应的操作实现函数。

需要说明的是,一个操作请求对应一个操作实现函数。在获得的内核配置信息操作对应的多个操作实现函数的地址中,找到与操作请求对应的操作实现函数的地址,从而调用操作请求对应的操作实现函数。

上述内核配置信息操作方法,获取根据操作实现函数地址获取方法,获得的内核配置信息操作对应的操作实现函数的地址;接收操作请求;根据操作实现函数的地址,调用操作请求对应的操作实现函数。由于无需通过硬编码形式的指令序列的严格搜索对比,便可以确定内核配置信息操作对应的操作实现函数的地址,因此其兼容性有所提高。

请参阅图10,在其中一实施方式中,根据操作实现函数的地址,调用操作请求对应的操作实现函数的步骤之前,即步骤s960之前,包括:

s920:获取操作对象内存偏移函数的函数地址。

在其中一实施例中,步骤s920在步骤s930之前。操作对象内存偏移函数用于获取操作对象的内存相对偏移。具体地,操作对象内存偏移函数可以为获取映射的内存相对偏移的函数,如hvpgetcellmapped函数;获取换页内存的相对偏移的函数,如hvpgetcellpaged函数;获取平坦形式加载操作对象的内存相对偏移的函数,如hvpgetcellflat函数。

s940:根据操作请求获取操作请求对应的内核操作对象。

根据操作请求可以确定操作请求对应的内核操作对象。具体的,可以根据操作请求传递的参数来确定对应的内核操作对象(如,cm_key_body,注册表中的内核操作对象,可以通过操作请求中的key句柄参数获取到)。内核操作对象为内核配置信息中的项或项的值。如,可以为注册表项也可以注册表项的值。

需要说明的是,在根据操作请求获取操作请求对应的内核操作对象之前,还需要对操作请求的参数进行有效性检验。如此,保证内核操作对象确定的准确性,从而,提高内核配置信息操作的准确性。

s950:获取内核操作对象的地址信息,并根据函数地址校验地址信息的合法性。

在其中一个具体实施例中,获取内核操作对象的地址信息的方式可以为,通过先获取到内核操作对象的文件结构对象,如hhive对象,再通过该文件结构对象获取操作对象地址信息的成员,如hhive对象的getcellroutine成员,获取到可以获取内核操作对象(如cell,注册表中的最小操作对象,如可以是对注册表项或注册表项的值)的地址信息的函数地址。hhive.getcellroutine成员是一个可以获取内核操作对象的地址信息的函数地址,通常是hvpgetcellpaged函数的函数地址。如果hhive.getcellroutine成员被恶意软件挂钩(hook)了,在调用操作实现函数时(cmxxxxx系列函数),就可能无法获取正确的结果。所以在调用操作实现函数之前,需要校验hhive.getcellroutine成员的合法性,如果校验不通过,可以将其赋值为hvpgetcellpaged等获取映射的内存相对偏移的函数地址,然后再调用操作实现函数。

通过将内核操作对象的地址信息与操作对象内存偏移函数的函数地址进行对比可以确定,获取到的内核操作对象的地址信息是否合法。可以仅在地址信息合法时,才执行下一步骤。如此,保证地址信息的合法性。

具体地,根据函数地址验证地址信息的合法性的步骤,即步骤s950,包括:

(a)、当地址信息与函数地址一致时,地址信息合法;

(b)、当地址信息与函数地址不一致时,地址信息不合法,将地址信息更新为函数地址。

当地址信息合法时,直接执行下一步骤;当地址信息不合法时,先将地址信息更新为获取到的函数地址,再执行下一步骤。如此,保证地址信息最终的合法性。

在其中一实施方式中,获取操作对象内存偏移函数的函数地址的方式包括:

通过遍历内核配置信息的文件结构或加载内核配置信息的函数地址映射文件获取操作对象内存偏移函数的函数地址。

在其中一个实施例中,可以通过遍历所有的内核配置信息的文件结构,如hhive结构的方式来获取操作对象内存偏移函数的函数地址。在另一个实施例中,可以通过加载一个内核配置信息的函数地址映射文件,如.hiv文件,获取操作对象内存偏移函数的函数地址。如hvpgetcellmapped函数的地址、hvpgetcellpaged函数的地址或者hvpgetcellflat函数的地址。具体地,通过动态加载.hiv文件,可以很方便的获取到操作对象内存偏移函数的函数地址,且兼容性好。

需要说明的是,在win8.1及以后的版本中,已经没有hvpgetcellmapped函数。且hvpgetcellflat函数基本没有被用到,所以在这些系统中可以通过获取hvpgetcellpaged函数的地址的方式获取操作对象内存偏移函数的函数地址。

请继续参阅图10,在其中一实施方式中,根据操作实现函数的地址,调用操作请求对应的操作实现函数的步骤之前,即步骤s970之前,包括:

s960:对操作请求对应的操作实现函数进行内联钩子检验。

如果恶意软件对操作实现函数(如cmxxxxx系列函数)进行了内联挂钩(inlinehook),此时,无论是否对hhive.getcellroutine成员进行了合法性校验,操作实现函数的执行仍可以被恶意软件绕过。因此,在调用操作实现函数之前有必要进行内联钩子检验。从而,避免操作函数的执行被恶意软件绕过。

请参阅图11,在其中一实施例中,对操作请求对应的操作实现函数进行内联钩子检验的步骤,即步骤s960,包括:

s961:若操作请求对应的操作实现函数的前预设个字节不包括跳转指令,则检验结果为通过。

一般情况下,若操作实现函数的前预设个字节包括跳转指令,则该操作实现函数的执行被内联挂钩。因此,可以通过检验前预设个字节是否包括跳转指令的方式来进行内联钩子检验。检验结果为通过,即表示未被内联挂钩。其中,前预设字节可以为头5个字节,可以理解地,预设字节也可以设置为其它数量的字节。

进一步地,或在另一实施例中,对操作请求对应的操作实现函数进行内联钩子检验的步骤,包括:

s963:若操作请求对应的操作实现函数的前预设个字节包括跳转指令,则检验结果为未通过,对操作请求对应的操作实现函数进行修复。

检验结果为未通过,即表示已被内联挂钩,此时,需要对被内联挂钩的操作实现函数进行修复,以保证操作实现函数的正常运行。

在其中一个具体实施例中,以设置注册表项的值为例,内核配置信息操作方法的时序图,如图12所示。

内核配置信息操作方法可以由应用软件发起。应用软件调用用户层接口regsetvalue();用户层接口接收到该请求之后,向内核驱动发送操作请求;内核驱动在接收到该操作请求之前,需要先获取到内核配置信息操作的cmxxxx系列函数地址,并获取到操作对象内存偏移函数的地址,如hvpgetcellmapped函数、hvpgetcellpaged函数及hvpgetcellflat函数。内核驱动在接收到该操作请求之后,首先进行参数有效性校验,并在校验通过后根据操作请求获取对应的操作对象(cm_key_body对象);然后对该操作对象的hhive.getcellroutine成员的合法性进行校验;继而对操作实现函数cmsetvaluekey()函数进行inlinehook检查;最后在检查通过后调用cmsetvaluekey()函数实现设置注册表项的值,并将结果返回值应用层接口。应用层接口再将结果返回给应用软件。应用软件可以为对计算机进行管理的应用软件。

请参阅图13,本发明还提供一实施方式的操作实现函数地址获取装置,包括:

起始地址获取模块310,用于获取内核配置信息操作对应的栈内存的起始地址;

内存单元搜索模块320,用于根据起始地址在栈内存中搜索与内核函数的预设参数相对应的内存单元;

存储位置确定模块330,用于获取预设参数与返回地址的相对偏移,并根据相对偏移及内存单元的地址确定返回地址的存储位置;

函数地址确定模块340,用于根据存储位置确定返回地址,并根据返回地址对应的指令的前一条指令,确定内核配置信息操作对应的操作实现函数的地址。

由于上述装置无需通过硬编码形式的指令序列的严格搜索对比,便可以确定内核配置信息操作对应的操作实现函数的地址,因此其兼容性有所提高。

请参阅图14,在其中一实施方式中,函数地址确定模块340,包括:

函数地址确定单元350,用于当返回地址对应的指令的前一条指令为调用指令时,根据调用指令确定内核配置信息操作对应的操作实现函数的地址。

在其中一实施方式中,函数地址确定模块340,还包括:

地址范围验证单元345,用于验证返回地址是否处于内核加载的内存的地址范围。

可以理解地,其中一实施方式中,函数地址确定模块340,还可以包括:

返回地址确定单元341,用于根据存储位置确定返回地址。

在其中一实施方式中,函数地址确定模块340,还包括候选函数确定单元349;

候选函数确定单元349,用于将调用指令调用的函数的地址确定为候选函数的地址,根据候选函数的地址获取候选函数;

函数地址确定单元350,用于将候选函数与内核配置信息操作对应的操作实现函数进行特征匹配,并将匹配成功的候选函数的地址确定为操作实现函数的地址。

请参阅图15,在其中一实施方式中,函数地址确定模块340,包括:

前一函数获取单元352,用于获取返回地址对应的指令的前一条指令所对应的函数;

函数地址确定单元354,用于将获取的函数与操作实现函数进行特征匹配,并将匹配成功的函数的地址确定为操作实现函数的地址。

请参阅图16,本发明还提供一实施方式的操作实现函数地址获取装置,包括:

地址范围获取模块610,用于获取内核加载的内存的地址范围;

调用指令获取模块620,用于获取地址范围内的调用指令;

候选函数确定模块630,用于将调用指令调用的函数的地址确定为候选函数的地址,根据候选函数的地址获取候选函数;

函数地址确定模块640,用于将候选函数与内核配置信息操作对应的操作实现函数进行特征匹配,并将匹配成功的候选函数的地址确定为操作实现函数的地址。

由于上述装置无需通过硬编码形式的指令序列的严格搜索对比,便可以确定内核配置信息操作对应的操作实现函数的地址,因此其兼容性有所提高。

请参阅图17,本发明还提供一实施方式的内核配置信息操作装置,包括:

操作函数地址获取模块710,用于获取根据上述的操作实现函数地址获取装置,获得的内核配置信息操作对应的操作实现函数的地址;

操作请求接收模块730,用于接收操作请求;

操作实现调用模块770,用于根据操作实现函数的地址,调用操作请求对应的操作实现函数。

上述内核配置信息操作装置,获取根据操作实现函数地址获取方法,获得的内核配置信息操作对应的操作实现函数的地址;接收操作请求;根据操作实现函数的地址,调用操作请求对应的操作实现函数。由于无需通过硬编码形式的指令序列的严格搜索对比,便可以确定内核配置信息操作对应的操作实现函数的地址,因此其兼容性有所提高。

请参阅图18,在其中一实施方式中,还包括:

偏移函数地址获取模块720,用于获取操作对象内存偏移函数的函数地址;

操作对象获取模块740,用于根据操作请求获取操作请求对应的内核操作对象;

合法性确定模块750,用于获取内核操作对象的地址信息,并根据函数地址校验地址信息的合法性。

在其中一实施方式中,偏移函数地址获取模块720,用于通过遍历内核配置信息的文件结构或加载内核配置信息的函数地址映射文件获取操作对象内存偏移函数的函数地址。

在其中一实施方式中,合法性确定模块750,包括:

合法判断单元751,用于当地址信息与函数地址一致时,地址信息合法;

非法判断单元753,用于当地址信息与函数地址不一致时,地址信息不合法,将地址信息更新为函数地址。

在其中一实施方式中,还包括:

内联钩子检验模块760,用于对操作请求对应的操作实现函数进行内联钩子检验。

进一步地,内联钩子检验模块760,包括:

检验通过单元761,用于若操作请求对应的操作实现函数的前预设个字节不包括跳转指令,则检验结果为通过。

进一步地,联钩子检验模块760,包括:

检验未过单元763,用于若操作请求对应的操作实现函数的前预设个字节包括跳转指令,则检验结果为未通过,对操作请求对应的操作实现函数进行修复。

与方法及装置对应,本发明还提供一实施方式的计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:

获取内核配置信息操作对应的栈内存的起始地址;

根据起始地址在栈内存中搜索与内核函数的预设参数相对应的内存单元;

获取预设参数与返回地址的相对偏移,并根据相对偏移及内存单元的地址确定返回地址的存储位置;

根据存储位置确定返回地址,并根据返回地址对应的指令的前一条指令,确定内核配置信息操作对应的操作实现函数的地址。

由于上述计算机设备,在处理器执行计算机程序时实现各个步骤时,无需通过硬编码形式的指令序列的严格搜索对比,便可以确定内核配置信息操作对应的操作实现函数的地址,因此其兼容性有所提高。

进一步地,处理器执行计算机程序时还实现以下步骤:

接收操作请求;

根据操作实现函数的地址,调用操作请求对应的操作实现函数。

与方法及装置对应,本发明还提供另一实施方式的计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:

获取内核加载的内存的地址范围;

获取地址范围内的调用指令;

将调用指令调用的函数的地址确定为候选函数的地址,根据候选函数的地址获取候选函数;

将候选函数与内核配置信息操作对应的操作实现函数进行特征匹配,并将匹配成功的候选函数的地址确定为操作实现函数的地址。

由于上述计算机设备,在处理器执行计算机程序时实现各个步骤时,无需通过硬编码形式的指令序列的严格搜索对比,便可以确定内核配置信息操作对应的操作实现函数的地址,因此其兼容性有所提高。

进一步地,处理器执行计算机程序时还实现以下步骤:

接收操作请求;

根据操作实现函数的地址,调用操作请求对应的操作实现函数。

与方法及装置对应,本发明还提供一实施方式的计算机存储介质,计算机存储介质上存储有计算机程序,计算机程序被处理器执行时,实现以下步骤:

获取内核配置信息操作对应的栈内存的起始地址;

根据起始地址在栈内存中搜索与内核函数的预设参数相对应的内存单元;

获取预设参数与返回地址的相对偏移,并根据相对偏移及内存单元的地址确定返回地址的存储位置;

根据存储位置确定返回地址,并根据返回地址对应的指令的前一条指令,确定内核配置信息操作对应的操作实现函数的地址。

由于上述计算机存储介质,存储的计算机程序被处理器执行时实现的步骤,无需通过硬编码形式的指令序列的严格搜索对比,便可以确定内核配置信息操作对应的操作实现函数的地址,因此其兼容性有所提高。

进一步地,计算机程序被处理器执行时,还实现以下步骤:

接收操作请求;

根据操作实现函数的地址,调用操作请求对应的操作实现函数。

与方法及装置对应,本发明还提供另一实施方式的计算机存储介质,计算机存储介质上存储有计算机程序,计算机程序被处理器执行时,实现以下步骤:

获取内核加载的内存的地址范围;

获取地址范围内的调用指令;

将调用指令调用的函数的地址确定为候选函数的地址,根据候选函数的地址获取候选函数;

将候选函数与内核配置信息操作对应的操作实现函数进行特征匹配,并将匹配成功的候选函数的地址确定为操作实现函数的地址。

由于上述计算机存储介质,存储的计算机程序被处理器执行时实现的步骤,无需通过硬编码形式的指令序列的严格搜索对比,便可以确定内核配置信息操作对应的操作实现函数的地址,因此其兼容性有所提高。

进一步地,计算机程序被处理器执行时,还实现以下步骤:

接收操作请求;

根据操作实现函数的地址,调用操作请求对应的操作实现函数。

由于上述装置、计算机设备及计算机存储介质均与上述方法相互对应,对于装置、计算机设备、计算机存储介质中与上述方法对应的具体技术特征,为节约篇幅,在此不作赘述。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的程序可存储于一非易失性的计算机可读取存储介质中,如本发明实施例中,该程序可存储于计算机系统的存储介质中,并被该计算机系统中的至少一个处理器执行,以实现包括如上述各方法的实施例的流程。其中,的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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