如何查找本地用户帐户的创建日期?

如何查找本地用户帐户的创建日期?

我想获取本地用户帐户的创建日期(如果重要的话,是 Win 7)。我查看了以下 WMI 对象(当然还有 Google):

Win32_UserAccount Win32_NetworkLoginProfile

返回的对象NetworkLoginProfile有上次登录时间,但没有创建日期。检查Date Created其配置文件文件夹的属性仅给出创建日期文件夹创建了该帐户,而不一定创建了帐户本身。

答案1

这些数据在 SAM 中,但微软似乎没有公开记录这些数据,而且我也没有找到官方 API 来检索这些数据。我可以看到,chntpw实用程序的源代码该值存储在每个帐户的“F”注册表项中。源代码如下:

#define USER_F_PATH "\\SAM\\Domains\\Account\\Users\\%08X\\F"

struct user_F {
  ...
  char t_creation[8]; /* Time of account creation */
  ...
}

再夹持器取证项目有一个插件,桑帕斯这将报告帐户的创建日期。

取证工具可能不是您想要的,但看起来微软并没有让它变得简单。


在研究这个问题时,我发现一个有趣的现象:Microsoft MVP 不知道帐户创建数据存储在 SAM 中对他有利的可能是他没有离开这个chntpw实用程序,而这正是我开始搜索有关未记录的 SAM 结构的信息的地方。

答案2

唯一真正知道的方法是在计算上启用帐户管理审计r 帐户创建时。然后,您会在创建日期的事件日志中看到 EventID 4720。(文章中说的是 Active Directory,但同样适用于本地帐户;我检查过了。)

如果没有这个,您最接近的方法就是检查用户注册表配置单元、ntuser.dat文件、用户配置文件夹等的创建日期,但正如评论中提到的,这只对于用户首次登录是准确的,因为那是创建这些东西的时间。

不幸的是,这是一个“如果您没有记录,那么该信息就不存在”的情况。

答案3

我原本打算给你一个 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 进行操作:

使用 PowerShell 访问注册表上次修改时间戳

重用 PowerShell 注册表时间戳代码

创建代理函数来显示注册表项时间戳

通过 PowerShell 利用注册表项时间戳

答案4

通过“我的电脑”导航至

C:\Users,您将看到本地计算机上列出的所有用户帐户。您可以右键单击相应的用户帐户并转到属性,它将显示创建日期,这应该与用户帐户的创建日期相同

仅代表我个人观点

相关内容