Answers:
数据在SAM中,但Microsoft似乎未公开记录它,而且我也没有找到官方的API来检索它。我可以看到,查看该chntpw
实用程序的源代码,该值存储在每个帐户的“ F”注册表项中。查看源代码:
#define USER_F_PATH "\\SAM\\Domains\\Account\\Users\\%08X\\F"
struct user_F {
...
char t_creation[8]; /* Time of account creation */
...
}
该regripper取证项目有一个插件,samparse将报告该帐户的创建日期。
取证工具可能不是您想要的,但看起来Microsoft并不容易。
在研究此问题时,我发现Microsoft MVP不知道帐户创建数据存储在SAM中很有趣。为了他的利益,他可能并没有离开该chntpw
实用程序,在这里我开始搜索有关未记录的SAM结构的信息。
真正知道的唯一方法是在创建帐户时在计算机上启用帐户管理审核。然后,您会在创建日期在事件日志中看到EventID 4720。(文章说的是Active Directory,但同样适用于本地帐户;我检查过。)
否则,您可以通过检查用户的注册表配置单元,ntuser.dat
文件,用户配置文件文件夹等上的创建日期来找到最接近的结果,但是正如注释中所提到的,这仅对于用户的首次登录是准确的,因为那时被创建。
对于您来说不幸的是,这是“如果您不登录,则该信息不存在”的情况。
我正准备给您一个POC PowerShell脚本来提取和解析创建时间,但是我意识到chntpw
的逻辑是不正确的。它称为创建时间的值实际上是上次设置的密码,尽管这些值在初始帐户创建时是相同的。有关SAM的详尽说明,请参见此处。
埃文(Evan)的第二个链接samparse
可能正确。看它实际上是可行的。如果在这里查看其来源,第99行:
$c_date = $create->get_timestamp();
您会看到get_timestamp
来自Perl的调用Parse::Win32Registry
。我很确定这实际上是密钥的最后写入时间。由于特定键(HKLM\SAM\SAM\Domains\Account\Users\Names\<USERNAME>
)似乎仅持有指向相应RID键的指针,因此创建后不应更改它,并且上一次写入时间将等于创建时间。
我想使用更多内置工具,这是一系列脚本专家的文章,说明如何通过PowerShell:
通过“我的电脑”导航至
C:\ Users,您将看到本地计算机上列出的所有用户帐户。您可以右键单击相应的用户帐户,然后转到属性,它将显示创建日期,该日期应与用户帐户的创建日期相同
就是我的2美分