跟踪Windows注册表的更改

48

有没有办法跟踪 Windows 注册表的更改?我想在安装各种程序时查看注册表中的更改。

10个回答

46

7
怎样做呢?使用像这个指南一样的说明:http://www.howtogeek.com/school/sysinternals-pro/lesson5/all/。 - Bohdan Kuts

41

1
对我而言,NirLauncher套件中的RegistryChangesView(https://www.nirsoft.net/utils/registry_changes_view.html)更加有用:它创建了两个快照(例如,安装前和安装后),然后进行比较。结果可以导出为`.txt`文件。在我的使用情况下,它发现了301个应用程序安装后的注册表变更。与此同时,附加到`msiexec.exe`进程的`RegFromApp`仅发现1个变更。 - and1er

12
关于WMI和注册表:
有三个与注册表相关的WMI事件类:
- RegistryTreeChangeEvent - RegistryKeyChangeEvent - RegistryValueChangeEvent 注册表事件类 但是你需要注意以下限制:
- 对于RegistryTreeChangeEvent和RegistryKeyChangeEvent,没有直接告诉你哪些值或键实际上发生了变化的方法。要做到这一点,您需要在事件之前保存注册表状态,并将其与事件之后的状态进行比较。 - 您不能使用这些类与HKEY_CLASSES_ROOT或HKEY_CURRENT_USER hives。您可以通过创建一个WMI类来表示要监视的注册表键来克服这个问题: 使用限定符定义注册表类 并将其与__InstanceOperationEvent派生类一起使用。

因此,使用WMI监视注册表是可行的,但并不完美。优点是可以实时监视更改。另一个优点可能是WMI永久事件订阅:

始终接收事件

这是一种在“始终”情况下监视注册表的方法,即使您的应用程序未运行也可以进行监视。


9

一种没有额外工具的简单方法是在安装前将注册表导出到文本文件,然后再将其导出到另一个文件中。然后,比较这两个文件。

话虽如此,Sysinternals 工具也非常适合这个任务。


5

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


2
有一个名为sobek的Python HIDS(http://code.google.com/p/sobek-hids/),它能够监控操作系统的某些部分。对于监视文件更改,它运行良好,尽管文档说它可以监视注册表更改,但我无法使用它。这是一个很好的软件,可以轻松部署基于Python的HIDS。

1
当我使用虚拟机时,我会按照以下步骤检查注册表的更改:
  1. 使用7-Zip打开vdi/vhd/vmdk文件并提取文件夹C:\Windows\System32\config
  2. 运行OfflineRegistryView将注册表转换为纯文本
    • 将“配置文件夹”设置为您提取的文件夹
    • 将“基础键”设置为HKLM\SYSTEMHKLM\SOFTWARE
    • 将“子键深度”设置为“无限制”
    • 点击“Go”按钮
现在使用您喜欢的差异程序比较“之前”和“之后”的快照。

1

有几种不同的方法。如果你想在运行时自己完成,WMI可能是最好的选择。RegistryKeyChangeEvent及其相关类是需要关注的。也许还可以通过__InstanceCreationEvent__InstanceDeletionEvent__InstanceModificationEvent类来监视它。

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


0
我同意Franci的观点,所有Sysinternals实用程序都值得一看(Autoruns也是必备工具),而取代良好老旧的Filemon和Regmon的Process Monitor则尤其宝贵。
除了您想要的用途,还可以非常有用地查看为什么进程失败(例如试图访问不存在的文件或注册表键等)。

0

PhiLho曾经提到过AutoRuns,但我认为它值得详细说明。

它不会扫描整个注册表,只会扫描包含自动加载的引用的部分(如EXE、DLL、驱动程序等),这可能是您感兴趣的内容。它不会跟踪更改,但可以导出到文本文件,因此您可以在安装前后运行它并进行diff比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接