一种获取计算机程序调度表原始数据的方法及装置

一种获取计算机程序调度表原始数据的方法及装置


2024年5月8日发(作者:)

(19)中华人民共和国国家知识产权局

(12)发明专利说明书

(21)申请号 CN2.1

(22)申请日 2014.07.04

(71)申请人 可牛网络技术(北京)有限公司

地址 100041 北京市石景山区八大处高科技园区西井路3号1号楼150房间

(72)发明人 李丁盼

(74)专利代理机构 北京柏杉松知识产权代理事务所(普通合伙)

代理人 项京

(51)

G06F21/56

G06F9/44

(10)申请公布号 CN 104036192 A

(43)申请公布日 2014.09.10

权利要求说明书 说明书 幅图

(54)发明名称

一种获取计算机程序调度表原始数

据的方法及装置

(57)摘要

本发明公开了一种获取计算机程序

调度表原始数据的方法及装置,该方法包

括:将要获取调度表原始数据的计算机程

序的原始文件展开到内存中;对原始文件

进行重定位处理;加载计算机程序的引入

表,并在加载过程中将预设的挂钩表中的

挂钩加载到引入表中;预设的挂钩表中的

挂钩,用于针对计算机程序中不需要被调

用的函数,返回无效值;获取被加载的计

算机程序的入口指针;根据入口指针,按

照上述加载了预设的挂钩表中挂钩的引入

表,执行要获取调度表原始数据的计算机

程序的入口程序;在执行入口程序过程

中,计算机程序的数据被初始化;从被初

始化的数据中,获取调度表原始数据。应

用本发明能够解决采用现有技术的方法导

致的功能失效或者系统崩溃的问题。

法律状态

法律状态公告日

法律状态信息

未缴年费专利权终止IPC(主分

类):G06F21/56专利

2023-07-14

号:ZL2申请

日:20140704授权公告

日:20170118

法律状态

专利权的终止

权 利 要 求 说 明 书

1.一种获取计算机程序调度表原始数据的方法,其特征在于,包括

将要获取调度表原始数据的计算机程序的原始文件展开到内存中;

对所述计算机程序的原始文件进行重定位处理;

加载所述计算机程序的引入表,并在加载过程中将预设的挂钩表中的

获取被加载的计算机程序的入口指针;

根据所述入口指针,按照上述加载了预设的挂钩表中挂钩的引入表,

从所述被初始化的数据中,获取调度表原始数据。

2.根据权利要求1所述的方法,其特征在于,所述将要获取调度表

用Windows API ZwCreateFile打开原始文件;

将返回的文件句柄传递给ZwCreateSection;

原始数据的计算机程序的原始文件展开到内存中,包括:

步骤:

挂钩加载到所述引入表中;所述预设的挂钩表中的挂钩,用于针对所述计

算机程序中不需要被调用的函数,返回无效值;

执行所述要获取调度表原始数据的计算机程序的入口程序;在执行所述入

口程序过程中,计算机程序的数据被初始化;

执行ZwCreateSection,将原始文件展开到内存中。

3.根据权利要求1所述的方法,其特征在于,所述对所述计算机程

4.根据权利要求1所述的方法,其特征在于,

序的原始文件进行重定位处理为:按照标准重定位表,对内存中原始文件

代码段中的所有立即地址进行重定位。

当要获取调度表原始数据的计算机程序为驱动程序时,所述不需要被

IoCreateDevice、IoCreateSymbolicLink、

5.根据权利要求4所述的方法,其特征在于,所述根据所述入口指

分配一个DRIVER_OBJECT对象;

调用的函数包括:

IoRegisterDriverReinitialization、IoRegisterBootDriverReinitialization、

IoRegisterFileSystem、KeSetTimer、ZwOpenKey、

MmGetSystemRoutineAddress、IoWMIRegistrationControl、

FsRtlRegisterFileSystemFilterCallbacks、IoDeleteDevice、

ObfReferenceObject和ObfDereferenceObject。

针,按照上述加载了预设的挂钩表中挂钩的引入表,执行所述要获取调度

表原始数据的计算机程序的入口程序,包括:

将DRIVER_OBJECT对象作为参数传递给驱动程序的入口指针并调

所述计算机程序的数据被初始化为:所述DRIVER_OBJECT对象被

6.根据权利要求5所述的方法,其特征在于,所述从所述被初始化

从DRIVER_OBJECT对象初始化后的域

7.根据权利要求1所述的方法,其特征在于,

当要获取调度表原始数据的计算机程序为COM组件时,所述不需要

CreateMutex和CreateEvent。

8.一种获取计算机程序调度表原始数据的装置,其特征在于,包括:

被调用的函数包括:

DRIVER_unction中提取出中断请求调度表的原始值。

的数据中,获取调度表原始数据为:

初始化,获取DRIVER_OBJECT对象初始化后的数据。

用它;

原始文件展开单元,将要获取调度表原始数据的计算机程序的原始文

重定位单元,对所述计算机程序的原始文件进行重定位处理;

引入表加载单元,加载所述计算机程序的引入表,并在加载过程中将

入口指针获取单元,获取被加载的计算机程序的入口指针;

入口程序执行单元,根据所述入口指针,按照上述加载了预设的挂钩

调度表原始数据获取单元,从所述被初始化的数据中,获取调度表原

9.根据权利要求8所述的装置,其特征在于,所述原始文件展开单

原始文件打开子单元,用Windows API ZwCreateFile打开原始文件;

文件句柄传递子单元,将返回的文件句柄传递给ZwCreateSection;

元,包括:

始数据。

件展开到内存中;

预设的挂钩表中的挂钩加载到所述引入表中;所述预设的挂钩表中的挂

钩,用于针对所述计算机程序中不需要被调用的函数,返回无效值;

表中挂钩的引入表,执行所述要获取调度表原始数据的计算机程序的入口

程序;在执行所述入口程序过程中,计算机程序的数据被初始化;和

展开执行子单元,执行ZwCreateSection,将原始文件展开到内存中。

10.根据权利要求8所述的装置,其特征在于,所述重定位单元,包

重定位表存储子单元,用于存储标准重定位表;

重定位执行子单元,按照标准重定位表,对内存中原始文件代码段中

11.根据权利要求8所述的装置,其特征在于,该装置还包括:挂钩

12.根据权利要求11所述的装置,其特征在于,当要获取调度表原

对象分配子单元,分配一个DRIVER_OBJECT对象;

入口指针调用子单元,将DRIVER_OBJECT对象作为参数传递给驱

动程序的入口指针并调用它;所述DRIVER_OBJECT对象被初始化,获

表存储单元,用于存储预设的挂钩表。

的所有立即地址进行重定位。

括:

始数据的计算机程序为驱动程序时,所述入口程序执行单元,包括:

取DRIVER_OBJECT对象初始化后的数据。

13.根据权利要求12所述的装置,其特征在于:

所述调度表原始数据获取单元,用于从DRIVER_OBJECT对象初始

14.根据权利要求8所述的装置,其特征在于,

当要获取调度表原始数据的计算机程序为COM组件时,所述不需要

CreateMutex和CreateEvent。

化后的域DRIVER_unction中提取出中断请求调度表的原

始值。

被调用的函数包括:

说 明 书

技术领域

本发明涉及计算机程序的调度表,特别涉及一种获取计算机程序调度

背景技术

目前,随着计算机和网络的日益普及,如何对抗计算机病毒、木马程

有些恶意程序为了防止被杀毒软件或其他安全软件查杀,也采取了保

其中,恶意程序保护自身文件的常见方法是在Windows的用户模式、

具体地,恶意程序拦截或过滤文件打开函数的点有:

1、用户模式,在引入表上安装调度表挂钩,拦截过滤Win32API函

2、用户模式,在引入表函数上安装内联挂钩,拦截过滤Win32API

3、内核模式,在系统服务调度表安装调度表挂钩,拦截过滤Windows

Native API。

函数。

数。

内核模式拦截或过滤文件访问函数。常见的方式就是修改计算机程序(主

要是驱动程序)的调度表,以使得访问恶意程序的操作被阻止。

护措施,例如:有的恶意程序就利用驱动程序获取操作系统的权限,从而

达到隐藏保护自身文件,窃取信息等目的。

序等恶意程序,已经成为一项非常重要的课题。

表原始数据的方法及装置。

4、内核模式,在系统服务调度表的事件处理安装内联挂钩,拦截过

Windows Native API。

5、内核模式,在文件系统驱动的中断请求调度表上安装调度表挂钩,

6、内核模式,在文件系统驱动的中断请求处理函数上安装内联挂钩,

7、内核模式,在文件系统过滤驱动的中断请求调度表上安装调度表

拦截过滤文件系统中断请求处理函数。

8、内核模式,在文件系统过滤驱动的中断请求调度表函数上安装内

拦截过滤文件系统中断请求处理函数,等等很多种。

由此可见,恶意程序实现拦截或过滤文件打开函数的手段,主要是对

举例来说,对于上述第5种情况,恶意程序通常使用如下步骤来保护

件:

首先,获取文件系统系统驱动的驱动对象,DRIVER_OBJECT

然后,将文件系统中

DRIVER_unction[IRP_MJ_CREATE]中的中断处理函数地

