为什么像 sysinternals Autoruns 这样的工具可能不知道启动的位置?

为什么像 sysinternals Autoruns 这样的工具可能不知道启动的位置?

来自自动运行的帮助文件:

注意:在发送电子邮件报告您认为被 Autoruns 忽略的自动启动位置之前,请确保 Autoruns 没有覆盖该位置并验证该位置是否真正起作用。

我知道 Autoruns 本质上是一个已知启动位置的列表,这就是它能够找到它找到的启动程序的方式。我不明白的是:如果某个程序在启动时启动,那么 Windows 必须意识到的该文件需要在启动时运行,还必须知道在哪里启动文件的位置,否则它不可能在启动时运行。那么为什么这样的工具不能在不依赖“已知可能”位置的情况下知道 Windows 中启动文件的位置呢?为什么不是所有位置已知在给定的设备上?

我的问题是“为什么会这样”而不是“我该如何解决这个问题”。我发现很多都是第二种问题,而不是第一种。

答案1

Autoruns 存在的全部原因是,它不只存在一个具有多个可能位置的“启动时运行”功能。相反,启动过程有几个阶段1,从不同种类的东西,都是出于不同的原因,在他们自己的环境中。

例如,驱动程序是要加载到操作系统内核的 .sys 文件;服务是要以特殊方式启动的 .exe 文件;它们的列表的管理方式必须与您放在“启动”文件夹中的应用程序快捷方式完全不同。(更不用说每个用户都有自己的启动文件夹,而服务只有一个全局列表。)

除此之外,Autoruns 中看到的许多地点甚至不是意味着在启动时运行某些东西,而是运行看似不相关的 Windows 组件使用的模块列表,这些组件恰好也在启动期间被调用。

  • 例如,您不会将音频编解码器 .dll 文件视为“启动时运行”的位置 - 除非 Windows 被告知在启动时播放声音并且必须调用该编解码器。
  • MSIE 网络浏览器的工具栏插件不是“启动时运行”的位置 - 但 Windows 资源管理器过去实际上是 MSIE,因此每次打开本地文件夹时该插件也会加载。

因此,有很多方法可以运行 Windows 的不同部分某物在启动过程中的不同时间,没有单一的方法要求 Windows 一次性生成所有列表。Autoruns 只是试图收集大量彼此毫无共同之处的列表(除了它们以某种方式指向某个文件,该文件甚至不一定是 .exe 文件)。

基本上,Autoruns 是一个恶意软件查找器他不仅仅是一名创业经理。

不幸的是,尽管现在 Autoruns 可以在 Microsoft 网站上找到,但它仍然是独立于 Windows 开发的。如果 Windows 中有新位置或功能可用于(或滥用)在启动时启动某些程序,Autoruns 不会自动知道这一点。


1作为“几个阶段”的迂腐旁注,最常用的“shell:startup”位置甚至不在 Windows 启动过程中使用,而是在用户登录– 这甚至可能在操作系统启动完成后数小时或数天发生。

答案2

该程序可能由另一个程序运行。或者可能从计划任务启动。它可能由另一个启动程序加载的 dll 运行。

Autoruns 只能对运行程序的“标准”位置进行分类。如果程序随后由代理程序或其他工具或系统操作启动,则 Autoruns 将一无所知。

本质上 Autoruns 只知道视窗用于启动程序。如果其中一个程序安装了以其他方式启动程序的东西,那么 Autoruns 将一无所知。

相关内容