防病毒程序如何在 Windows 启动时启动?

ell*_*t94 64 windows boot anti-virus

在执行一些测试时,我注意到在安装 Avast 并检查我的“运行”注册表项和我的“启动”文件夹后,两个位置都不存在启动条目。考虑到这一点,大多数防病毒程序将自己定位在哪个位置,以便它们在操作系统启动时自动启动?

Dav*_*ill 115

大多数防病毒程序在操作系统启动时从哪里启动?

在安装 Avast 并检查我的“运行”注册表项和我的“启动”文件夹后,这两个位置都不存在启动条目。

您还需要检查许多其他启动位置(见下文)。

许多防病毒程序(包括 Avast)作为 Windows 服务启动,这使它们能够在启动过程的早期启动并运行,从而提供最大程度的保护:

在此处输入图片说明

Avast GUI(包括系统托盘图标)从HKLM\Software\Microsoft\Windows\CurrentVersion\Run以下位置启动:

在此处输入图片说明


有许多位置可用于在启动时运行程序。您需要检查所有这些,直到找到您要查找的程序。

有一些程序可以轻松检查启动位置。

  1. msconfig(启动选项卡):

    在此处输入图片说明

  2. 自动运行Sysinternals的

    在此处输入图片说明

  3. WhatInStartupNirSoft

    在此处输入图片说明

  4. WinPatrol :

    在此处输入图片说明

    笔记:

    • WinPatrol 允许您将程序从“启动程序”移动到“延迟启动”
    • 如果这样做,您可以指定延迟时间。

    在此处输入图片说明] 12


有多少种方法可以让程序在 Windows 启动时运行?

至少有 17 个位置可以启动程序。见下文。


Windows 程序自动启动位置

