系统的启动过程




1、              当你按下开机键时,最早是由主板BIOS蕊片中的BIOS程序来执行硬件检测任务的,如果检查过程中发现关键硬件的故障,就会发出特定的响声通知用户,并停止启动。而BIOS程序是哪里来的呢?这是在主板出厂时固化在芯片中的一段程序。




2、              当硬件没有问题时,BIOS程序就会读入硬盘的主引导记录,将下面的任务交给主引导记录代码去完成。而主引导记录又是哪里来的呢?这是在安装操作系统时对磁盘进行分区格式化操作时,写到硬盘中的。如果找不到主引导记录,会出错停止,告诉你这是非法的系统启动盘。




3、              主引导记录代码的工作是读入磁盘主分区的根目录,在里面读出Ntldr文件,并装入内存,然后将控制权交给它。注意看一下,你的硬盘根目录下是不是有个Ntldr文件?这个文件的属性是隐藏、系统,所以查看时要选择查看所有,且不隐藏被保护的系统文件才可看到。这个文件是哪里来的?呵,当然是安装操作系统时拷贝到硬盘上的,下面提到的文件都是在安装操作系统时拷上去的。如果没能找到Ntldr文件,则会停止启动,显示Ntldr 没找到的错误信息。




4、              Ntldr又做了些什么呢?它会将系统由原来的16位实模式切换到32位保护模式或64位长模式。它的工作是读取根目录下的Boot.ini文件,显然引导菜单,在多操作系统的计算机中,可以看到这个菜单。接着它会清屏,并在Win2000下显示一个黑白的进度条,在XP下显示XP的标志图同时显示下面不断滚动的蓝色进度条,提示你它正在加载一些重要的文件。它在加载什么呢?它首先会加载Ntoskrnl.exeHal.dll,如果这两个文件找不到会出错停机,并显示找不到相应文件的信息。接着它读入注册表的SYSTEM键文件,从中找出自动启动的各类驱动程序,这是很关键的,因为有些内核级的木马就是在这时启动的。每加载一个屏幕上的进度条就滚动一下子。中间如果某个驱动出问题,也可能会导至系统蓝屏崩溃。




5、              接下来的工作由Ntoskrnl.exe(或Ntkrnlpa.exe)来进行,这是内核程序,它做的工作实在是太多了,这里就不再细说了。它的最后一步工作就是创建会话管理子系统,也就是我们上面说过的,由System进程创建的Smss.exe进程。




6、              Smss.exe进程负责创建用户模式环境,由用户模式环境向Windows提供可视的窗口界面。




它会运行BootExecute中定义的程序,正常情况下是Autochk,一个检查磁盘的程序。但有些杀毒软件会把自己的程序加到这里,来实现引导时杀毒,如果您的系统安装了江民类的杀毒软件,那么此时就会执行它的引导期杀毒程序,就是进入系统前出现的蓝底蓝字的病毒扫描窗口。




Smss.exe还会执行SessionManager中的文件删除、移动操作,也就是调用APIMoveFileEx并选择重启后移除文件的,就是在这个环节执行了。当前有很多号称可以删除一切文件的安全工具都使用了MoveFileEx来实现文件的删除,但是现在我们可以知道了,它的文件删除是在这个阶段执行的,而这时驱动程序已经加载了,所以用它们来清除驱动级的木马显然是不胜任的。




创建附加的页面文件。




加载Win32k.sys,这个东西又是做什么的呢?这是一个内核模式的系统驱动程序,它负责了窗口的显示、屏幕的输入、鼠标键盘和其它设备的输入及消息的传递等。所以也是由Win32k.sys将显示器的分辩率设置为默认值的,也就是这个时候,咱们的计算机屏幕才真正的细致起来,在此以前都是VGA模式,当然了视频驱动是上面装载驱动程序时就已经加载了的,现在只是起到作用而已。




再然后呢,就是启动我们上面说过的那两个进程了。就是Csrss.exeWinlogon.exe进程。




启动完这两个进程后,Smss.exe就进入了无限的等待,它在等什么呢?它在等它创建的Csrss.exeWinlogon.exe ,等着看这两个进程什么时候死掉,一旦他们中有死掉的,Smss.exe马上罢工,让系统彻底崩溃。(在XP以后Csrss的死亡是由内核使系统崩溃的,而不是Smss.exe),所以千万不要结束系统进程。




Csrss.exe是做什么的呢?它负责的工作是创建或删除进程、线程,控制台与虚拟DOS机的支持等。它到此就开始工作了,不再参于后面的启动过程。但是Winlogon.exe还有很多工作要做呢,我们接下来看看后面的启动过程。