址保存。其中,文件系统DRIVER_unction是用来保存中

断请求调度表地址的域。

自身文

调度表、事件处理函数增加挂钩,以使安全软件无法访问这些恶意程序。

联挂钩,

挂钩,

拦截过滤文件系统中断请求处理函数。

拦截过滤文件系统中断请求处理函数。

最后,恶意程序再将自己的挂钩函数地址写入

这样,就已经完成了上述第5种情况的挂钩。

在这种情况下,如果操作系统中有任何文件访问该恶意程序,则会先

对于这个实例,如果安全软件需要访问这些恶意程序,需要利用文件

为了对抗恶意程序,安全软件需要利用各种方法定位、修复不同场景

检测与修复被修改的事件处理函数的前提是先定位它。但是由于内存

为了获取调度表中事件处理函数原始地址数据,现有技术最常见的方

1、硬编码,将函数地址以硬编码的方式写到程序中。

法有两种:

中调度表项的地址可能已经被修改。这种情况下,通常只能判断它是否被

修改,而无法知道被修改的调度表原始的地址数据。

下的各种调度表表项以及被修改过的事件处理函数。

系统解析、挂钩恢复等方法。如果利用挂钩恢复的方法,必须要首先确定

中断请求调度表中被修改域的原始值。

访问该恶意程序的挂钩函数。恶意程序通过挂钩函数获取到操作系统要访

问的文件名等信息。如果操作系统要访问的文件名和恶意程序需要保护的

文件名相同,则挂钩函数直接返回访问失败。这样,操作系统或其他程序

就无法访问这些文件,所有对恶意程序的文件访问操作就都被阻止了。

DRIVER_unction[IRP_MJ_CREATE]中。

2、搜索内存,根据一定的特征搜索内存中的事件处理函数。

然而,在实施现有技术过程中,发明人发现现有技术至少有如下缺陷:

对于硬编码的方式,实际上是按照操作系统、文件版本收集可执行程

对于搜索内存的方式,是按照给定的特征串在内存中搜索并定位事件

发明内容

有鉴于此,本发明实施例的目的在于提供一种获取计算机程序调度表

为达到上述目的,本发明实施例公开了一种获取计算机程序调度表原

将要获取调度表原始数据的计算机程序的原始文件展开到内存中;

始数据的方法,包括步骤:

序中函数地址。其主要缺陷有两点:一、由于操作系统、文件版本繁多,

收集齐全会很困难;二、由于操作系统、文件都会被更新,更新后如果第

一时间没有获取到正确的地址,会导致功能失效或者系统崩溃。

处理函数地址。其主要缺陷有三点:一、内存搜索必须非常小心,在多线

程环境下很容易因为正在访问的内存被释放、改写等问题导致系统崩溃;

二、特征串的提取有难度。如果特征提取不唯一,可能因为调用了搜索到

错误的函数地址导致系统崩溃;三、特征串的更新很难做到及时。和硬编

码的情况一样,如果操作系统、文件被更新后,特征串可能会失效,甚至

引发问题二。在操作系统、文件更新后很可能会导致功能失效或者系统崩

溃。

原始数据的方法及装置,以解决采用现有技术的获取调度表原始数据的方

法可能导致的功能失效或者系统崩溃的问题。

对所述计算机程序的原始文件进行重定位处理;

加载所述计算机程序的引入表,并在加载过程中将预设的挂钩表中的

获取被加载的计算机程序的入口指针;

根据所述入口指针,按照上述加载了预设的挂钩表中挂钩的引入表,

从所述被初始化的数据中,获取调度表原始数据。

可选的,所述将要获取调度表原始数据的计算机程序的原始文件展开

用Windows API ZwCreateFile打开原始文件;

将返回的文件句柄传递给ZwCreateSection;

执行ZwCreateSection,将原始文件展开到内存中。

可选的,所述对所述计算机程序的原始文件进行重定位处理为:按照

可选的,当要获取调度表原始数据的计算机程序为驱动程序时,所述

标准重定位表,对内存中原始文件代码段中的所有立即地址进行重定位。

到内存中,包括:

执行所述要获取调度表原始数据的计算机程序的入口程序;在执行所述入

口程序过程中,计算机程序的数据被初始化;

挂钩加载到所述引入表中;所述预设的挂钩表中的挂钩,用于针对所述计

算机程序中不需要被调用的函数,返回无效值;

不需要被调用的函数包括:

IoCreateDevice、IoCreateSymbolicLink、

IoRegisterBootDriverReinitialization、

ZwOpenKey、

IoRegisterDriverReinitialization、

IoRegisterFileSystem、KeSetTimer、

MmGetSystemRoutineAddress、