打开计算机后,以下自动启动位置按以下顺序处理:

  1. Windows 引导设备驱动程序

    • 这些驱动程序首先加载,因为它们是硬件(如存储设备)正常运行所必需的。
    • 引导设备驱动程序将位于以下项下,并具有等于 0 的 Start 值。


    注册表项:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
    
    Run Code Online (Sandbox Code Playgroud)

    Windows 现在将执行各种任务,然后启动 Winlogon 进程。Winlogon 最终会启动服务控制管理器,用于加载设置为自动启动的服务和驱动程序。

  2. Windows 自动启动服务和驱动程序

    • 服务控制管理器 (SCM) 进程 (\Windows\System32\services.exe) 现在将启动所有标记为 Start 值为 2 的服务或驱动程序。


    注册表项:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行一次服务

    • 此密钥旨在在计算机启动时启动服务。
    • 即使在您登录后,这些条目也可以继续运行,但必须在 HKEY_LOCAL_MACHINE...\RunOnce 注册表开始加载其程序之前完成。


    注册表项:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
    
    Run Code Online (Sandbox Code Playgroud)
  4. 运行服务

    • 此密钥也旨在启动服务。
    • 即使在您登录后,这些条目也可以继续运行,但必须在 HKEY_LOCAL_MACHINE...\RunOnce 注册表开始加载其程序之前完成。


    注册表项:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
    
    Run Code Online (Sandbox Code Playgroud)

    Windows 登录提示显示在屏幕上。用户登录后,其余键继续。

  5. 通知

    • 此键用于添加将在特定事件发生时运行的程序。
    • 事件包括登录、注销、启动、关闭、startscreensaver 和 stopscreensaver。
    • 当 Winlogon.exe 生成诸如所列事件之类的事件时,Windows 将在 Notify 注册表项中查找将处理此事件的 DLL。
    • 众所周知,恶意软件会在用户登录计算机时使用此方法加载自身。以这种方式加载允许恶意软件以不容易停止的方式加载。


    注册表项:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
    
    Run Code Online (Sandbox Code Playgroud)
  6. 用户初始化键

    • 此项指定用户登录 Windows 后应立即启动的程序。
    • 该键的默认程序是 C:\windows\system32\userinit.exe。Userinit.exe 是一个程序,可以为您的用户名恢复您的配置文件、字体、颜色等。
    • 可以通过用逗号分隔程序来添加将从该键启动的更多程序。例如:

      HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit =C:\windows\system32\userinit.exe,c:\windows\badprogram.exe。

    这将使这两个程序在您登录时启动,并且是特洛伊木马、劫持者和间谍软件启动的常见位置。注册表项:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
    
    Run Code Online (Sandbox Code Playgroud)
  7. 壳值

    • 此值包含 Userinit.exe 将启动的逗号分隔值列表。
    • Windows 的默认外壳程序是 explorer.exe,尽管已经进行了合法的替换。当 userinit.exe 启动 shell 时,它会首先启动在 HKEY_CURRENT_USER 中找到的 Shell 值。如果此值不存在,它将启动在 HKEY_LOCAL_MACHINE 中找到的值。


    注册表项:

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\\Shell
      HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\\Shell
    
    Run Code Online (Sandbox Code Playgroud)

    现在将处理其余的自动启动位置。

  8. RunOnce 本地机器密钥

    • 这些键主要供安装程序使用。
    • 这些键中的条目启动一次,然后从键中删除。
    • 如果key的值前面有感叹号,则该条目在程序完成后才会被删除,否则在程序运行之前将被删除。这很重要,因为如果不使用感叹号,并且此键中引用的程序无法完成,它将不会再次运行,因为它已被删除。
    • 此键中的所有条目都以未定义的顺序同步启动。
    • 因此,必须先完成此项中的所有程序,然后才能加载 HKEY_LOCAL_MACHINE...\Run、HKEY_CURRENT_USER...\Run、HKEY_CURRENT_USER...\RunOnce 和 Startup Folders 中的任何条目。
    • 在 Windows 2000 和 Windows XP 的安全模式下,RunOnce 键被忽略。Windows NT 3.51 不支持 RunOnce 键。


    注册表项:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
    
    Run Code Online (Sandbox Code Playgroud)
    • 这些是安装自动启动的程序最常见的启动位置。
    • 默认情况下,这些键不会在安全模式下执行。如果您在这些键的值前加上星号 *,它将在安全模式下运行。


    注册表项:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
    
    Run Code Online (Sandbox Code Playgroud)
  9. 所有用户启动文件夹

    • 对于 Windows XP、2000 和 NT,此文件夹用于存放应为将登录到此计算机的所有用户自动启动的程序。


    它通常可以在以下位置找到:

    • 视窗 XP C:\Documents and Settings\All Users\Start Menu\Programs\Startup

    • 视窗NT C:\wont\Profiles\All Users\Start Menu\Programs\Startup

    • 视窗 2000 C:\Documents and Settings\All Users\Start Menu\Programs\Startup

  10. 用户配置文件启动文件夹

    • 将为登录的特定用户执行此文件夹。


    该文件夹通常位于:

    • 赢9X,我 c:\windows\start menu\programs\startup
    • 视窗 XP C:\Documents and Settings\LoginName\Start Menu\Programs\Startup
  11. RunOnce 当前用户密钥

    • 这些键主要供安装程序使用。
    • 这些键中的条目启动一次,然后从键中删除。
    • 如果key的值前面有感叹号,则该条目在程序完成后才会被删除,否则在程序运行之前将被删除。这很重要,因为如果不使用感叹号,并且此键中引用的程序无法完成,它将不会再次运行,因为它已被删除。
    • 在 Windows 2000 和 Windows XP 的安全模式下,RunOnce 键被忽略。
    • Windows NT 3.51 不支持 RunOnce 键。


    注册表项:

    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
    
    Run Code Online (Sandbox Code Playgroud)
  12. 探索者运行

    • 这些密钥通常用于加载程序,作为计算机或用户上设置的策略的一部分。


    注册表项:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
    
    Run Code Online (Sandbox Code Playgroud)
  13. 加载密钥

    • 此键已不再常用,但可用于自动启动程序。


    注册表项:

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\load
    
    Run Code Online (Sandbox Code Playgroud)
  14. AppInit_DLLs

    • 该值对应于通过 AppInit_DLLs 注册表值加载的文件。
    • AppInit_DLLs 注册表值包含将在加载 user32.dll 时加载的 dll 列表。
    • 由于大多数 Windows 可执行文件使用 user32.dll,这意味着 AppInit_DLLs 注册表项中列出的任何 DLL 也将被加载。这使得删除 DLL 变得非常困难,因为它将在多个进程中加载​​,其中一些进程在不引起系统不稳定的情况下无法停止。
    • user32.dll 文件也由系统在您登录时自动启动的进程使用。这意味着在 AppInit_DLLs 值中加载的文件将在 Windows 启动例程中很早就加载,允许 DLL 在我们访问系统之前隐藏自己或保护自己。


    注册表项:

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows
    
    Run Code Online (Sandbox Code Playgroud)

HelpingHand指出,在 64 位计算机上,有 2 个位置:

  • HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows 它引用了 64 位 DLL 和
  • HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Windows 它引用了 32 位 DLL。

64 位进程加载 64 位 DLL,32 位进程加载 32 位 DLL。

  1. ShellServiceObjectDelayLoad

    • 此注册表值以与 Run 键类似的方式包含值。
    • 不同之处在于它不是指向文件本身,而是指向 CLSID 的 InProcServer,它包含有关正在使用的特定 DLL 文件的信息。
    • 当您的计算机启动时,此键下的文件由 Explorer.exe 自动加载。由于 Explorer.exe 是您计算机的外壳程序,因此它始终会启动,因此始终会加载该键下的文件。因此,在任何人为干预发生之前,这些文件会在启动过程的早期加载。


    注册表项:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad
    
    Run Code Online (Sandbox Code Playgroud)
  2. 共享任务调度器

    • 此部分对应于通过 XP、NT、2000 计算机的 SharedTaskScheduler 注册表值加载的文件。
    • 当您启动 Windows 时,此注册表值中的条目会自动运行。


    注册表项:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler
    
    Run Code Online (Sandbox Code Playgroud)
  3. 各种各样的

    以下是程序可以在启动时自动启动的文件:

    1. c:\autoexec.bat
    2. c:\config.sys
    3. windir\wininit.ini - 通常由安装程序用来让文件运行一次然后被删除。
    4. windir\winstart.bat
    5. windir\win.ini - [windows]“加载”
    6. windir\win.ini - [windows] “运行”
    7. windir\system.ini - [引导]“外壳”
    8. windir\system.ini - [引导] "scrnsave.exe"
    9. windir\dosstart.bat - 在 Win95 或 98 中当您在关闭菜单中选择“在 MS-DOS 模式下重新启动”时使用。
    10. windir\system\autoexec.nt
    11. windir\system\config.nt

Windows 程序自动启动位置


免责声明

我与 SysInternals、Nirsoft 或 WinPatrol 没有任何关系,我只是该软件的最终用户。

  • 我不明白为什么他们很难控制 Windows 中的简单事物,比如计算机启动时的启动。感谢您提供有助于在所有位置查找条目的程序! (4认同)
  • @SimonBaars 用于比较 linux 设置文件一直在移动(从发行版到发行版) (2认同)

Hel*_*and 15

安全产品通常有许多组件,例如:

  • 位于内核中的一个或多个文件系统过滤器驱动程序。通常,这些是可以使用命令行工具 fltmc.exe 列出的微型过滤器。您还可以使用 Process Explorer 等工具查看加载到“系统”进程中的驱动程序。他们可能负责过滤文件的打开和关闭,并在允许访问文件之前向用户模式服务发出扫描文件的请求。
  • 可能还有其他驱动程序用于过滤网络流量。旧平台上的 NDIS 过滤器驱动程序,例如 Win 7 和新平台的 WFP 驱动程序,例如 Win 8.1 和更高版本。由于遗留原因,可能安装了组合。
  • 您可以通过运行 services.msc 查看一个或多个用户模式服务。其中之一通常加载病毒数据并执行实际扫描。通常还有其他管理服务,附加功能,例如 Web 控制、设备控制、数据控制、更新等。
  • 可以从注册表(或开始菜单)的“运行”键启动并在登录用户的上下文中运行的其他进程。这些通常提供用户界面并负责用户消息传递。例如恶意软件检测到的消息。

所以简而言之,一个成熟的安全产品通常是用户模式服务、驱动程序和作为登录用户运行的进程的组合。从你的问题来看,听起来你正在看后者。通过运行services.msc,您将看到用户模式服务并运行诸如driverquery.exe,甚至msinfo32 之类的工具,您可以看到驱动程序。用户模式服务和内核驱动程序都在服务控制管理器 (SCM) 数据库中引用:hklm\system\currentcontrolset\services。