论文部分内容阅读
等级分明的计算机王国
说到结束进程,我们最熟悉的就是某一个程序假死了,我们调出任务管理器,将此程序的进程关掉。这里我们就是用到了Windows任务管理器的进程管理功能。但有的时候我们发现有些进程无法使用任务管理器结束,原因到底是什么?先让我们了解下计算机内关于进程的知识。
计算机运行一个软件会创建一个或几个进程,运行的进程相当于一个容器包含了各种各样的资源,比如有些负责显示窗口,有些负责处理事情。不同的进程都由电脑统一管理,电脑为了方便给进程分配资源会对进程进行分类,好比人类社会封建时代的等级制度制度,崇尚“君要臣死,臣不得不死”。在计算机世界也如此,操作系统是“君”,它控制着电脑的所有资源,进程即“臣”,接受操作系统的领导。而同时大臣之间又有官职,官职越大,权力越高,可以获得电脑的更多的控制权。两个进程管理工具同时存在的时候,谁的权力大就可以结束更多的进程(见图1)。比如前面我们用任务管理器结束假死程序(一般采用TerminateProcess等常规函数结束进程),说明任务管理器有权利对一些常见应用程序进行管理,表现出来的就是可以结束掉它的进程。同时有些进程我们无法使用任务管理器来结束,比如杀毒软件的进程,这显然超出了任务管理器这个小官的职能范围了。
官大一级压死人 刀利钝有不同
在平时我们还会遇到一些难题,例如进程有误,或者发现某个进程是病毒进程,这时要结束进程,却遇到无法结束的提示,显然这个时候是碰上了官职更高的进程了。那怎么办呢?
操作系统为了保护自己的核心数据不被应用程序错误地修改,将程序代码划分在用户模式与内核模式两种模式下运行,用户模式下运行的程序代码是无法轻易篡改系统内核数据的(见图2)。一般情况下,Windows应用程序会使用TerminateProcess这个由系统提供应用程序接口来结束另一个进程。当然,在此之前应用程序会使用另一个系统提供应用程序接口OpenProcess来获得对这个进程的访问权限。如果没有获得足够的访问权限,应用程序将无法进行结束另一个进程的操作。
TerminateProcess、OpenProcess之类的应用程序接口在用户模式执行一部分代码后,最终也会通过系统提供的相应服务进入内核模式对核心数据进行访问。但正所谓,官有官道,民有民路。冰刃、狙剑之类的工具不使用TerminateProcess之类的应用程序接口,而是用自己的驱动程序直接调用内核模式下结束进程的代码。通过这种方式,可以解决修改应用程序接口代码防止结束进程的问题。进程是个大容器,而这个大容器包含的各种数据发生错误以后会将导致进程异常退出。一些进程工具就从这个思路着手变相实现结束进程的目的。比如进程清零(如狙剑)原理相当于将容器里面的资源全部抽干让进程因为没有资源可用从而异常退出,达到结束进程的目的。强制终止则是派一个间谍(远程线程)潜入到目标进程中,然后骗进程说“资源使用完毕可以释放”,进程糊里糊涂将资源释放的同时,进程也被意外的结束。类似的窗口结束进程原理则是通过找到目标程序的窗口,然后发送WM_CLOSE,WM_QUIT之类的退出信息,让进程不明不白地就接受指令自己消失了。
结束进程方法有很多种,我们可以根据自己的需要选择不同的程序来进行处理,比如平时浏览器假死的时候我们可以同任务管理器来结束浏览器的进程简单又方便,而遇到顽固的病毒进程的时候,我们可以选择冰刃,狙剑,XueTr更接近操作系统核心的程序去结束其他进程。
说到结束进程,我们最熟悉的就是某一个程序假死了,我们调出任务管理器,将此程序的进程关掉。这里我们就是用到了Windows任务管理器的进程管理功能。但有的时候我们发现有些进程无法使用任务管理器结束,原因到底是什么?先让我们了解下计算机内关于进程的知识。
计算机运行一个软件会创建一个或几个进程,运行的进程相当于一个容器包含了各种各样的资源,比如有些负责显示窗口,有些负责处理事情。不同的进程都由电脑统一管理,电脑为了方便给进程分配资源会对进程进行分类,好比人类社会封建时代的等级制度制度,崇尚“君要臣死,臣不得不死”。在计算机世界也如此,操作系统是“君”,它控制着电脑的所有资源,进程即“臣”,接受操作系统的领导。而同时大臣之间又有官职,官职越大,权力越高,可以获得电脑的更多的控制权。两个进程管理工具同时存在的时候,谁的权力大就可以结束更多的进程(见图1)。比如前面我们用任务管理器结束假死程序(一般采用TerminateProcess等常规函数结束进程),说明任务管理器有权利对一些常见应用程序进行管理,表现出来的就是可以结束掉它的进程。同时有些进程我们无法使用任务管理器来结束,比如杀毒软件的进程,这显然超出了任务管理器这个小官的职能范围了。
官大一级压死人 刀利钝有不同
在平时我们还会遇到一些难题,例如进程有误,或者发现某个进程是病毒进程,这时要结束进程,却遇到无法结束的提示,显然这个时候是碰上了官职更高的进程了。那怎么办呢?
操作系统为了保护自己的核心数据不被应用程序错误地修改,将程序代码划分在用户模式与内核模式两种模式下运行,用户模式下运行的程序代码是无法轻易篡改系统内核数据的(见图2)。一般情况下,Windows应用程序会使用TerminateProcess这个由系统提供应用程序接口来结束另一个进程。当然,在此之前应用程序会使用另一个系统提供应用程序接口OpenProcess来获得对这个进程的访问权限。如果没有获得足够的访问权限,应用程序将无法进行结束另一个进程的操作。
TerminateProcess、OpenProcess之类的应用程序接口在用户模式执行一部分代码后,最终也会通过系统提供的相应服务进入内核模式对核心数据进行访问。但正所谓,官有官道,民有民路。冰刃、狙剑之类的工具不使用TerminateProcess之类的应用程序接口,而是用自己的驱动程序直接调用内核模式下结束进程的代码。通过这种方式,可以解决修改应用程序接口代码防止结束进程的问题。进程是个大容器,而这个大容器包含的各种数据发生错误以后会将导致进程异常退出。一些进程工具就从这个思路着手变相实现结束进程的目的。比如进程清零(如狙剑)原理相当于将容器里面的资源全部抽干让进程因为没有资源可用从而异常退出,达到结束进程的目的。强制终止则是派一个间谍(远程线程)潜入到目标进程中,然后骗进程说“资源使用完毕可以释放”,进程糊里糊涂将资源释放的同时,进程也被意外的结束。类似的窗口结束进程原理则是通过找到目标程序的窗口,然后发送WM_CLOSE,WM_QUIT之类的退出信息,让进程不明不白地就接受指令自己消失了。
结束进程方法有很多种,我们可以根据自己的需要选择不同的程序来进行处理,比如平时浏览器假死的时候我们可以同任务管理器来结束浏览器的进程简单又方便,而遇到顽固的病毒进程的时候,我们可以选择冰刃,狙剑,XueTr更接近操作系统核心的程序去结束其他进程。