跟踪 Windows 注册表中的更改

Posted

技术标签:

【中文标题】跟踪 Windows 注册表中的更改【英文标题】:Tracking changes in Windows registry 【发布时间】:2010-09-13 18:06:35 【问题描述】:

有没有办法跟踪 Windows 注册表的变化?我想看看在安装各种程序期间对注册表进行了哪些更改。

【问题讨论】:

【参考方案1】:

可以监控特定程序所做的注册表更改。

https://www.nirsoft.net/utils/reg_file_from_application.html

更新:只需下载 NirLauncher(其中包括来自 NirSoft 的所有应用程序)。它是 Windows 工具箱的最佳补充之一。 https://launcher.nirsoft.net/

【讨论】:

对我来说,来自 NirLauncher 包的 RegistryChangesView (nirsoft.net/utils/registry_changes_view.html) 更有用:它创建两个快照(例如安装之前和之后),然后比较它们。结果可以导出到.txt-文件。在我的用例中,它在应用安装后发现 301 注册表更改。同时RegFromApp(附加到msiexec.exe进程)发现只有1个变化。【参考方案2】:

使用 VM 时,我使用以下步骤检查注册表更改:

    使用 7-Zip,打开 vdi/vhd/vmdk 文件并解压缩文件夹 C:\Windows\System32\config 运行OfflineRegistryView将注册表转换为明文 将“配置文件夹”设置为您提取的文件夹 将“基本密钥”设置为HKLM\SYSTEMHKLM\SOFTWARE 将“子键深度”设置为“无限制” 按“开始”按钮

现在使用您最喜欢的差异程序来比较“之前”和“之后”的快照。

【讨论】:

【参考方案3】:

Regshot 在这里值得一提。它扫描并拍摄所有注册表设置的快照,然后您稍后再次运行它以与原始快照进行比较,它会显示所有已更改的键和值。

【讨论】:

【参考方案4】:

Process Monitor 允许您监控各种进程的文件和注册表活动。

【讨论】:

但是怎么做呢?使用类似这样的指令:howtogeek.com/school/sysinternals-pro/lesson5/all ?【参考方案5】:

有几种不同的方法。如果您想自己动手做,WMI 可能是要走的路。 RegistryKeyChangeEvent 及其亲属是值得关注的。也可以通过__InstanceCreationEvent__InstanceDeletionEvent__InstanceModificationEvent 类来监控它。

http://msdn.microsoft.com/en-us/library/aa393040(VS.85).aspx

【讨论】:

【参考方案6】:

关于 WMI 和注册表:

关于注册表的 WMI 事件类共有三个:

RegistryTreeChangeEvent RegistryKeyChangeEvent RegistryValueChangeEvent

Registry Event Classes

但您需要注意这些限制:

使用 RegistryTreeChangeEvent 和 RegistryKeyChangeEvent 无法直接判断哪些值或键实际更改了。为此,您需要保存事件之前的注册表状态并将其与事件之后的状态进行比较。

您不能将这些类与 HKEY_CLASSES_ROOT 或 HKEY_CURRENT_USER 配置单元一起使用。您可以通过创建一个 WMI 类来表示要监视的注册表项来克服这个问题:

Defining a Registry Class With Qualifiers

并将其与 __InstanceOperationEvent 派生类一起使用。

因此使用 WMI 监控注册表是可能的,但还不够完美。优点是可以“实时”监控变化。另一个优势可能是 WMI 永久事件订阅:

Receiving Events at All Times

一种“始终”监控注册表的方法,即。如果您的应用程序未运行,则事件。

【讨论】:

【参考方案7】:

有一个名为 sobek (http://code.google.com/p/sobek-hids/) 的 python-hids 能够监控 SO 的某些部分。它对我的监视文件更改工作正常,虽然文档说它能够监视注册表更改,但对我不起作用。

一款很好的软件,可以轻松播放基于 python 的隐藏。

【讨论】:

【参考方案8】:

PhiLho 顺便提到了AutoRuns,但我认为它值得详细说明。

它不扫描整个注册表,只扫描包含对自动加载的事物(EXE、DLL、驱动程序等)的引用的部分,这可能是您感兴趣的。它不跟踪更改,但可以导出到一个文本文件,这样你就可以在安装前后运行它并执行diff。

【讨论】:

【参考方案9】:

无需额外工具即可直接执行此操作的方法是在安装前将注册表导出到文本文件,然后在安装后将其导出到另一个文件。然后,比较这两个文件。

话虽如此,Sysinternals 工具对此非常有用。

【讨论】:

【参考方案10】:

我同意 Franci 的观点,所有 Sysinternals 实用程序都值得一看(Autoruns 也是必须的),而取代旧的 Filemon 和 Regmon 的 Process Monitor 非常宝贵。

除了您想要的用途之外,查看进程失败的原因(例如尝试访问不存在的文件或注册表项)等非常有用。

【讨论】:

以上是关于跟踪 Windows 注册表中的更改的主要内容,如果未能解决你的问题,请参考以下文章

Windows 不承认通过 .NET 代码更改注册表项

Windows 注册表上的更改不会立即生效

Windows 服务更改/删除注册表值

cmd更改注册表值?

如何在 Windows 上远程更改注册表值

Windows 10 更改系统文字大小