揭秘USB注册表键中神秘十六进制值:Windows设备安装时间戳解析

本文探讨了Windows注册表中USB设备连接时间戳记录的十六进制值(如0x64, 0x65)的起源,通过分析Windows SDK中的devpkey.h文件,揭示了这些值对应FirstInstallDate、InstallDate等设备属性,并对比了它们在取证分析中的实际应用与差异。

最近在堪培拉教授SANS FOR500 Windows取证分析课程时,我被问到一个问题:我们如何在注册表中追踪USB设备的连接时间?

当时我的回答是“它们是任意的”,但我觉得应该更深入地研究一下,而我也确实这么做了,并且很高兴我这样做了!这也是一个很久以前就被讨论过的话题,但我自己从未真正深入研究过。

深入挖掘

如果你进入注册表,在USB注册表键下,你会发现一系列GUID及其子键,其中包含十六进制字符:

![USB注册表键示例]

对GUID进行一些搜索后,我找到了一个有趣的文件,我原先没有意识到它已包含在Windows SDK中分发。我也意识到,如果想弄清楚某个事物的细节,我应该更经常地查看Windows SDK。

认识 devpkey.h

有一个名为devpkey.h的文件,在微软关于驱动程序安装的Learn文档中有所提及。在该文件中,你可以找到关于FirstInstallDateInstallDate的规则(但我找不到关于另外两个属性的更多文档)。经过一番谷歌搜索,我在一些GIST和GitHub仓库(与WINE相关)中找到了该文件的在线版本,但随后意识到我实际上可以在Windows SDK中找到它。

之后就是搜索键名并找到其清晰引用的过程,这些引用描述了命名空间和属性ID。这里可能不太明显的是,命名空间是用逗号而不是短横线来引用的,并且InstallDateFirstInstallDateLastArrivalDateLastRemovalDate的键名是以十进制(100-103)而不是十六进制(0x64-0x67)引用的,就像它们在注册表中那样。

有趣的是,来自Properties键的一些其他子键并没有记录在这个文件中,但至少我找到了这些十六进制值存在的原因。

另一个注意事项

我们通常教人们使用0x64作为首次安装时间。在99.999%的情况下,这与0x65(即USB存储介质实际的FirstInstallDate值)是相同的。这对于其他设备类型可能不成立,但在快速调查中,还没有人见过USB存储介质在这两个值之间存在差异。注册表资源管理器中的USB插件会并排显示这两个时间戳,以便你进行比较。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计