通过注册表查看Windows系统进程启动顺序

按下计算机电源按钮,代码先从BIOS执行,具体如下:

BIOS—>MBR—>活动分区—>Ntoskrnl.exe、HAL—>服务类型为0、1的服务—>会话管理器(smss.exe进程)

1、BIOS:这里面的代码是由其厂商提供,主要是开机时检测计算机硬件。

多数bios厂商和Absolute公司达成协议在bios代码中放置了Absolute公司的防盗追踪软件,国内外安全机构先后多次给出预警,说这款软件存在严重的安全风险,具体链接:

2、服务启动类型为0、1的服务:windows的驱动都是以服务形式存在,服务启动类型定义为5个等级,0、1级别的由操作系统启动,作为操作系统的一部分代码运行;2、3、4级别的则是由服务管理器(services.exe进程)启动;微软对服务启动类型的定义:

通过注册表查看Windows系统进程启动顺序

继续会话管理器(smss.exe进程)之前,可以使用基于ETW的进程监控工具procmon.exe的开机监控功能

3、会话管理器(smss.exe进程):

在监控中看到smss.exe是由进程4创建;

读取3处注册表项:

HKLM\System\CurrentControlSet\Control\Session Manager\BootExecute        定义了Native程序
HKLM\System\CurrentControlSet\Control\Session Manager\SubSystems        决定启动哪些环境子系统进程
HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations        上次系统重启前未完成的重命名工作

创建3个进程;

具体见下图:

通过注册表查看Windows系统进程启动顺序

通过注册表查看Windows系统进程启动顺序

3-1、Native程序:全部使用ntdll.dll中的API编写,先于环境子系统进程(csrss)启动,注册表HKLM\System\CurrentControlSet\Control\Session Manager\BootExecute 处决定了开机时smss.exe负责启动那些native程序(杀毒软件会在此处放置程序清除顽固病毒)

通过注册表查看Windows系统进程启动顺序

3-2、环境子系统进程:

通过注册表查看Windows系统进程启动顺序

发现两个环境子系统posix、windows,其中psxss.exe程序并不存在,就只能启动csrss.exe程序;

windows环境子系统进程(csrss.exe):看名字就知道是很厉害的进程了,不过没见创建什么子进程,或者读取什么关键注册表,所以就略过,等发现了再补上。

3-3、PendingFileRenameOperations:具体见https://blog.csdn.net/singleyellow/article/details/100175816

4、winlogon.exe启动了4个进程:

通过注册表查看Windows系统进程启动顺序

4-1、服务控制管理器(services.exe):他下面一大堆svchost.exe进程,一些远控、窃密病毒最喜欢冒充或者寄生里面;这个进程除了负责服务方面的管理工作,里面还寄生了Eventlog,PlugPlay服务,强行结束该进程,操作系统会关闭或者重启动。关于服务方面的东西可以看这里:https://blog.csdn.net/singleyellow/article/details/80486721

4-2、安全授权LSA(lsass.exe):据说你的登录密码就在这个进程里面,不过有个法国人写了一个xxx的工具运行一遍就可以直接拿到。记得永恒之蓝那个漏洞吧,漏洞出发之后就是使用APC注入到这个进程的。

4-3、登录界面(logoui.exe):就是windows的登录界面啊

4-4、userinit.exe:winlogon.exe进程通过读取HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon下的userinit项完成启动;记不记得ranmit那个蠕虫病毒(到现在互联网上都没有清理干净),它就是通过这个注册表项和userinit.exe并列启动的。

通过注册表查看Windows系统进程启动顺序

5、PE加载器(Explorer.EXE):PE加载器大家都很熟悉了,Run、RunOnce、启动文件夹这些地方的开机启动估计都是由PE加载器启动起来的。

 

最后一个疑问:AppInit_Dlls在启动过程中是如何注入进程的

AppInit_Dlls这个特殊的注册表项:任何使用到User32.dll 的EXE、DLL、OCX等类型的PE文件都会读取这个地方,并且根据约定的规范将这个键值下指向的DLL文件进行加载,加载的方式是调用 LoadLibrary( )函数

具体看图(按时间顺序):

通过注册表查看Windows系统进程启动顺序