本发明涉及进程监控领域,具体说的是一种进程监控的方法、存储介质。
背景技术
在大数据时代,数据的安全越来越重要,为了保证数据的安全性,常常需要对操作系统进行监测,对系统的监测常使用的方式是进程注入的方式。
在计算机技术领域中,为了对内存中的某个进程进行操作,并且获得该进程地址空间里的数据,或者修改进程的私有数据结构,必须将自己的模块放在目标进程的地址空间里运行,这时就需要使用进程注入方法。
现有技术常用的注入方式有以下几种:使用注册表注入动态链接库;使用windows挂钩来注入动态链接库;使用远程线程来注入动态链接库;使用木马动态链接库来注入动态链接库等。
上述几种常用的注入方式存在以下不足:使用注册表注入动态链接库需要目标进程使用user32.dll;使用windows挂钩来注入动态链接库,这种方法需要注入的目标进程产生窗口消息才能注入成功;使用远程线程注入dll需要知道目标进程的句柄;使用木马来注入动态链接库的方法难度大而且工作量大。
现有的几种注入方式各有各的局限性,不能有效的注入到所有的进程,并且没有一种能有效管理所注入动态链接库的方法。
基于如上原因,有必要提供一种能实现多种消息类型控制,注入容易,且工作量小、不容易被杀毒软件拦截的注入方式。
技术实现要素:
本发明所要解决的技术问题是:提供一种进程监控的方法、存储介质,具有更通用、更灵活、且注入简易、工作量小且不易被拦截等特点。
为了解决上述技术问题,本发明采用的技术方案为:
一种进程监控的方法,包括:
在ring0层对应目标进程注入动态链接库;
依据一具体监控业务,通过所述动态链接库动态调用所述一具体监控业务对应的业务动态链接库;
在ring3层通过api拦截目标进程调用所述业务动态链接库。
本发明提供的另一个技术方案为:
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序在被处理器调用时能够实现上述一种进程监控的方法所包含的所有步骤。
本发明的有益效果在于:本发明只需在特权级别的ring0层对目标进程注入一个的动态链接库。相比现有在ring3层注入的方式更通用、更灵活;并且只需注入一个动态链接库,无需注入其他动态链接库,更简单通用;后续只需依据所注入的这个动态链接库实现动态加载所需的对应各个具体监控业务的业务动态链接库,然后通过在ring3层以拦截方式实现对应复杂的监控业务逻辑功能即可对目标进程进行管控。本发明的进程监控方式兼容多种操作系统,通用性好;将注入和处理复杂的业务逻辑分开,灵活性高、隐藏性更好、同时还能适用于对不同类型的进程的监控,更具全面性;本发明的运用有效的提高了系统的安全性。
附图说明
图1为本发明一种进程监控的方法的流程示意图;
图2为本发明的进程监控方法、存储介质对应的系统框架示意图;
图3为本发明实施例一的进程监控方法的流程示意图;
图4为本发明实施二的进程模块加载通用的管理系统结构组成示意图;
标号说明:
1、注入模块结;2、api拦截模块;3、目标进程旧导入表恢复模块;
11、目标进程设置模块;12、目标进程控制模块;
13、加载模块;14、注入模块。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
本发明最关键的构思在于:在ring0层进行简单的注入;便可在ring3层对目标进程进行管控;适用于多种操作系统,实用性强、灵活性高、操作简易、更具全面性。
本发明所涉及的相关知识说明:
intel的x86处理器是通过ring级别来进行访问控制的,级别共分4层,ring0、ring1、ring、ring3。windows只使用其中的两个级别ring0和ring3。ring0层拥有最高的权限,ring3层拥有最低的权限。
具体的,本发明中的ring0层,指的是intel处理器特权级别中第一层,供特权模式使用,在特权级别下运行,允许执行任何cpu指令,包括特权指令,可以无限制地访问系统数据、代码和硬件资源。对应的是操作系统工作的层级。
具体的,本发明中的ring3层是intel处理器特权级别中第四层,供用户模式使用,它们不允许执行cpu的特权指令,对系统所属的数据、地址空间以及硬件等的访问也是被严格限制的,是操作系统用户能访问的层级。对应的是应用程序工作的层级。
本发明所述的动态链接库,即dll,是在window操作系统下生成的动态链接库。本发明所述的目标进程可以是任何类型的进程。
本发明所述的pe是windowspreinstallationenvironment(windowspe),windows预安装环境,是带有有限服务的最小win32子系统,基于以保护模式运行的windowsxpprofessional及以上内核。
请参照图1以及图2,本发明提供一种进程监控的方法,包括:
在ring0层对应目标进程注入动态链接库;
依据一具体监控业务,通过所述动态链接库动态调用所述一具体监控业务对应的业务动态链接库;
在ring3层通过api拦截目标进程调用所述业务动态链接库。
从上述描述可知,本发明的有益效果在于:本发明通过在ring0层将一个能够用于动态加载与各种具体监控业务对应的业务动态链接库的动态链接库注入到目标进程;然后在ring3层通过api方式拦截实现所加载的业务动态链接库对应的具体监控业务,从而实现对目标进程的监控,本发明提供的监控方式更具通用性、实用性、灵活性以及全面性。
进一步的,还包括:
通过驱动方式监视目标进程的启动请求;
若监视到所述目标进程的启动请求,则执行所述在ring0层对应目标进程注入动态链接库的步骤。
由上述描述可知,以驱动方式监控目标进程的启动,能确保监控到所有的目标进程的启动请求,相比其他方式更可靠。
进一步的,使用pe的方式通过修改所述目标进程的进程导入表注入所述动态链接库。
由上述描述可知,使用pe方式进行注入,具体通过重新构建目标进程的导入表实现动态链接库的注入,注入方式更便捷、高效、也更可靠。
进一步的,所述在ring3层通过api拦截目标进程调用所述业务动态链接库,具体为:
在ring3层对所述目标数据的系统函数进行拦截;
修改所述系统函数在内存的地址,使其指向所述一具体监控业务对应的业务动态链接库。
由上述描述可知,在ring3层实现复杂的业务逻辑功能,具体通过api拦截方式进行目标进程的监控,具体监控的过程更直观、监控方式也更便捷。
进一步的,还包括:
监控进程通过在共享内存获取所述目标进程的数据。
由上述描述可知,利用共享内存实现监控进程对目标进程的数据的获取,隐蔽性更高,也更便捷。
进一步的,所述在ring3层通过api拦截目标进程调用所述业务动态链接库,之后,还包括:
恢复所述目标进程为注入前的状态。
由上述描述可知,在监控完毕后,将目标进程的导入表恢复成监控前的状态,以保障导入表的正常使用。
进一步的,所述具体监控业务的数量为多个时,则所述动态链接库动态调用各个具体监控业务各自对应的业务动态链接库。
由上述描述可知,动态链接库可以根据需要(所需的具体监控业务功能)动态加载对应的多个的业务动态链接库,以实现业务复杂的情况下,对应不同业务的实现。
本发明提供的另一个技术方案为:
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序在被处理器调用时能够实现上述一种进程监控的方法所包含的所有步骤。
从上述描述可知,本发明的有益效果在于:对应本领域普通技术人员可以理解实现上述技术方案中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来实现的,所述的程序可存储于一计算机可读取的存储介质中,该程序在执行时,可包括如上述各方法的流程。
实施例一
请参照图2以及图3,本实施例提供一种进程监控的方法,用于实现对目标进程执行各种具体监控业务功能,以保证操作系统的安全。
本实施例以对其中一个目标进程a为例进行说明,当然,可以依据需求同时对多个的目标进程进行监控,操作方式雷同,在此不进行复述。
本实施例的方法可以包括以下步骤:
s1:监控目标进程的启动。
具体的,通过驱动方式监视目标进程的启动请求,以保证监视到所有的进程的启动请求,相比其他监视方式更可靠。
当监视到目标进程a的启动请求后,执行下一步骤。
s2:在ring0层对应目标进程a注入动态链接库a。
具体的,若操作系统的ring0层接收到目标进程a的启动请求后,将动态链接库a注入到目标进程a中。其中,注入动态链接库a的目标进程a可以是操作系统中任何的进程。所注入的动态链接库为dll,是在window操作系统下生成的动态链接库;所注入的动态链接库的个数为一个,该动态链接库并非现有的对应具体业务的动态链接库(即下述的业务动态链接库)而是能够用于依据需求(配置),动态加载一个或多个的现有的动态链接库(即业务动态链接库)。
具体的注入方式为:通过pe方式注入,具体通过重新构建目标进程的导入表,即将上述的动态链接库添加到目标进程的导入表中实现。构建的方式可以是通过驱动修改pe内存的方式,即通过修改加载驱动模块返回的系统的进程导入表(操作的每一个驱动模块加载的时候可以找到进程的导入表),将动态链接库注入到目标进程。优选的,还包括保存注入前的目标进程的导入表,为后续监控结束的恢复提供支持。
该步骤在ring0层通过pe远程注入的方法将dll注入进程,相比现有的注入方式更通用(能够兼容各种类型的操作系统)、同时更具灵活性。
s3:目标进程a所注入的动态链接库动态a加载业务动态链接库b。
在完成对动态链接库a的注入后,所注入的动态链接库a将依据配置(即设置的需要实现具体监控业务,如隐藏目标进程a),动态加载所配置的具体监控业务对应的业务动态链接库b。
可以同时配置多个具体监控业务(如隐藏、获取数据等),然后动态加载对应的各个业务动态链接库b1到bx。在业务复杂的情况下,不同的业务由对应的不同的业务动态链接库来实现。但是驱动只需注入一个动态链接库即可。
s4:在ring3层通过api拦截目标进程调用所述业务动态链接库。
所述api拦截指的是通过对目标进程的系统函数(api)修改跳转地址从而达到拦截目的。
在应用程序工作的ring3层,上述步骤的业务动态链接库b用来实现对应的具体监控业务;同样的,对应复杂业务情况,动态链接库b1到业务动态链接库bx也是在此实现各自的业务功能。
具体的,在业务动态链接库中可以进行系统函数的拦截,实现我们需要的功能,例如业务动态链接库b1可以通过api拦截方式的调用实现进程隐藏技术。
具体业务功能的实现过程如下:
在ring3层对目标数据a的系统函数进行拦截;
修改所拦截的系统函数在内存的地址,使其指向所述一具体监控业务对应的业务动态链接库。即调用对应具体监控业务的业务动态链接库,实现对目标进程a的监控。
若所述具体监控业务对应的是目标进程a的数据的获取,则监控进程b通过共享内存与目标进程a进行通信来获取监控数据,具体还需包括:
监控进程b在共享内存中设置目标进程a的进程id和进程名称;
通过上述api拦截,已经实现了调用对应“在目标进程a中对应获取其数据”这一业务的业务动态链接库b1;
因此,业务动态链接库b1的执行便可实现在目标进程a中进行操作,获取其数据,然后置于共享内存中,由监控进程b获取。
监控进程b通过共享内存的方法和注入的目标进程a进行通信,有效的选择需要控制的目标进程a;所述的共享内存是操作系统的一种简单可靠的通过共享内存来达到进程间通信的方法。
s5:恢复所述目标进程为注入前的状态。
在监控完毕后,将获取注入前保存的导入表,恢复目标进程的初始值,以保障导入表的正常使用。
实施例二
请参阅图4,本实施例对应实施例一,提供一种进程模块加载通用的管理系统,包括:
注入模块结1,通过驱动的方式监视目标进程的启动请求,等待注入模块的响应后,并向目标进程注入目的动态链接库;
所述的注入模块结构1具体包括:
目标进程设置模块11,在操作系统ring0层收到进程启动请求后通知注入模块,并等待注入模块的响应,收到响应后通知进程开始加载导入列表中的动态链接库;其中,所述的注入的目标进程,可以是操作系统中任何的进程;所述的注入方法,是通过pe注入的方法注入,通过重新构建进程的导入表,可以注入动态链接库。
目标进程控制模块12,控制进程(即实施例一中的监控进程)通过共享内存的方法和注入的目标进程进行通信,有效的选择需要控制的目标进程;所述的控制进程,包括可以在目标进程加载其他的动态链接库,在目标进程中进行api拦截。
加载模块13,用于注入动态链接库,通过注入模块注入动态链接库后,动态链接库可以根据需要加载其他动态链接库(即业务动态链接库)。
注入模块14,只需要注入一个动态链接库,无需在注入其他动态链接库,这种方法简单通用。
所述系统还包括:
api拦截模块2,通过在ring3层对系统函数的拦截,通过对系统函数的地址的改变,改变成我们所需的函数的地址,实现控制目标进程。
目标进程旧导入表恢复模块3,在ring3层修改了进程的导入表后,为了恢复注入进程的最初的状态,我们需要将注入的时候保存的旧的导入表恢复到注入进程中。
实施例三
本实施例对应实施例二,提供对应的方法步骤:
步骤一、在ring0层驱动a监视目标进程a的启动请求,驱动a向注入模块结构请求,有目标进程启动,等待注入模块结构响应后,驱动a调用注入模块的注入方法向目标进程a注入动态链接库a。通过重新构建进程的导入表方式进行注入,目的是为了在重新构建导入表的过程中可以加入动态链接库a以完成注入。而在注入完成后,即监控结束以后,为了保证进程和导入表的最初完整性,需要调用目标进程旧导入表恢复模块恢复目标进程的初始值,以保障导入表的正常使用。
步骤二、动态链接库a在注入目标进程a之后,动态链接库a根据需要动态加载业务动态链接库b1到bx等模块。(这边把动态链接库a所加载的动态链接库b分成多个模块主要考虑到业务复杂的情况下,不同业务可以在不同的模块来实现。驱动只需要注入一个动态链接库a,动态链接库a再根据配置加载所需要的业务动态链接库)
步骤三、在ring3层业务动态链接库b1到业务动态链接库bx模块用来实现各个业务功能,在业务动态链接库中可以进行系统函数的拦截,实现我们需要的功能,例如业务动态链接库b1可以通过api拦截模块的调用实现进程隐藏等技术。
步骤四、监控进程b通过共享内存与目标进程a进行通信,通过控制模块控制目标进程a的行为,例如监控进程b在共享内存中设置需要隐藏的进程(即目标进程)的进程id和进程名称,在目标进程a中业务员动态链接库b1接下来可在目标进程中进行操作,用户就能对目标进程中的系统函数进行拦截,对窗口、消息等进行拦截过滤,从而实现对其的控制。
实施例二和实施例三实现了一种进程模块加载通用的管理方法及系统,该系统通用性好,灵活性比较高,隐藏性比较好,对不同类型的进程控制比较全面,只需要在ring0简单的注入,便可以在ring3层获取进程进行管控;能够注入所有的系统;兼容多种微软操作系统,包括但是不限于windowsxp、windows7、windows8等;将注入和处理复杂的业务逻辑分开,在操作系统ring3层可以实现复杂的业务逻辑功能,从而对系统的监测越来越全面,可以有效的提高了系统的安全性。
实施例四
本实施例对应实施例一至实施例三,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序在被处理器调用时能够实现实施例一或实施例三的方法对应所包含的所有步骤。
实施例五
为对应上述实施例一至实施例四的一个具体运用场景,如我们需要在win7操作系统的windows任务管理器隐藏进程rdo.exe的名称,使用本发明前,在windows任务管理器我们可以看到进程rdo.exe的名称,使用本发明后,在windows任务管理器我们看不到进程rdo.exe的名称。
综上所述,本发明提供的一种进程监控的方法、存储介质,适用于多种操作系统和对不同的进程控制比较全面,可以有效的防止系统的数据泄露,提高系统的安全性;在对数据安全性要求越来越高的时代,本系统在数据安全领域的应用前景光明。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。