CN104123492A - 一种Windows的进程保护方法 - Google Patents
一种Windows的进程保护方法 Download PDFInfo
- Publication number
- CN104123492A CN104123492A CN201410347284.1A CN201410347284A CN104123492A CN 104123492 A CN104123492 A CN 104123492A CN 201410347284 A CN201410347284 A CN 201410347284A CN 104123492 A CN104123492 A CN 104123492A
- Authority
- CN
- China
- Prior art keywords
- dll
- function
- dynamic base
- windows
- self
- 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.)
- Pending
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/54—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 adding security routines or objects to programs
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种Windows的进程保护方法,其通过驱动程序把含有核心功能代码的dll注入到系统进程运行,从而监视被保护进程的状态。通过注入的dll动态库这个跳板,系统动态库scesrv.dll就会重新加载到系统进程services.exe的内存空间中,这也使注入的dll动态库神不知鬼不觉地加载到系统进程services.exe的内存空间中去。本发明方法有很好的稳定性和兼容性,实现难度不大,隐蔽性好,由于没有Patch系统代码,所以64位Windows操作系统也同样适用。
Description
技术领域
本发明涉及网络安全技术领域,尤其涉及一种Windows的进程保护方法。
背景技术
进程保护是为了防止恶意程序破坏进程的正常运行。很多软件,如机房的监控系统、计费系统等,以及一些必须确保自身运行过程中不被强行中断,否则会导致数据丢失、操作系统崩溃等严重后果的软件,都需要对自身进行必要的防护,防止恶意行为或者操作者的误操作引起的损失。
要强制关闭一个进程,通常的做法是在应用层调用OpenProcess函数打开进程,打开进程后再调用TerminateProcess函数强制关闭进程。所以,进程保护的方法就是要阻止这两个函数的其中一个运行就可以了。在Windows系统的内核,这两个函数分别对应的是NtOpenProcess函数和NtTerminateProcess函数。要接管这两个函数,可以在驱动层的SSDT表(System Services Descriptor Table)把指向这两个函数的地址替换成自己函数的地址(Hook方法)。这样,所有调用这两个函数的调用,都先会经过自己函数的判断,才会去调用真正的函数去执行,这样就可以起到保护进程的作用。
采用SSDT Hook的方法实现简单,系统本身就会导出SSDT表。但是就是因为过于简单,所以很多杀毒软件、病毒和一些监控类软件,都会检查或者使用这个SSDT表。所以使用SSDTHook方法会有隐藏性不足的问题,并且会和其他软件产生稳定性和兼容性的问题等。由于在64位的Windows下系统自带一个PatchGuard技术,这个技术会定期检查系统的内核有无被修改(Patch),一旦修改就会引发蓝屏,所以SSDT Hook方法在64位系统下不能使用。
针对SSDT Hook的方法存在不足,就产生了inLine Hook方法。inLine Hook方法是指在函数开头处写入jmp XXXX的汇编指令,来转跳到自己的函数。这样就可以使被Hook函数先执行我们自己的判断函数后,再执行被Hook函数,从而到达Hook目的。对于进程保护的两个函数:NtOpenProcess函数和NtTerminateProcess函数,他们执行中会调用到:ObReferenceObjectByHandle函数、ObReferenceObjectByPointer函数和ObpCreateHandle函数。所以,只要对这3个函数进行inLine Hook就可以达到进程保护的目的。
由于要Patch系统代码,所以采用inLine Hook的方法难度高,稳定性差。如果其他进程保护软件也inLine Hook同一函数,就会存在兼容性的问题。另外,在64位Windows系统下也存在不能使用的问题。
发明内容
本发明为了克服现有技术中的缺点或不足,提供了一种Windows的进程保护方法,从而实现了保护进程的目的。
一种Windows的进程保护方法,其通过驱动程序把含有核心功能代码的dll注入到系统进程运行,从而监视被保护进程的状态。
该发明方法的具体流程为:当Windows系统启动的时候通过自定义的驱动程序调用映像加载通知函数来注册自定义的映像加载回调函数。当被注入的目标系统进程启动前,并且映像开始加载的时候,自定义的映像加载回调函数就会马上被调用。在自定义的回调函数中检查目标系统进程的导入表,当找到可以注入的系统动态库dll的时候,就修改目标系统进程的导入表,把系统动态库dll更改为自定义的动态库,即注入的dll动态库,这样就完成dll注入动作。当系统进程启动后,注入的dll动态库中的代码就可以秘密地运行。在后台隐藏运行的代码可以不断地监视被保护进程的相关情况,在遇到特殊情况发现被保护进程关闭后,就可以马上重启被保护进程,这样就可以达到进程保护的目的。
本发明技术方案带来的有益效果:
本发明方法有很好的稳定性和兼容性,实现难度不大,隐蔽性好,由于没有Patch系统代码,所以64位Windows操作系统也同样适用。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1是本发明的方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
针对现有技术出现的问题,本发明方法采用:通过驱动程序把含有核心功能代码的dll注入到系统进程来运行,从而监视被保护进程的状态的方案。该方案有很好的稳定性和兼容性,同时在64位Windows系统下也能正常使用。具体流程如图1所示。
本发明方案分为驱动层和应用层两部分,具体实施流程如下。
1、驱动层部分。
在被注入的系统进程中选取系统服务控制进程services.exe,这个进程是Windows系统管理服务用的,注入到这个进程有很好的隐蔽性。当Windows系统启动的时候通过自定义的驱动程序调用映像加载通知函数PsSetLoadImageNotifyRoutine来注册自己的映像加载回调函数。当系统进程services.exe启动前,并且映像开始加载的时候,自定义的映像加载回调函数就会马上被调用。在自定义的回调函数中检查系统进程services.exe的导入表,当找到系统导入的动态库scesrv.dll的时候,就可以修改系统进程services.exe的导入表,把动态库scesrv.dll更改为自己的动态库,这样就可以完成dll注入动作。系统进程services.exe启动完成的时候,注入的dll中的进程保护代码就可以运行。
2,应用层部分。
应用层部分介绍一下注入的dll动态库。注入的dll动态库也分为两部分,分别是dll注入的后期收尾工作和实现进程保护的原理。
dll注入的后期收尾工作:因为在驱动层更改了系统进程services.exe的导入表,所以注入的dll动态库必须伪装成为系统的动态库scesrv.dll,让系统察觉不到有dll动态库被注入。用Pe工具打开动态库scesrv.dll,就会发现动态库scesrv.dll有两个导出函数,分别是ScesrvInitializeServer函数和ScesrvTerminateServer函数。
这两个导出函数正是系统进程services.exe的导入函数,所以注入的dll动态库的导出表必须包含这两个函数。
另外由于注入的dll动态库无办法实现这两个函数的具体功能,所以注入的dll动态库也必须从动态库scesrv.dll导入这两个函数,来实现系统相关的功能代码。
这样,通过注入的dll动态库这个跳板,系统动态库scesrv.dll就会重新加载到系统进程services.exe的内存空间中,这也使注入的dll动态库神不知鬼不觉地加载到系统进程services.exe的内存空间中去。
进程保护的原理:当系统进程services.exe启动后,我们注入的dll动态库中的代码就可以秘密地运行。在后台隐藏运行的代码可以调用函数EnumProcesses、Process32First和Process32Next不断地监视被保护进程的相关情况,在遇到特殊情况发现被保护进程关闭后,就可以马上调用CreateProcess函数来重启被保护进程,这样就可以达到进程保护的目的。。
以上对本发明实施例所提供的一种Windows的进程保护方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (8)
1.一种Windows的进程保护方法,其特征在于,其通过驱动程序把含有核心功能代码的dll注入到系统进程运行,从而监视被保护进程的状态,具体流程如下:
当Windows系统启动的时候通过自定义的驱动程序调用映像加载通知函数来注册自定义的映像加载回调函数;
当被注入的目标系统进程启动前,并且映像开始加载的时候,自定义的映像加载回调函数就会马上被调用;
在自定义的回调函数中检查目标系统进程的导入表,当找到可以注入的系统动态库dll的时候,就修改目标系统进程的导入表,把系统动态库dll更改为自定义的动态库,即注入的dll动态库,这样就完成dll注入动作;
当系统进程启动后,注入的dll动态库中的代码就可以秘密地运行,在后台隐藏运行的代码可以不断地监视被保护进程的相关情况。
2.根据权利要求1所述的方法,其特征在于,当Windows系统启动的时候通过自定义的驱动程序调用映像加载通知函数PsSetLoadImageNotifyRoutine来注册自己的映像加载回调函数。
3.根据权利要求1所述的方法,其特征在于,选取系统服务控制进程services.exe作为被注入的目标系统进程。
4.根据权利要求1所述的方法,其特征在于,在自定义的回调函数中检查系统进程services.exe的导入表,当找到系统导入的动态库scesrv.dll的时候,修改系统进程services.exe的导入表。
5.根据权利要求4所述的方法,其特征在于,动态库scesrv.dll有两个导出函数,分别是ScesrvInitializeServer函数和ScesrvTerminateServer函数,这两个导出函数正是系统进程services.exe的导入函数,注入的dll动态库的导出表必须包含这两个函数,另外由于注入的dll动态库无办法实现这两个函数的具体功能,所以注入的dll动态库也必须从动态库scesrv.dll导入这两个函数,来实现系统相关的功能代码。
6.根据权利要求1所述的方法,其特征在于,后台隐藏运行的代码调用函数EnumProcesses、Process32First和Process32Next不断地监视被保护进程的相关情况。
7.根据权利要求1所述的方法,其特征在于,遇到特殊情况发现被保护进程关闭后,马上调用CreateProcess函数来重启被保护进程,这样就可以达到进程保护的目的。
8.根据权利要求1所述的方法,其特征在于,该方法也适用于64位Windows操作系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410347284.1A CN104123492A (zh) | 2014-07-21 | 2014-07-21 | 一种Windows的进程保护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410347284.1A CN104123492A (zh) | 2014-07-21 | 2014-07-21 | 一种Windows的进程保护方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104123492A true CN104123492A (zh) | 2014-10-29 |
Family
ID=51768901
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410347284.1A Pending CN104123492A (zh) | 2014-07-21 | 2014-07-21 | 一种Windows的进程保护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104123492A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104376263A (zh) * | 2014-12-09 | 2015-02-25 | 北京奇虎科技有限公司 | 应用程序行为拦截的方法和装置 |
CN105512548A (zh) * | 2015-12-02 | 2016-04-20 | 湘潭大学 | 基于隐藏可执行镜像并注入dll保护镜像代码的方法 |
CN106203069A (zh) * | 2016-06-27 | 2016-12-07 | 北京金山安全软件有限公司 | 一种动态链接库文件的拦截方法、装置及终端设备 |
CN106293963A (zh) * | 2016-08-01 | 2017-01-04 | 北京金山安全管理系统技术有限公司 | 一种用于windows系统中应用层和驱动层通讯的方法及系统 |
CN106778269A (zh) * | 2016-12-01 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 一种驱动层防注入方法、装置及客户端 |
CN108762825A (zh) * | 2018-04-20 | 2018-11-06 | 烽火通信科技股份有限公司 | 动态库重载的实现方法及系统 |
CN112464228A (zh) * | 2020-09-09 | 2021-03-09 | 北京升鑫网络科技有限公司 | 一种应用层命令审计方法、装置、系统及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102737198A (zh) * | 2011-04-13 | 2012-10-17 | 腾讯科技(深圳)有限公司 | 对象保护方法及装置 |
CN102841795A (zh) * | 2011-06-24 | 2012-12-26 | 镇江华扬信息科技有限公司 | 一种远程线程注入技术方法 |
CN102880817A (zh) * | 2012-08-20 | 2013-01-16 | 福建升腾资讯有限公司 | 计算机软件产品运行保护方法 |
CN102929716A (zh) * | 2012-11-07 | 2013-02-13 | 北京亿赛通科技发展有限责任公司 | 一种启动多进程的方法 |
CN103530118A (zh) * | 2013-09-30 | 2014-01-22 | 广州华多网络科技有限公司 | 将自定义dll注入目标进程的方法及装置 |
CN103902890A (zh) * | 2012-12-24 | 2014-07-02 | 珠海市君天电子科技有限公司 | 一种Android程序行为的监控方法及监控系统 |
-
2014
- 2014-07-21 CN CN201410347284.1A patent/CN104123492A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102737198A (zh) * | 2011-04-13 | 2012-10-17 | 腾讯科技(深圳)有限公司 | 对象保护方法及装置 |
CN102841795A (zh) * | 2011-06-24 | 2012-12-26 | 镇江华扬信息科技有限公司 | 一种远程线程注入技术方法 |
CN102880817A (zh) * | 2012-08-20 | 2013-01-16 | 福建升腾资讯有限公司 | 计算机软件产品运行保护方法 |
CN102929716A (zh) * | 2012-11-07 | 2013-02-13 | 北京亿赛通科技发展有限责任公司 | 一种启动多进程的方法 |
CN103902890A (zh) * | 2012-12-24 | 2014-07-02 | 珠海市君天电子科技有限公司 | 一种Android程序行为的监控方法及监控系统 |
CN103530118A (zh) * | 2013-09-30 | 2014-01-22 | 广州华多网络科技有限公司 | 将自定义dll注入目标进程的方法及装置 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104376263A (zh) * | 2014-12-09 | 2015-02-25 | 北京奇虎科技有限公司 | 应用程序行为拦截的方法和装置 |
CN105512548A (zh) * | 2015-12-02 | 2016-04-20 | 湘潭大学 | 基于隐藏可执行镜像并注入dll保护镜像代码的方法 |
CN106203069A (zh) * | 2016-06-27 | 2016-12-07 | 北京金山安全软件有限公司 | 一种动态链接库文件的拦截方法、装置及终端设备 |
CN106203069B (zh) * | 2016-06-27 | 2019-10-15 | 珠海豹趣科技有限公司 | 一种动态链接库文件的拦截方法、装置及终端设备 |
CN106293963A (zh) * | 2016-08-01 | 2017-01-04 | 北京金山安全管理系统技术有限公司 | 一种用于windows系统中应用层和驱动层通讯的方法及系统 |
CN106778269A (zh) * | 2016-12-01 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 一种驱动层防注入方法、装置及客户端 |
CN106778269B (zh) * | 2016-12-01 | 2020-09-25 | 腾讯科技(深圳)有限公司 | 一种驱动层防注入方法、装置及客户端 |
CN108762825A (zh) * | 2018-04-20 | 2018-11-06 | 烽火通信科技股份有限公司 | 动态库重载的实现方法及系统 |
CN108762825B (zh) * | 2018-04-20 | 2021-04-27 | 烽火通信科技股份有限公司 | 动态库重载的实现方法及系统 |
CN112464228A (zh) * | 2020-09-09 | 2021-03-09 | 北京升鑫网络科技有限公司 | 一种应用层命令审计方法、装置、系统及存储介质 |
CN112464228B (zh) * | 2020-09-09 | 2021-07-27 | 北京升鑫网络科技有限公司 | 一种应用层命令审计方法、装置、系统及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104123492A (zh) | 一种Windows的进程保护方法 | |
CN109086100B (zh) | 一种高安全可信移动终端安全体系架构及安全服务方法 | |
US20150242627A1 (en) | Apparatus and method for blocking actvity of malware | |
Berdajs et al. | Extending applications using an advanced approach to dll injection and api hooking | |
US9460284B1 (en) | Behavioral malware detection using an interpreter virtual machine | |
US20190034634A1 (en) | Systems and Methods for Tracking Malicious Behavior Across Multiple Software Entities | |
CN105045605A (zh) | 一种将dll注入目标进程的方法和系统 | |
JP6388485B2 (ja) | マルウェア発見方法及びシステム | |
CN104268471B (zh) | 一种检测面向返程的编程攻击的方法及装置 | |
US20160055333A1 (en) | Protecting software application | |
US9158914B2 (en) | Executable component injection utilizing hotpatch mechanisms | |
CN107229862B (zh) | 基于模拟栈和线程注入的一种rop攻击栈溢出防护方法 | |
CN102147845A (zh) | 进程监控方法 | |
CN107908958B (zh) | SELinux安全标识符防篡改检测方法及系统 | |
CN104217157A (zh) | 一种漏洞防利用方法及系统 | |
CN106406944A (zh) | 一种禁止应用自启动的控制方法及系统 | |
CN104660606A (zh) | 一种应用程序安全的远程监控方法 | |
CN103778006A (zh) | 一种操作系统进程控制方法 | |
CN105512548A (zh) | 基于隐藏可执行镜像并注入dll保护镜像代码的方法 | |
CN114595462A (zh) | 一种数据处理的方法和装置 | |
CN114238947A (zh) | Windows系统的软件保护方法、系统、设备及介质 | |
Skochinsky | Intel ME secrets | |
Thabet | Stuxnet malware analysis paper | |
US9536090B2 (en) | Method of defending a computer from malware | |
CN108021792B (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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20141029 |
|
WD01 | Invention patent application deemed withdrawn after publication |