在进行一些测试时,我注意到在安装 Avast 并检查“运行”注册表项和“启动”文件夹后,启动项在两个位置均不存在。考虑到这一点,大多数防病毒程序位于哪个位置,以便在操作系统启动时自动启动?
答案1
大多数防病毒程序在操作系统启动时从哪里启动?
安装 Avast 并检查我的“运行”注册表项和“启动”文件夹后,发现两个位置都没有启动项。
您需要检查许多其他启动位置(请参阅下文)。
许多防病毒程序(包括 Avast)都是作为 Windows 服务启动的,这使得它们能够在启动过程的早期启动并运行,从而提供最大程度的保护:
Avast GUI(包括系统托盘图标)从以下位置启动HKLM\Software\Microsoft\Windows\CurrentVersion\Run
:
有许多位置可用于在启动时运行程序。您需要检查所有位置,直到找到所需的程序。
有一些程序可以轻松检查启动位置。
在 Windows 中,有多少种方法可以使程序在启动时运行?
至少有 17 个位置可以启动程序。见下文。
Windows 程序自动启动位置
打开计算机后,将按以下顺序处理以下自动启动位置:
Windows 启动设备驱动程序
- 首先加载这些驱动程序,因为它们是存储设备等硬件正常运行所必需的。
- 启动设备驱动程序将位于以下注册表项下,且其起始值等于 0。
注册表项:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
Windows 现在将执行各种任务,然后启动 Winlogon 进程。Winlogon 最终启动服务控制管理器,加载设置为自动启动的服务和驱动程序。
Windows 自动启动服务和驱动程序
- 服务控制管理器 (SCM) 进程 (\Windows\System32\services.exe) 现在将启动任何标记为 Start 值为 2 的服务或驱动程序。
注册表项:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
运行一次服务
- 此键用于在计算机启动时启动服务。
- 这些条目在您登录后也可以继续运行,但必须在 HKEY_LOCAL_MACHINE...\RunOnce 注册表开始加载其程序之前完成。
注册表项:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
运行服务
- 此键也用于启动服务。
- 这些条目在您登录后也可以继续运行,但必须在 HKEY_LOCAL_MACHINE...\RunOnce 注册表开始加载其程序之前完成。
注册表项:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
屏幕上显示 Windows 登录提示。用户登录后,继续按其余键。
通知
- 此键用于添加在特定事件发生时运行的程序。
- 事件包括登录、注销、启动、关机、启动屏幕保护程序和停止屏幕保护程序。
- 当 Winlogon.exe 生成上述事件时,Windows 将在 Notify 注册表项中查找可处理该事件的 DLL。
- 据了解,恶意软件会使用这种方法在用户登录计算机时自行加载。以这种方式加载可使恶意软件程序以一种难以停止的方式加载。
注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
UserInit 键
- 此项指定用户登录 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
壳牌价值
- 该值包含 Userinit.exe 将启动的逗号分隔值的列表。
- Windows 的默认 shell 是 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
现在将处理其余的自动启动位置。
RunOnce 本地机器密钥
- 这些键主要供安装程序使用。
- 这些键中的条目启动一次,然后从键中删除。
- 如果键值前面有感叹号,则该条目在程序完成之后才会被删除,否则将在程序运行之前被删除。这很重要,因为如果不使用感叹号,并且此键中引用的程序无法完成,它将不会再次运行,因为它已被删除。
- 此项中的所有条目均以未定义的顺序同步启动。
- 因此,必须先完成此项中的所有程序,然后才能加载 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
跑步
- 这些是安装自动启动程序的最常见启动位置。
- 默认情况下,这些键不会在安全模式下执行。如果在这些键的值前面加上星号 *,它将在安全模式下运行。
注册表项:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
所有用户启动文件夹
- 对于 Windows XP、2000 和 NT,此文件夹用于存储所有登录此计算机的用户应自动启动的程序。
它通常位于:
Windows XP
C:\Documents and Settings\All Users\Start Menu\Programs\Startup
视窗系统
C:\wont\Profiles\All Users\Start Menu\Programs\Startup
Windows 2000
C:\Documents and Settings\All Users\Start Menu\Programs\Startup
用户配置文件启动文件夹
- 此文件夹将为登录的特定用户执行。
该文件夹通常位于:
- 操作系统
c:\windows\start menu\programs\startup
- Windows XP
C:\Documents and Settings\LoginName\Start Menu\Programs\Startup
RunOnce 当前用户密钥
- 这些键主要供安装程序使用。
- 这些键中的条目启动一次,然后从键中删除。
- 如果键值前面有感叹号,则该条目将在程序完成后才被删除,否则将在程序运行前被删除。这很重要,因为如果不使用感叹号,并且此键中引用的程序无法完成,它将不会再次运行,因为它已被删除。
- 在安全模式下,Windows 2000 和 Windows XP 会忽略 RunOnce 键。
- Windows NT 3.51 不支持 RunOnce 键。
注册表项:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
探索者运行
- 这些键通常用于作为计算机或用户上设置的策略的一部分来加载程序。
注册表项:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
加载键
- 此键不再常用,但可用于自动启动程序。
注册表项:HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\load
AppInit_DLL 库
- 该值对应于通过 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
援助之手指出在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。
ShellServiceObjectDelayLoad
- 此注册表值包含的值与 Run 键的值类似。
- 不同之处在于,它不是指向文件本身,而是指向 CLSID 的 InProcServer,其中包含有关正在使用的特定 DLL 文件的信息。
- 计算机启动时,Explorer.exe 会自动加载此键下的文件。由于 Explorer.exe 是计算机的外壳,因此它会始终启动,从而始终加载此键下的文件。因此,这些文件会在启动过程的早期加载,在发生任何人工干预之前。
注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad
共享任务调度器
- 本节对应于通过 XP、NT、2000 机器的 SharedTaskScheduler 注册表值加载的文件。
- 当您启动 Windows 时,此注册表值中的条目会自动运行。
注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler
各种各样的
以下是程序可以在启动时自动启动的文件:
- 自动执行脚本
- 系统配置目录
- windir\wininit.ini — 通常由安装程序使用,文件运行一次然后被删除。
- windir\启动工具
- windir\win.ini-[windows]“加载”
- windir\win.ini-[windows]“运行”
- windir\system.ini-[启动]“shell”
- windir\system.ini — [启动]“scrnsave.exe”
- windir\dosstart.bat — 在 Win95 或 98 中在关机菜单中选择“以 MS-DOS 模式重新启动”时使用。
- windir\系统\自动执行文件
- windir\系统\配置信息
免责声明
我与 SysInternals、Nirsoft 或 WinPatrol 没有任何关系,我只是该软件的最终用户。
答案2
安全产品通常包含多个组件,例如:
- 位于内核中的一个或多个文件系统过滤驱动程序。通常,这些是可以使用命令行工具 fltmc.exe 列出的微型过滤器。您还可以使用 Process Explorer 等工具查看加载到“系统”进程中的驱动程序。它们可能负责过滤文件的打开和关闭,并在允许访问文件之前向用户模式服务发出扫描文件的请求。
- 可能还有其他驱动程序用于过滤网络流量。旧平台上有 NDIS 过滤驱动器,例如 Win 7,而新平台上有 WFP 驱动程序,例如 Win 8.1 及更高版本。可能由于遗留原因安装了组合。
- 运行 services.msc 即可看到一个或多个用户模式服务。其中一个服务通常加载病毒数据并执行实际扫描。通常还有其他管理服务、附加功能(如 Web 控制、设备控制、数据控制、更新等)。
- 可能从注册表(或开始菜单)的“运行”键启动并在登录用户的上下文中运行的附加进程。这些进程通常提供用户界面并负责处理用户消息。例如检测到恶意软件的消息。
简而言之,成熟的安全产品通常是用户模式服务、驱动程序和以登录用户身份运行的进程的组合。从您的问题来看,您似乎在考虑后者。通过运行 services.msc,您将看到用户模式服务,而运行 driverquery.exe 或 msinfo32 等工具,您将看到驱动程序。用户模式服务和内核驱动程序都在服务控制管理器 (SCM) 的数据库中引用,位于:hklm\system\currentcontrolset\services。