FsRtlRegisterFileSystemFilterCallbacks、

IoWMIRegistrationControl、

IoDeleteDevice、

ObfReferenceObject和ObfDereferenceObject。

可选的,所述根据所述入口指针,按照上述加载了预设的挂钩表中挂

分配一个DRIVER_OBJECT对象;

将DRIVER_OBJECT对象作为参数传递给驱动程序的入口指针并调

所述计算机程序的数据被初始化为:所述DRIVER_OBJECT对象被

获取DRIVER_OBJECT对象初始化后的数据。

可选的,所述从所述被初始化的数据中,获取调度表原始数据为:

从DRIVER_OBJECT对象初始化后的域

中提取出中断请求调度表的原始值。

可选的,当要获取调度表原始数据的计算机程序为COM组件时,所

要被调用的函数包括:

CreateMutex和CreateEvent。

述不需

DRIVER_unction

初始化,

用它;

钩的引入表,执行所述要获取调度表原始数据的计算机程序的入口程序,

包括:

为达到上述目的,本发明实施例公开了一种获取计算机程序调度表原

原始文件展开单元,将要获取调度表原始数据的计算机程序的原始文

重定位单元,对所述计算机程序的原始文件进行重定位处理;

引入表加载单元,加载所述计算机程序的引入表,并在加载过程中将

入口指针获取单元,获取被加载的计算机程序的入口指针;

入口程序执行单元,根据所述入口指针,按照上述加载了预设的挂钩

调度表原始数据获取单元,从所述被初始化的数据中,获取调度表原

可选的,所述原始文件展开单元,包括:

原始文件打开子单元,用Windows API ZwCreateFile打开原始文件;

文件句柄传递子单元,将返回的文件句柄传递给ZwCreateSection; 和

始数据。

表中挂钩的引入表,执行所述要获取调度表原始数据的计算机程序的入口

程序;在执行所述入口程序过程中,计算机程序的数据被初始化;和

预设的挂钩表中的挂钩加载到所述引入表中;所述预设的挂钩表中的挂

钩,用于针对所述计算机程序中不需要被调用的函数,返回无效值;

件展开到内存中;

始数据的装置,包括:

展开执行子单元,执行ZwCreateSection,将原始文件展开到内存中。

可选的,所述重定位单元,包括:

重定位表存储子单元,用于存储标准重定位表;

重定位执行子单元,按照标准重定位表,对内存中原始文件代码段中

的所有立即地址进行重定位。

可选的,该获取计算机程序调度表原始数据的装置还包括:挂钩表存

储单元,用于存储预设的挂钩表。

可选的,当要获取调度表原始数据的计算机程序为驱动程序时,所述

入口程序执行单元,包括:

对象分配子单元,分配一个DRIVER_OBJECT对象;

入口指针调用子单元,将DRIVER_OBJECT对象作为参数传递给驱

的入口指针并调用它;所述DRIVER_OBJECT对象被初始化,获

DRIVER_OBJECT对象初始化后的数据。

可选的,所述调度表原始数据获取单元,用于从DRIVER_OBJECT

始化后的域DRIVER_unction中提取出中断请求调

原始值。

可选的,当要获取调度表原始数据的计算机程序为COM组件时,所

要被调用的函数包括:

动程序

对象初

度表的

述不需

CreateMutex和CreateEvent。

由上述的技术方案可见,本发明实施例为了获取计算机程序调度表的

通过本发明实施例的方法或装置获取的调度表原始数据,可以直接传

另外,通过本发明实施例的方法或装置获取调度表原始数据时,将预

当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对

实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,

下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员

来讲,在不付出创造性劳动的前提下,还可以根据这些附图获取其他的附

图。

的所有优点。

设的挂钩表中的挂钩加载到引入表中,使得在执行计算机程序的入口程

序,调用到不需被调用的函数时,直接返回无效值,进而能够获取调度表

的原始数据。

递给安全软件,以恢复被恶意程序修改的调度表。由于本发明实施例不需

要进行硬编码或搜索内存,解决了现有技术因此导致的功能失效或者系统

崩溃的问题。

原始数据,没有采用现有技术硬编码或搜索内存的方式来实现,而是另辟

蹊径,通过执行原始程序的入口程序,使得调度表得以被初始化,从而获

取调度的原始数据。

图1为根据本发明实施例的一种获取计算机程序调度表原始数据的

程图;

图2为根据本发明实施例的另一种获取计算机程序调度表原始数据

流程图;

图3为根据本发明实施例的再一种获取计算机程序调度表原始数据

流程图;

图4为根据本发明实施例的一种获取计算机程序调度表原始数据的

构示意图;