7、              Winlogon.exe是做什么的呢?看它的名字应该看出个大概了吧。是的,它是与登录相关的,但现在还不到显示登录窗口的时候,它还要先启动Services.exeLsass.exe进程,然后读取注册表GinaDLL中标明的DLL,由这个DLL来显示一个登录对话话,也就是我们在进入系统时输入用户名与口令的窗口。




为什么要先启动Lsass.exe呢?因为,这是本地安全认证子系统,负责的就是本机系统的安全,用户名与口令的验证工作是由它来进行的。




还有一个我们上面提到过的进程也是这个时候由Winlogon.exe来启动的,是哪一个呢?就是那个Userinit.exe,这是在用户登录进系统后,Winlogon.exe启动此进程来进行用户初始化。你也可以自己加一个程序与Userinit.exe放在一起,那么,在这个时候Winlogon.exe会将那一位置的所有程序都启动起来。




当然了,相信你也想到了,这个还有那个GinaDLL也就成了木马启动的一个可选位置。




8、              最后,由Winlogon.exe启动的Services.exe开始加载标明为自启动的各个服务,及标明为手动的却是有必要加载的服务(它所做的工作我们在后面细讲)。




9、              Userinit.exe呢,它在完成用户初始化后,就启动了Explorer.exe,并功成身退。




10、           最后,Explorer.exe就成了我们的服务员,等待在那里静候我们的指令,听从我们的吩咐,进行相关程序的启动与功能的处理。





看完系统的启动过程后,我们再回过头去看那个进程图,是不是明白了很多呢?除掉系统启动环节中启动的进程外,我们再看其它的进程,注意看一下儿,剩余的进程是不是都是由Services.exe 或 Explorer.exe中的一个启动的。




Explorer.exe是系统的Shell程序,响应用户的请求,并执行对应的程序的工作就是由它来完成的,比如上面我们说过的,您想画图时,将画图程序启动起来的就是这个程序。你想上网时,将浏览器启动起来的也是它。当然了,一些用户的自动任务也是由它来完成启动过程的。(这些我们将在下面的自启动程序一章中详细讲解)




Services.exe是系统的服务控制管理器,由它启动的进程称为“服务”,是一组特殊的进程。此类进程是开机自动运行的,不依赖于用户的交互,说白了就是不用您管,它自己就会运行并且开始自己的工作,工作过程也无须您的干预。




说到这里,您可能会想,这不就是木马所需要的么?不错,有很多木马是以服务进程的形式存在的。那我们可以管理这些服务吗?答案是肯定的,我们的计算机,我们当然有权力管理了。看下面的图03-3












在桌面上“我的电脑”上面按右键,选择“管理”就可以打开如上图所示的窗口。依次选择:服务与应用程序----à服务 就可以看到上图右侧的服务列表。




最左侧的一列是服务的名称,需要注意的是这里列出的并非是对应的程序文件的名称,而仅仅是服务本身的名称。那我们又怎么知道这个服务对应的是哪个程序文件呢?如果我们想停止这个服务,并删除对应的程序文件,我们应该怎么做呢?




再看下图03-4








在某一个服务上面按鼠标右键,选择“属性”,就可以打开此服务对应的属性页面,如上图所示。在这里,我们可以看到一些有用的信息,并对此服务进行启动、停止、禁用等操作。




       最上面的是服务名称,第二列是显示名称,第三列是关于服务的描述,也就是这个服务是做什么用的。当然了,我们不能迷信这里的描述,因为木马可以自行设定这个描述。再下面就是可执行文件的路径,也就是对应的进程与程序文件。这时我们再返回头去看03-2那个图,看一看进程PID968的进程是不是就是这个“svchost.exe –k netsvcs” 进程呢?




       这时再注意一下,又会发现问题,首先,在03-2图中,Services.exe启动的服务一共是7个,而在图03-03中,已经启动的服务却有很多,远不止7个,再挨个儿的查看每个服务的属性,又会发现,有很多服务名称虽然不同,但对应的可执行文件路径(进程)都是一样的,都是“svchost.exe –k netsvcs”进程,这又是咋回事呢?这里我们要解释一下Svchost.exe这个进程了,这是一个特殊的进程。




       从图03-1中我们可以看到名字为“SVCHOST.EXE”进程一共是五个,我们没办法区分它们有什么不同。而在图03-2中,我们再查看这五个Svchost.exe进程,却可以从参数上来区分它们了,虽然进程名字相同,但它们的参数却各不相同。对了,这就是区分他们的方法了,Svchost.exe是一个服务的宿主程序或者叫容器程序,它的里面是一组服务,而参数就标明了这一组服务的类型。如果英文不是太差,那么从它的参数上就可以看明白这一组服务是做什么用的了。

--------------------------------------------------------------------------------------
本文转自狙剑作者的blog----MuseHero.blog.tianya.cn

Identify the aspects of your application that vary and separate them from what stays the same.