admin管理员组文章数量:1516870
从 Windows NT 操作系统开始, svchost.exe 进程就作为一个能够承载多个 Windows 服务的系统进程存在( svchost 在 Windows 2000 就出现了,但是在 NT 3.1 中才支持进程共享), svchost 是服务进程共享的重要组成部分。
(服务进程共享( Shared Service Processes ):
如果每个服务都使用自己的进程来承载服务,那么会造成大量的系统资源浪费,使用共享的进程来承载多个服务,可以有效的减少资源浪费,当然弊端就是如果一个服务导致进程崩溃,那么进程上承载的其他服务也就跟着崩溃退出了。
Windows 系统自带的服务中,有些使用自己的进程,还有一些共享进程,例如 LSASS 进程,承载了安全相关的服务,比如 Security AccountsManager Service , Net Logon Service 等等。)
一个 svchost ( Service Host )进程承载了多个服务,系统中有多个 svchost 的实例同时运行,在 svchost 中承载的服务都被编译为 DLL ,服务的注册表数据中,在“ Parameters ”子项下一定包含一个名叫 ServiceDll 的键,其值为对应的 DLL 文件的路径,例如 Browser 进程的注册表数据路径为 ”HKLM\SYSTEM\CurrentControlSet\Services\Browser” ,在 Parameters 子项中找到 ServiceDll 键值为 ”%SystemRoot%\System32\browser.dll” :
DLL 文件的 ImagePath 格式为 ”%SystemRoot%\System32\svchost.exe -k [service group name]” , service group name 在注册表 ”HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost” 项下面可以找到,该项中包含了很多不同的组,每组的值中包含一组共享进程的服务名:
当一个共享服务要启动的时候,使用相同的参数(服务组名),在 SCM ( Service Control Manager ,服务控制管理器)的数据库中又相同的入口,当第一次启动时,为 SvcHost 进程传入一个参数(服务名),在注册表 ”HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost” 项中查找一个包含这个名字的键,接着,进程通知 SCM 其所承载的所有服务,当其中某个服务再次启动时, SCM 不会再去发起另一个 SvcHost 进程了,而是会向已经启动了的负责承载这个服务的 SvcHost 进程发送一个“ start ”命令, SvcHost 进程会根据注册表中的信息去加载对应服务的 DLL 文件。
根据微软 03 年的统计,共享进程的服务最小的内存占用量约为 150KB ,而独享进程的服务约为 800KB 。
可以通过下面的方式来查看进程中承载了哪些服务:
1. 用命令提示符( Cmd 工具),在 Cmd 中输入 tasklist/svc ,在输出结果中左边的“图像名”列出了系统中正在执行的进程的名字,右侧的“服务”列出了对应进程承载的服务。
2. 对于 WindowsVista 和 Windows7 ,在任务管理器中包含了服务标签,在其中可以查看服务对应的进程 ID 。
3. 在 Windows8 中,任务管理器的界面进一步改进了,可以直接展开 svchost 进程来查看其承载的服务。
安全问题
由于 svchost 作为公共的系统进程来使用,因此一些恶意软件会伪装成 svchost.exe 这个名字来隐藏自己,系统正常的 svchost.exe 的路径在 ”C:\Windows\System32” 下,如果在任务管理其中我们查看到某个 svchost 进程的可执行文件的路径不是这个路径,那么一定是恶意软件了。另外还有一些恶意软件会将服务挂在到真正的 svchost 服务中去执行,这类恶意软件就需要通过杀毒软件来防御了(肯定需要修改注册表的,有了前面的知识,我们就能对于杀毒软件弹出的注册表被修改的提示有更好的判断了)。
参考资料:
版权声明:本文标题:深入解析:svchost如何成为多任务服务进程之首 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/web/1772206809a3272252.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论