图5为根据本发明实施例的另一种获取计算机程序调度表原始数据

结构示意图;

图6为根据本发明实施例的再一种获取计算机程序调度表原始数据

结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进

行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,

而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员

有做出创造性劳动前提下所获取的所有其他实施例,都属于本发明保

范围。

的装置

的装置

装置结

的方法

的方法

方法流

在没

护的

本发明实施例公开了一种获取计算机程序调度表原始数据的方法及

利用挂钩技术,在执行完原始计算机程序的入口程序执行后,生成

装置,

该计算

机程序的原始调度表,从而获取该调度表的原始数据。这样获取的

的原始数据,可以传递给安全软件,用来修复被修改的调度表,例

意程序(如恶意软件、木马、病毒等)修改的调度表。本发明实施

的方法,也可以用在对抗恶意程序的安全软件应用中,用来获取调

始数据,可以用来判定调度表是否被恶意修改,也可以用来修复被

改的调度表,保证计算机系统的正常运行。

以下对本发明实施例公开的获取计算机程序调度表原始数据的方法

分别进行详细说明。

首先,对本发明实施例公开的获取计算机程序调度表原始数据的方法

进行详细说明。

参见图1,根据本发明实施例的一种获取计算机程序调度表原始数据

包括如下步骤:

步骤101,将要获取调度表原始数据的计算机程序的原始文件展开到

本步骤可以与现有技术将文件展开到内存中的方法相同,即可以直接

通过操作系统的API函数来实现。

步骤102,对所述计算机程序的原始文件进行重定位处理。

被加载的计算机程序通常都是PE格式的文件,本实施例是按照标准

表,重定位表是PE格式文件的一个特殊的表,对内存中原始文件

中的所有立即地址进行重定位。本步骤也与现有技术对计算机程序

定位处理的方法相同。

调度表

如被恶

例提供

度表原

恶意修

及装置

的方法

重定位

代码段

进行重

内存中。

步骤103,加载所述计算机程序的引入表,并在加载过程中将预设的

中的挂钩加载到所述引入表中。

所述预设的挂钩表中的挂钩,用于针对所述计算机程序中不需要被调

本发明实施例的一个主要思路是通过模拟操作系统执行一次原始程

得调度表得以重新初始化,从而获取调度表的原始数据。本步骤的

是要在执行计算机程序时,将程序中与初始化调度表无关的函数屏

因此,挂钩表中的挂钩,设置成对于程序中与初始化调度表无关的

直接返回无效值。

而且,本领域技术人员可以理解的,本发明实施例由于需要模拟操作

步骤104,获取被加载的计算机程序的入口指针。

被加载的计算机程序通常都是PE格式的文件,入口指针是PE格式

中的一个域,因此本步骤中可以利用文件结构直接套用,来获取这

这个步骤与现有技术操作系统执行某个计算机程序的步骤是相同

步骤105,根据所述入口指针,按照上述加载了预设的挂钩表中挂钩

表,执行所述要获取调度表原始数据的计算机程序的入口程序,在

用的函数,返回无效值。

挂钩表

序,使

目的,

蔽掉,

函数,

系统执行原始程序,那么在操作系统执行原始程序时必然需要调用很多函

数,但这些函数可能会影响当前计算机系统的正常工作,本发明实施例仅

为获取到调度表的原始数据而不要影响当前计算机系统的正常工作,因

此,可以通过挂钩将这部分函数屏蔽掉,不需要运行这些无关函数,有效

保证计算系统的正常运行。

文件头

个域。

的。

的引入

执行所

述入口程序过程中,计算机程序的数据被初始化。

通常,在执行完计算机程序的入口程序后,大多数数据,包括调度表

都被初始化。因此,本实施例中,通过这个步骤能够获

取初始化后的数据。

上述步骤103~105,实际上是模拟操作系统执行原始程序的入口程序

步骤106,从所述被初始化的数据中,获取调度表原始数据。

由此可见,本发明实施例为了获取计算机程序调度表的原始数据,没

通过本发明实施例的方式获取的调度表原始数据,可以直接传递给安

参见图2,根据本发明实施例的另一种获取计算机程序调度表原始数

法,本实施例要获取调度表原始程序的计算机程序是驱动程序,要

调度表是中断请求调度表,该方法包括如下步骤:

步骤201,读取驱动程序的原始文件,并展开到内存中。

举例来说,本步骤首先用Windows API ZwCreateFile打开文件,然后 将返回

据的方

获取的

全软件,以恢复被恶意程序修改的调度表。由于本发明实施例不需要进行

硬编码或搜索内存,解决了现有技术因此导致的功能失效或者系统崩溃的

问题。

