1.服务程序目前遇到的问题
(1)服务程序无法监控剪贴板;
(2)服务程序无法设置挂载的磁盘卷标;
(3)服务端发到客户端的thritf消息,调用剪贴板写入时会提示com失败的问题;
2.服务程序的启动顺序
参考文档:https://blog.youkuaiyun.com/singleyellow/article/details/104031963/
电脑开机后,大致的启动顺序是BIOS—>MBR—>活动分区—>Ntoskrnl.exe、HAL—>服务类型为0、1的服务—>会话管理器(smss.exe进程)。
服务程序的启动顺序先后,可能导致某些功能实现时出问题。比如说,系统环境还没有设置好,但是某个服务先启动,导致功能异常。

2.1 会话管理器(smss.exe进程)
smss.exe由进程4(Ntoskrnl.exe)创建。
在使用基于ETW(Event Tracing for Windows事件查询)的进程监控工具procmon.exe的开机监控功能中看到,smss.exe是由进程4创建;

2.1.1 读取3处注册表项
HKLM\System\CurrentControlSet\Control\Session Manager\BootExecute, 定义了Native程序。
HKLM\System\CurrentControlSet\Control\Session Manager\SubSystems, 决定启动哪些环境子系统进程。
HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations 上次系统重启前未完成的重命名工作。
2.1.2 创建3个进程;
![]()
(1)Native程序:全部使用ntdll.dll中的API编写,先于环境子系统进程(csrss)启动,注册表HKLM\System\CurrentControlSet\Control\Session Manager\BootExecute 处决定了开机时smss.exe负责启动那些native程序(杀毒软件会在此处放置程序清除顽固病毒)。

(2)环境子系统进程:

发现两个环境子系统posix、windows,其中psxss.exe程序并不存在,就只能启动csrss.exe程序;(说明注册表关联的路径不存在的exe不会导致系统异常。)
(3)PendingFileRenameOperations(有些电脑上没有这个注册表项)
具体见https://blog.youkuaiyun.com/singleyellow/article/details/100175816
2.2 winlogon启动了4个进程

2.2.1 服务控制管理器(services.exe)
下面一大堆svchost.exe进程,一些远控、窃密病毒最喜欢冒充或者寄生里面;这个进程除了负责服务方面的管理工作,里面还寄生了Eventlog,PlugPlay服务,强行结束该进程,操作系统会关闭或者重启动。关于服务方面的东西可以看这里:https://blog.youkuaiyun.com/singleyellow/article/details/80486721
2.2.1.1 dll类型的服务
该类型的服务,可以通过svchost.exe通过命令行的方式启动。ZwCreateThreadEx函数是比CreateRemoteThread更底层的函数,可以注入dll到服务程序中。ZwCreateThreadEx函数没有在ntdll.dll中声明,所以需要使用GetProcAddress从ntdll.dll中获取该函数的导出地址。

以上几个服务启动的命令行如下:
C:\Windows\System32\svchost.exe -k PeerDist
C:\Windows\system32\svchost.exe -k netsvcs
C:\Windows\System32\svchost.exe -k wsappx –p
参考这个文档:https://blog.youkuaiyun.com/liujiayu2/article/details/76955903
服务启动命令-k netsvcs参数,并不是在告诉svchost.exe启动哪个服务。netsvcs代表的是组,表示这个服务是属于哪个组的。组具体有啥用,大概就是节省资源。正是由于采用了分组机制,系统中才会有多个svchost.exe进程,每个进程代表一个组。svchost.exe进程名字相同,主要是根据服务名字区分具体是哪个服务。
Browser服务来说,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services路径下有一个Browser项,名字和服务名字一样(也就是说,有多少个服务,这个路径下就有多少个项,和服务名称相对应),这个项里里边又有一个Parameters子项,Parameters子项里有一个名字叫ServiceDll的键,它的值就是dll的路径。如图:

2.2.1.2 exe类型的服务
可以通过SC命令或是windows API实现。在服务控制管理器中类似于下面这样。
"C:\Program Files (x86)\Uniontech P2V tool\uos-p2v-service.exe" "-d"
在注册表里面的表现形式是:

2.2.2 安全授权LSA(lsass.exe)
据说你的登录密码就在这个进程里面,不过有个法国人写了一个猕猴桃的工具运行一遍就可以直接拿到。记得永恒之蓝那个漏洞吧,漏洞触发之后就是使用APC注入到这个进程的。
2.2.3 登录界面(logoui.exe)
windows的登录界面。先于PE加载器(Explorer.EXE)启动,所以很多自启动的应用程序没有启动。
2.2.4 userinit.exe
winlogon.exe进程通过读取HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon下的userinit项完成启动;系统刚启动时,如果你调出任务管理器就会看到userinit.exe ,但过一段时间,系统各项加载完毕后,userinit.exe就会自动消失的记。不记得ranmit那个蠕虫 (到现在互联网上都没有清理干净),它就是通过这个注册表项和userinit.exe并行启动的。

2.2.5 PE加载器(Explorer.EXE)
Explorer.EXE为用户提供了图形用户界面(也称为图形壳),简单的说就是用来显示系统的桌面环境,包括桌面图标和文件管理。
注册表项Run、RunOnce、启动文件夹这些地方的开机启动,估计都是由PE加载器启动起来的。其中RunOnce里面的项是由 runonce.exe 调起,runonce.exe 又由 Explorer调起,runonce.exe 的完整级别为High Mandatory Level。
2.2.6 AppInit_Dlls注册表项
AppInit_Dlls这个注册表项,用来全局注入dll模块,该功能可以用来做后门持久化。任何使用到User32.dll 的EXE、DLL、OCX等类型的PE文件都会读取这个地方,并且根据约定的规范将这个键值下指向的DLL文件进行加载,加载的方式是调用 LoadLibrary( )函数。

微软默认阻止用户通过appinit功能去加载未知的dll。不过,可以通过修改注册表键值LoadAppInit_DLLs为1去关闭该功能。将待加载的dll保存在Program Files文件夹,并且将AppInit_DLLs键值修改为待加载dll的路径,即可让所有windows进程都加载该dll。
Enable LoadAppInit_DLLs - 32bit and 64bit:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs - 0x1
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs - 0x1
3.服务启动类型
服务启动类型定义为5个等级,0、1级别的由操作系统启动,windows的驱动都是以服务形式存在,作为操作系统的一部分代码运行;2、3、4级别的则是由服务管理器(services.exe进程)启动;微软对服务启动类型的定义:

· 在打开的注册表中,定位到这个位置:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder

· 在右侧面板中右键单击,执行:新建--字符串值

· 将其命名为List ,如果该值已经存在,可以直接进行修改

· 右键单击该项,然后在右键菜单中,选择修改

· 在数值数据中,输入windows的各项服务,这些服务就是按照从上到下的顺序启动的。然后点击确定按钮。完成设定。

本文详细介绍了Windows启动过程中服务程序的启动顺序,包括会话管理器(smss.exe)的创建及进程、winlogon启动的服务控制管理器(services.exe)等。同时,文章列举了服务程序在启动过程中可能遇到的问题,如剪贴板监控、磁盘卷标设置等。
459

被折叠的 条评论
为什么被折叠?



