深入解析:USB注册表键值中十六进制时间戳的奥秘

本文深入探讨了Windows注册表中USB设备相关的GUID子键下那些看似随机的十六进制值的含义。通过分析Windows SDK中的devpkey.h文件,揭示了这些值(如0x64, 0x65)分别对应设备的安装日期和首次安装日期等属性,为数字取证工作提供了关键的技术依据。

A question about arbitrary values in USB registry keys

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

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

深入挖掘!

如果你进入注册表,在USB注册表键下,你可以找到一系列GUID,它们的子键包含十六进制字符。

对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存储介质的这两个值之间存在差异。Registry Explorer中的USB插件会将两个时间戳并排显示,以便你进行比较。

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