有采用现有技术硬编码或搜索内存的方式来实现,而是另辟蹊径,通过执

行原始程序的入口程序,使得调度表得以被初始化,从而获取调度的原始

数据。

的过程。

的文件句柄传递给ZwCreateSection,最后执行ZwCreateSection,

步骤202,对所述驱动程序的原始文件进行重定位处理。

本步骤也是利用标准的重定位表进行重定位。

重定位表是PE格式文件的一个特殊的表。由于PE格式文件是可以

意基地址加载,对于相对地址的指令可以直接使用,而用立即地址

需要根据重定位表中的重定位项进行重定位。这样的目的是为了保

格式文件加载到内存任意地址后代码段中的所有的立即地址依旧有

定位的方法是现有技术常用的方法,这里不再赘述。

步骤203,加载该驱动程序的引入表,并在加载过程中将预设的挂钩

挂钩加载到所述引入表中。

所述预设的挂钩表中的挂钩,用于针对所述计算机程序中不需要被调

其中,不需要被调用的函数可以包括以下几种:

IoCreateDevice、IoCreateSymbolicLink、

IoRegisterBootDriverReinitialization、

ZwOpenKey、

IoRegisterDriverReinitialization、

IoRegisterFileSystem、KeSetTimer、

用的函数,返回无效值。

表中的

按照任

的指令

证PE

效。重

ZwCreateSection会将驱动文件展开到内存中。

MmGetSystemRoutineAddress、

FsRtlRegisterFileSystemFilterCallbacks、

IoWMIRegistrationControl、

IoDeleteDevice、

ObfReferenceObject和ObfDereferenceObject。

当然,本申请只是以上述为例进行说明,实际应用中,不需要被调用

的函数不仅限于上述几种。

本实施例中的引入表是指驱动程序引用其他模块函数时,用于获得函

具体的,向引入表中填充函数地址时,可以先获得需引入的函数列表,

下面通过举例说明函数列表,假设需引入的函数列表中包括如下两个

另外,实际应用中由于执行某些函数可能会影响系统的安全性,因此,

具体的,向挂钩表中填充函数地址的方法可以与向引入表中填充函数

步骤204,获取被加载的驱动程序的入口指针。

步骤205,分配一个DRIVER_OBJECT对象;

步骤206,将DRIVER_OBJECT对象作为参数传递给驱动程序的入 口指针

地址的方法类似,这里不再重复。

需阻止调用这些函数,为此可将这些函数的地址存储到一个表中,进而生

成挂钩表。

元素:ntoskrnl!ZwCreateFile和ntoskrnl!ZwCreateSection,其中每个元

素中感叹号前面的字符为函数所述的模块名称,后面的字符为函数名称,

则这两个元素在函数所属的模块名称均为:ntoskrnl,函数名称分别为:

ZwCreateFile和ZwCreateSection。

其中,函数列表中的每个元素可以由函数所属的模块名称和函数名称两部

分组成,再根据函数所属的模块名称和函数名称获得函数地址,将所获得

的函数地址填充到引入表的数组中即完成了向引入表中填充函数地址。

数地址的表格。

并调用它,获取DRIVER_OBJECT对象初始化后的数据。

这个步骤就是执行入口程序。具体来说,是按照引入表,执行其中的

各个函数,获取各个函数的返回数据。在执行入口程序

函数的返回数据往DRIVER_OBJECT对象中填充。入

DRIVER_OBJECT中的各个域会被调用后返回的数据

程就是对DRIVER_OBJECT对象的数据进行初始化的

过程中,会将各个

口指针返回后,

填充完毕。这个过

过程。

这样,就获取了DRIVER_OBJECT对象初始化后的数据,其中包括

请求调度表的原始数据。

步骤207,从DRIVER_OBJECT对象初始化后的数据中,获取中断

度表的原始数据。

在DRIVER_OBJECT对象初始化后,域

中的内容就是中断请求调度表的原始

求调度表的原始值从域

DRIVER_unction将可以被传递给安全软件等其他模

使用。如用于恢复现有技术实例中的被挂接的文件访问中断处理函

需要说明的是,本实施例是以应用于windows平台为例进行的说明,

了中断

请求调

DRIVER_unction

值。因此,本步骤就是将该中断请

DRIVER_unction中提取出来。

块程序

数地址。

其中,用到的函数为Windows下的API函数,实际应用中,该方法还可

以应用于其他平台,例如linux等,用到的函数为相应平台下的API函数。

由此可见,本发明实施例为了获取驱动程序的中断请求调度表的原始

数据,没有采用现有技术硬编码或搜索内存的方式来实现,而是另辟蹊径,

通过执行驱动程序的入口程序,使得中断请求调度表得以被初始化,

