CN105809029A - 一种拦截驱动程序运行的方法及装置 - Google Patents
一种拦截驱动程序运行的方法及装置 Download PDFInfo
- Publication number
- CN105809029A CN105809029A CN201610122227.2A CN201610122227A CN105809029A CN 105809029 A CN105809029 A CN 105809029A CN 201610122227 A CN201610122227 A CN 201610122227A CN 105809029 A CN105809029 A CN 105809029A
- Authority
- CN
- China
- Prior art keywords
- driver
- module
- file path
- internal memory
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种拦截驱动程序运行的方法及装置,方法包括:检测是否有软件加载驱动程序;如果有,获得所述驱动程序的文件路径和内存起始地址;判断预设文件路径库中是否存在所获得的文件路径;如果存在,根据所获得的内存起始地址,确定所述驱动程序的执行入口地址;修改所述执行入口地址对应的汇编代码;执行修改后的所述执行入口地址对应的汇编代码。应用本发明实施例,驱动程序被加载到内存中,加载驱动程序的软件检测到其驱动程序已加载到内存中,因此不会再次加载驱动,减少了系统资源的占用。并且虽然驱动程序被加载到内存中,但是实际执行的是修改后的执行入口地址对应的汇编代码,驱动程序的真正代码并未执行,提高了系统安全。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种拦截驱动程序运行的方法及装置。
背景技术
驱动程序,一般情况下指设备驱动程序(DeviceDriver),是一种可以使计算机和其他硬件设备通信的特殊程序,相当于硬件的接口,操作系统只有通过这个接口,才能控制其他硬件设备的工作。特殊情况下也指运行在操作系统内核层中的软件的应用程序。
目前,恶意软件在对系统进行攻击时需要加载其驱动程序。为了保证系统的安全,避免系统被恶意软件攻击,通常会对恶意软件的驱动程序加载进行拦截。目前,主流的拦截驱动程序加载方式主要是通过HOOK(钩子)技术拦截驱动程序的加载。但是,利用HOOK技术拦截驱动程序加载后,恶意软件会发现其驱动程序没有运行,进而会再次加载驱动程序,占用系统资源(比如CPU,内存)。并且系统会再次拦截驱动程序的加载也会占用系统资源。
发明内容
本发明实施例的目的在于提供一种拦截驱动程序运行的方法及装置,以减少系统资源的占用。
为达到上述目的,本发明实施例公开了一种拦截驱动程序运行的方法,包括:
检测是否有软件加载驱动程序;
如果有,获得所述驱动程序的文件路径和内存起始地址;
判断预设文件路径库中是否存在所获得的文件路径;
如果存在,根据所获得的内存起始地址,确定所述驱动程序的执行入口地址;
修改所述执行入口地址对应的汇编代码;
执行修改后的所述执行入口地址对应的汇编代码,以拦截所述驱动程序的运行。
可选的,所述获得所述驱动程序的文件路径和内存起始地址,包括:
调用回调函数获得所述驱动程序的文件路径和内存起始地址,其中,所述回调函数为预先调用系统第一函数注册的。
可选的,所述系统第一函数为:
PsSetLoadImageNotifyRoutine函数。
可选的,所述修改所述执行入口地址对应的汇编代码,包括:
将所述执行入口地址对应的汇编代码修改为:moveax,0xC0000022ret0x08。
为达到上述目的,本发明实施例公开了一种拦截驱动程序运行的装置,包括:检测模块、获得模块、判断模块、确定模块、修改模块和执行模块,其中,
所述检测模块,用于检测是否有软件加载驱动程序;
所述获得模块,用于在所述检测模块检测到有驱动程序被加载的情况下,获得所述驱动程序的文件路径和内存起始地址;
所述判断模块,用于判断预设文件路径库中是否存在所获得的文件路径;
所述确定模块,用于在所述判断模块判断结果为是的情况下,根据所述获得模块所获得的内存起始地址,确定所述驱动程序的执行入口地址;
所述修改模块,用于修改所述执行入口地址对应的汇编代码;
所述执行模块,用于执行所述修改模块修改后的所述执行入口地址对应的汇编代码,以拦截所述驱动程序的运行。
可选的,所述获得模块,具体用于:
在所述检测模块检测到有驱动程序被加载的情况下,调用回调函数获得所述驱动程序的文件路径和内存起始地址,其中,所述回调函数为预先调用系统第一函数注册的。
可选的,所述系统第一函数为:
PsSetLoadImageNotifyRoutine函数。
可选的,所述修改模块,具体用于:
将所述执行入口地址对应的汇编代码修改为:moveax,0xC0000022ret0x08。
由上述的技术方案可见,本发明实施例提供了一种拦截驱动程序运行的方法及装置,方法包括:检测是否有软件加载驱动程序;如果有,获得所述驱动程序的文件路径和内存起始地址;判断预设文件路径库中是否存在所获得的文件路径;如果存在,根据所获得的内存起始地址,确定所述驱动程序的执行入口地址;修改所述执行入口地址对应的汇编代码;执行修改后的所述执行入口地址对应的汇编代码,以拦截所述驱动程序的运行。
应用本发明实施例所提供的技术方案,驱动程序被加载到内存中,加载驱动程序的软件检测到其驱动程序已加载到内存中,因此不会再次加载驱动,减少了系统资源的占用。并且虽然驱动程序被加载到内存中,但是实际执行的是修改后的执行入口地址对应的汇编代码,驱动程序的真正代码并未执行,提高了系统安全。
当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种拦截驱动程序运行的方法的流程示意图;
图2为本发明实施例提供的一种拦截驱动程序运行的装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了解决现有技术问题,本发明实施例提供了一种拦截驱动程序运行的方法及装置。下面首先对本发明实施例所提供的一种拦截驱动程序运行的方法进行介绍。
图1为本发明实施例提供的一种拦截驱动程序运行的方法的流程示意图,可以包括:
S101:检测是否有软件加载驱动程序,如果是,执行S102;
S102:获得所述驱动程序的文件路径和内存起始地址;
S103:判断预设文件路径库中是否存在所获得的文件路径,如果是,执行S104;
S104:根据所获得的内存起始地址,确定所述驱动程序的执行入口地址;
S105:修改所述执行入口地址对应的汇编代码;
S106:执行修改后的所述执行入口地址对应的汇编代码,以拦截所述驱动程序的运行。
具体的,检测是否有软件加载驱动程序为现有技术,本发明实施例在此不对其进行赘述。
示例性的,下面以软件A、该软件A的驱动程序x为例进行说明。
具体的,在实际应用中,该拦截驱动程序运行的方法可以被内嵌在一杀毒软件中,该杀毒软件的防御驱动预先调用系统第一函数(PsSetLoadImageNotifyRoutine函数)注册回调函数。
调用PsSetLoadImageNotifyRoutine函数注册回调函数的语法如下:
NTSTATUSPsSetLoadImageNotifyRoutine(
_In_PLOAD_IMAGE_NOTIFY_ROUTINENotifyRoutine
);
注册的回调函数声明如下:
其中,FullImageName代表驱动程序的全路径,ImageInfo为包含成员列表为驱动程序的内存起始地址的结构体,其中,结构体为由一系列具有相同类型或不同类型的数据构成的数据集合。
当软件A加载驱动程序x时,系统检测到驱动程序x被加载,会通知回调函数,此时回调函数获得驱动程序x的文件路径和内存起始地址,其中,回调函数获得驱动程序x的文件路径和内存起始地址为现有技术,本发明实施例在此不对其进行赘述。
当获得驱动程序x的文件路径后,判断预设的文件路径库中是否存在驱动程序x的文件路径,如果存在,表示需要拦截驱动程序x的运行,则此时可以根据获得的驱动程序x的内存起始地址,确定驱动程序x的执行入口地址。
具体的,在实际应用中,驱动程序被加载到内存之后,驱动程序对应内存中所包含的5种不同的数据区,通常分别被称为BSS段、数据段、代码段、栈和堆,其中,
BSS段(bsssegment):通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文BlockStartedbySymbol的简称。BSS段属于静态内存分配。
数据段(datasegment):通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。
代码段(codesegment/textsegment):通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定。
堆(heap):通常是指用于存放进程运行中被动态分配的一块内存区域,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。
栈(stack):栈又称堆栈,通常是指用户存放程序临时创建的局部变量的一块内存区域。
因此,可以根据驱动程序的内存起始地址,确定驱动程序对应的代码段,进而确定驱动程序的代码执行入口地址。需要说明的是,确定驱动程序的执行入口地址为现有技术,本发明实施例在此不对其进行赘述。
当确定出驱动程序的执行入口地址后,修改该执行入口地址对应的汇编代码,并执行修改后的所述执行入口地址对应的汇编代码。
具体的,在实际应用中,可以将执行入口地址对应的汇编代码修改为:moveax,0xC0000022ret0x08。该汇编代码对应的16进制数据为:0xB8,0x22,0x00,0x00,0xC0,0xC2,0x08,0x00。该汇编代码指令的意思为返回拒绝访问。
当驱动程序x开始执行代码时,首先执行的是被修改的汇编代码指令,从而未执行驱动程序本身的汇编代码。这样驱动程序被加载到内存中,加载驱动程序的软件检测到其驱动程序已加载到内存中,因此不会再次加载驱动。
应用本发明图1所示实施例,驱动程序被加载到内存中,加载驱动程序的软件检测到其驱动程序已加载到内存中,因此不会再次加载驱动,减少了系统资源的占用。并且虽然驱动程序被加载到内存中,但是实际执行的是修改后的执行入口地址对应的汇编代码,驱动程序的真正代码并未执行,提高了系统安全。
与上述的方法实施例相对应,本发明实施例还提供一种拦截驱动程序运行的装置。
图2为本发明实施例提供的一种拦截驱动程序运行的装置的结构示意图,可以包括:检测模块201、获得模块202、判断模块203、确定模块204、修改模块205和执行模块206,其中,
检测模块201,用于检测是否有软件加载驱动程序;
获得模块202,用于在检测模块201检测到有驱动程序被加载的情况下,获得所述驱动程序的文件路径和内存起始地址;
在实际应用中,本发明实施例所示的获得模块202,具体可以用于:
在检测模块201检测到有驱动程序被加载的情况下,调用回调函数获得所述驱动程序的文件路径和内存起始地址,其中,所述回调函数为预先调用系统第一函数注册的。
在实际应用中,所述系统第一函数为:PsSetLoadImageNotifyRoutine函数。
判断模块203,用于判断预设文件路径库中是否存在所获得的文件路径;
确定模块204,用于在判断模块203判断结果为是的情况下,根据获得模块202所获得的内存起始地址,确定所述驱动程序的执行入口地址;
修改模块205,用于修改所述执行入口地址对应的汇编代码;
在实际应用中,本发明实施例所示的修改模块205,具体可以用于:
将所述执行入口地址对应的汇编代码修改为:moveax,0xC0000022ret0x08。
执行模块206,用于执行修改模块205修改后的所述执行入口地址对应的汇编代码,以拦截所述驱动程序的运行。
应用本发明图2所示实施例,驱动程序被加载到内存中,加载驱动程序的软件检测到其驱动程序已加载到内存中,因此不会再次加载驱动,减少了系统资源的占用。并且虽然驱动程序被加载到内存中,但是实际执行的是修改后的执行入口地址对应的汇编代码,驱动程序的真正代码并未执行,提高了系统安全。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (8)
1.一种拦截驱动程序运行的方法,其特征在于,包括:
检测是否有软件加载驱动程序;
如果有,获得所述驱动程序的文件路径和内存起始地址;
判断预设文件路径库中是否存在所获得的文件路径;
如果存在,根据所获得的内存起始地址,确定所述驱动程序的执行入口地址;
修改所述执行入口地址对应的汇编代码;
执行修改后的所述执行入口地址对应的汇编代码,以拦截所述驱动程序的运行。
2.根据权利要求1所述的方法,其特征在于,所述获得所述驱动程序的文件路径和内存起始地址,包括:
调用回调函数获得所述驱动程序的文件路径和内存起始地址,其中,所述回调函数为预先调用系统第一函数注册的。
3.根据权利要求2所述的方法,其特征在于,所述系统第一函数为:
PsSetLoadImageNotifyRoutine函数。
4.根据权利要求1所述的方法,其特征在于,所述修改所述执行入口地址对应的汇编代码,包括:
将所述执行入口地址对应的汇编代码修改为:moveax,0xC0000022ret0x08。
5.一种拦截驱动程序运行的装置,其特征在于,包括:检测模块、获得模块、判断模块、确定模块、修改模块和执行模块,其中,
所述检测模块,用于检测是否有软件加载驱动程序;
所述获得模块,用于在所述检测模块检测到有驱动程序被加载的情况下,获得所述驱动程序的文件路径和内存起始地址;
所述判断模块,用于判断预设文件路径库中是否存在所获得的文件路径;
所述确定模块,用于在所述判断模块判断结果为是的情况下,根据所述获得模块所获得的内存起始地址,确定所述驱动程序的执行入口地址;
所述修改模块,用于修改所述执行入口地址对应的汇编代码;
所述执行模块,用于执行所述修改模块修改后的所述执行入口地址对应的汇编代码,以拦截所述驱动程序的运行。
6.根据权利要求5所述的装置,其特征在于,所述获得模块,具体用于:
在所述检测模块检测到有驱动程序被加载的情况下,调用回调函数获得所述驱动程序的文件路径和内存起始地址,其中,所述回调函数为预先调用系统第一函数注册的。
7.根据权利要求6所述的装置,其特征在于,所述系统第一函数为:
PsSetLoadImageNotifyRoutine函数。
8.根据权利要求6所述的装置,其特征在于,所述修改模块,具体用于:
将所述执行入口地址对应的汇编代码修改为:moveax,0xC0000022ret0x08。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610122227.2A CN105809029B (zh) | 2016-03-03 | 2016-03-03 | 一种拦截驱动程序运行的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610122227.2A CN105809029B (zh) | 2016-03-03 | 2016-03-03 | 一种拦截驱动程序运行的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105809029A true CN105809029A (zh) | 2016-07-27 |
CN105809029B CN105809029B (zh) | 2019-06-14 |
Family
ID=56466682
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610122227.2A Active CN105809029B (zh) | 2016-03-03 | 2016-03-03 | 一种拦截驱动程序运行的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105809029B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108196900A (zh) * | 2017-12-08 | 2018-06-22 | 五八有限公司 | 组件的注册方法及装置 |
CN109947482A (zh) * | 2017-12-21 | 2019-06-28 | 深圳Tcl新技术有限公司 | 一种usb设备的加载方法、存储介质及智能电视 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090276757A1 (en) * | 2008-04-30 | 2009-11-05 | Fraunhofer Usa, Inc. | Systems and methods for inference and management of software code architectures |
CN101901323A (zh) * | 2010-07-22 | 2010-12-01 | 湖北盛天网络技术有限公司 | 一种监控程序模块加载活动的系统过滤方法 |
CN102651060A (zh) * | 2012-03-31 | 2012-08-29 | 北京奇虎科技有限公司 | 一种漏洞检测的方法和系统 |
-
2016
- 2016-03-03 CN CN201610122227.2A patent/CN105809029B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090276757A1 (en) * | 2008-04-30 | 2009-11-05 | Fraunhofer Usa, Inc. | Systems and methods for inference and management of software code architectures |
CN101901323A (zh) * | 2010-07-22 | 2010-12-01 | 湖北盛天网络技术有限公司 | 一种监控程序模块加载活动的系统过滤方法 |
CN102651060A (zh) * | 2012-03-31 | 2012-08-29 | 北京奇虎科技有限公司 | 一种漏洞检测的方法和系统 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108196900A (zh) * | 2017-12-08 | 2018-06-22 | 五八有限公司 | 组件的注册方法及装置 |
CN109947482A (zh) * | 2017-12-21 | 2019-06-28 | 深圳Tcl新技术有限公司 | 一种usb设备的加载方法、存储介质及智能电视 |
CN109947482B (zh) * | 2017-12-21 | 2022-07-29 | 深圳Tcl新技术有限公司 | 一种usb设备的加载方法、存储介质及智能电视 |
Also Published As
Publication number | Publication date |
---|---|
CN105809029B (zh) | 2019-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10310992B1 (en) | Mitigation of cyber attacks by pointer obfuscation | |
US10528735B2 (en) | Malicious code protection for computer systems based on process modification | |
EP2332048B1 (en) | Altered token sandboxing | |
EP2297632B1 (en) | Dynamic file system restriction for portable storage devices | |
US10402563B2 (en) | Automated classification of exploits based on runtime environmental features | |
US11221838B2 (en) | Hot update method, operating system, terminal device, system, and computer-readable storage medium for a system process | |
US20170039367A1 (en) | User-Mode Component Injection Techniques | |
EP3502944B1 (en) | Detecting script-based malware cross reference to related applications | |
US20070089088A1 (en) | Dynamically determining a buffer-stack overrun | |
CN102831344B (zh) | 一种进程的处理方法和装置 | |
US7647629B2 (en) | Hosted code runtime protection | |
WO2015074526A1 (en) | Method and apparatus for injecting java by tecode into target process | |
US20160062655A1 (en) | System and Method for Improved Memory Allocation in a Computer System | |
US10803167B1 (en) | Systems and methods for executing application launchers | |
US10372472B2 (en) | System, method, and computer program product for conditionally preventing use of hardware virtualization | |
US10628188B2 (en) | Disabling just-in-time translation for application functions | |
CN105809029A (zh) | 一种拦截驱动程序运行的方法及装置 | |
CN106502759A (zh) | 一种数据访问方法、代码调用方法及虚拟机监视器 | |
US11847222B2 (en) | System and method for preventing unwanted bundled software installation | |
CN108628620B (zh) | Pos应用开发的实现方法、装置、计算机设备和存储介质 | |
EP3223185B1 (en) | System and method dynamic code patching techniques from user-mode process address space | |
KR101842263B1 (ko) | 어플리케이션에 대한 역공학 차단 방법 및 장치 | |
US8788785B1 (en) | Systems and methods for preventing heap-spray attacks | |
US20160364222A1 (en) | Methods and systems for running modern applications in legacy software environments | |
CN113836529A (zh) | 进程检测方法、装置、存储介质以及计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20181214 Address after: Room 105-53811, No. 6 Baohua Road, Hengqin New District, Zhuhai City, Guangdong Province Applicant after: Zhuhai Leopard Technology Co.,Ltd. Address before: 100085 East District, Second Floor, 33 Xiaoying West Road, Haidian District, Beijing Applicant before: BEIJING KINGSOFT INTERNET SECURITY SOFTWARE Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |