在我使用的某台计算机上,我注意到每次我重新启动它时,它都会恢复所有更改,包括文档。经过一番查找,我发现这是因为某个名为 Toolwiz Time Freeze 的工具。它要求我输入密码才能禁用它,但我没有密码。我尝试手动卸载它,方法是删除所有文件,在 Windows 设置中关闭程序的自动启动并停止与其相关的所有进程。我用我知道的所有方法清除了该程序。完成所有这些后,我创建了一个空文件并重新启动了计算机。启动后,我注意到它删除了该文件并完全恢复了该工具。这让我不禁想问自己它是如何工作的。为什么即使从硬盘驱动器中完全清除它后它仍然存在于系统中?它利用了 Windows 的哪些功能?
答案1
我强烈怀疑程序会以同样的方式恢复自身,就像恢复所有其他更改一样:不允许删除发生首先。
只要程序处于活动状态,您就无法直接在实际文件系统上工作 - 您的所有更改(无论是创建还是删除)都以“覆盖”的形式记录在系统的其他位置(在内存中或系统驱动器上的隐藏位置),而“基本”系统始终保持完整。即使您尝试删除程序本身,它也仅保存在覆盖中。
重新启动后,覆盖层将被丢弃,并从原始基础开始新的覆盖层,这实际上从未丢失您“删除”的任何文件和注册表项。(这有点类似于虚拟机快照,只是在操作系统内部实现。)
即使“删除”程序本身也只会在覆盖层中记录删除,对基本系统没有影响。官方卸载程序可能会通过请求覆盖驱动程序自行禁用来工作;如果您需要绕过此操作,则需要删除该程序外部(例如,通过 WinPE 禁用驱动程序或使用 Linux liveCD 删除文件)。
据记载Windows SteadyState以前是这样工作的;我不确定 Deep Freeze 等第三方工具是否使用相同的方法,但很有可能,因为它可以实现非常快速的“恢复”(程序不需要恢复任何东西,它只需要删除覆盖)。
SteadyState 使用了 Windows 中集成的“Windows 磁盘保护”功能。我不知道第三方程序是否使用 WDP,但更有可能的是它们通过自定义过滤驱动程序实现相同的功能,因为 WDP 现在似乎不再受支持。
Linux 也有类似的 overlayfs/unionfs/aufs 特殊文件系统。几乎所有 Linux“LiveCD”都使用 overlayfs 作为其根文件系统(/
),方法是将 CD/USB 中的只读 SquashFS 基础映像与内存覆盖相结合 - 如果您使用 LiveCD 的“持久性”功能,则只会导致覆盖存储在 USB 棒上的单独映像中,同时仍使用相同的只读基础。