获取该调度表的原始数据。 从而

通过本发明实施例的方式获取的中断请求调度表原始数据,可以直接

参见图3,根据本发明实施例的再一种获取计算机程序调度表原始数

法,本实施例要获取调度表原始程序的计算机程序是COM组件,

的调度表是服务表,该方法包括如下步骤:

步骤301:读取COM组件的原始文件,并展开到内存中。

步骤302:对所述COM组件的原始文件进行重定位处理。

需要说明的是,步骤301和步骤302具体实现方式,可以与图2所示

中的步骤201和步骤202完全相同,这里不再重复。

步骤303:加载该COM组件的引入表,并在加载过程中将预设的挂

的挂钩加载到所述引入表中。

所述预设的挂钩表中的挂钩,用于针对所述计算机程序中不需要被调

其中,不需要被调用的函数可以包括以下几种:

用的函数,返回无效值。

钩表中

实施例

据的方

要获取

传递给安全软件,以恢复被恶意程序修改的中断请求调度表。由于本发明

实施例不需要进行硬编码或搜索内存,解决了现有技术因此导致的功能失

效或者系统崩溃的问题。

CreateMutex和CreateEvent。

当然,本申请只是以上述为例进行说明,实际应用中,不需要被调用

需要说明的是,本实施例中的向引入表和挂钩表中填充函数地址的方

步骤304,获取被加载的计算机程序的入口指针。

步骤305,根据所述入口指针,按照上述加载了预设的挂钩表中挂钩

表,执行所述要获取服务表原始数据的COM组件的入口程序,在

述入口程序过程中,COM组件的数据被初始化。

步骤306,从所述被初始化的数据中,获取服务表原始数据。

需要说明的是,本实施例是以应用于windows平台为例进行的说明,

由此可见,本发明实施例为了获取COM组件服务表的原始数据,没

现有技术硬编码或搜索内存的方式来实现,而是另辟蹊径,通过执

COM组件的入口程序,使得服务表得以被初始化,从而获取服务表的

通过本发明实施例的方式获取的服务表原始数据,可以直接传递给安

全软件,以恢复被恶意程序修改的服务表。由于本发明实施例不需要进行

原始数据。

有采用

其中,用到的函数为Windows下的API函数,实际应用中,该方法还可

以应用于其他平台,例如linux等,用到的函数为相应平台下的API函数。

的引入

执行所

法,可以与图2所示实施例中向引入表和挂钩表中填充函数地址的方法完

全相同,这里不再重复。

的函数不仅限于上述几种。

硬编码或搜索内存,解决了现有技术因此导致的功能失效或者系统崩溃的

问题。

参见图4,根据本发明实施例的一种获取计算机程序调度表原始数据

本实施例与图1所示的方法实施例相对应,该装置包括:原始文

的装置,

件展开单元410、重定位单元420、引入表加载单元430、入

单元440、入口程序执行单元450和调度表原始数据获取单元口指针获取

460。

其中,原始文件展开单元410,将要获取调度表原始数据的计算机程

始文件展开到内存中。

重定位单元420,对所述计算机程序的原始文件进行重定位处理。

引入表加载单元430,加载所述计算机程序的引入表,并在加载过程

设的挂钩表中的挂钩加载到所述引入表中;所述预设的挂钩表中的

用于针对所述计算机程序中不需要被调用的函数,返回无效值。

入口指针获取单元440,获取被加载的计算机程序的入口指针。

入口程序执行单元450,根据所述入口指针,按照上述加载了预设的

中挂钩的引入表,执行所述要获取调度表原始数据的计算机程序的

序;在执行所述入口程序过程中,计算机程序的数据被初始化。

调度表原始数据获取单元460,从所述被初始化的数据中,获取调度

数据。

由此可见,本发明实施例为了获取计算机程序调度表的原始数据,没

序的原

中将预

挂钩,

挂钩表

入口程

表原始

有采用现有技术硬编码或搜索内存的方式来实现,而是另辟蹊径,通过执

行原始程序的入口程序,使得调度表得以被初始化,从而获取调度的原始

数据。

通过本发明实施例的方式获取的调度表原始数据,可以直接传递给安

参见图5,根据本发明实施例的另一种获取计算机程序调度表原始数

置,本实施例与图2所示的方法实施例对应,要获取调度表原始程

算机程序是驱动程序,要获取的调度表是中断请求调度表。该装置

原始文件展开单元510、重定位单元520、引入表加载单元530、

针获取单元540、入口程序执行单元550、调度表原始数据获取单

和挂钩表存储单元570。

其中,所述原始文件展开单元510,包括:原始文件打开子单元511、

文件句柄传递子单元512和展开执行子单元513。该原始文件打开子单元

511,用Windows API ZwCreateFile打开原始文件。文件句柄传递子单元

512,将返回的文件句柄传递给ZwCreateSection。

执行ZwCreateSection,将原始文件展开到内存

据的装

序的计

包括:

入口指

元560

全软件,以恢复被恶意程序修改的调度表。由于本发明实施例不需要进行

硬编码或搜索内存,解决了现有技术因此导致的功能失效或者系统崩溃的

问题。

展开执行子单元513,

中。

所述重定位单元520,包括:重定位表存储子单元521和重定位执行

522。该重定位表存储子单元521,用于存储标准重定位表。重定

子单元522,按照标准重定位表,对内存中原始文件代码段中的所

地址进行重定位。

子单元

位执行

有立即

所述挂钩表存储单元570,用于存储预设的挂钩表。

所述引入表加载单元530,加载所述计算机程序的引入表,并在加载

将挂钩表存储单元570中存储的预设的挂钩表中的挂钩加载到所

过程中

述引入

机程序表中。本实施例中所述预设的挂钩表中的挂钩,用于针对所述计算

中不需要被调用的函数,返回无效值。

如图5所示,本实施例中的入口程序执行单元550,包括:对象分配

551和入口指针调用子单元552。该对象分配子单元551,分配一

DRIVER_OBJECT对象。入口指针调用子单元552,将

对象作为参数传递给驱动程序的入口指针并调用它,

子单元

DRIVER_OBJECT

这样

初始化DRIVER_OBJECT对象被初始化,并获取到DRIVER_OBJECT对象

后的数据。

本实施例中的调度表原始数据获取单元560,用于从

DRIVER_OBJECT

提取出中断请求调度对象初始化后的域DRIVER_unction中

表的原始值。

DRIVER_unction将可以被传递给安全软件等其他模

使用。如用于恢复现有技术实例中的被挂接的文件访问中断处理函

由此可见,本发明实施例为了获取驱动程序的中断请求调度表的原始

块程序

数地址。

数据,没有采用现有技术硬编码或搜索内存的方式来实现,而是另辟蹊径,

通过执行驱动程序的入口程序,使得中断请求调度表得以被初始化,

获取该调度表的原始数据。 从而

通过本发明实施例的方式获取的中断请求调度表原始数据,可以直接

传递给安全软件,以恢复被恶意程序修改的中断请求调度表。由于本发明

实施例不需要进行硬编码或搜索内存,解决了现有技术因此导致的功能失

效或者系统崩溃的问题。

参见图6,根据本发明实施例的再一种获取计算机程序调度表原始数

置,本实施例与图3所述的方法实施例对应,要获取调度表原始程

算机程序是COM组件,要获取的调度表是服务表,该装置包括:

件展开单元610、重定位单元620、引入表加载单元630、入口指

单元640、入口程序执行单元650、调度表原始数据获取单元660

表存储单元670。

需要说明的是,本实施例中原始文件展开单元610、重定位单元620、

所述挂钩表存储单元670,用于存储预设的挂钩表。

所述引入表加载单元630,加载所述计算机程序的引入表,并在加载

将挂钩表存储单元670中存储的预设的挂钩表中的挂钩加载到所

据的装

序的计

原始文

针获取

和挂钩

引入表加载单元630、入口指针获取单元640可以与图5所示实施例中原

始文件展开单元510、重定位单元520、引入表加载单元530、入口指针

获取单元540完全相同,这里不再重复。

过程中

述引入

机程序表中。本实施例中所述预设的挂钩表中的挂钩,用于针对所述计算

中不需要被调用的函数,返回无效值。

其中,不需要被调用的函数可以包括:CreateMutex和CreateEvent。

由此可见,本发明实施例为了获取COM组件服务表的原始数据,没

现有技术硬编码或搜索内存的方式来实现,而是另辟蹊径,通过执

COM组件的入口程序,使得服务表得以被初始化,从而获取服务表的

有采用

原始数据。

通过本发明实施例的方式获取的服务表原始数据,可以直接传递给安

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用

来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者

暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语

“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得

包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还

包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或

者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”

限定的要素,并不排除在包括所述要素的过程、

存在另外的相同要素。

全软件,以恢复被恶意程序修改的服务表。由于本发明实施例不需要进行

硬编码或搜索内存,解决了现有技术因此导致的功能失效或者系统崩溃的

问题。

方法、物品或者设备中还

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护

范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,

均包含在本发明的保护范围内。

同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的

不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,

所以描述的比较简单,相关之处参见方法实施例的部分说明即可。


发布者:admin,转转请注明出处:http://www.yc00.com/news/1715099772a2565930.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信