我想获得一个本地用户帐户的创builddate(如果重要的话,Win 7)。 我已经看了下面的WMI对象(当然谷歌):
Win32_UserAccount Win32_NetworkLoginProfile
从NetworkLoginProfile返回的对象有最后一次login时间,但不是创builddate。 检查他们的configuration文件文件夹的Date Created属性只是给出了Date Created文件夹的date,不一定是帐户本身。
数据在SAM中,但似乎没有被Microsoft公开logging,我没有find一个官方API来检索它。 我可以看到,查看chntpw实用程序的源代码 ,该值存储在每个帐户的“F”registry项中。 请input源代码
#define USER_F_PATH "\\SAM\\Domains\\Account\\Users\\%08X\\F" struct user_F { ... char t_creation[8]; /* Time of account creation */ ... }
regripper取证项目有一个插件, samparse将报告帐户创builddate。
一个取证工具可能不是你想要的,但是它看起来像微软并不容易。
在研究这个时候,我确实发现微软MVP不知道账户创build数据存储在SAM中是有趣的 。 为了他的利益,也许他并没有离开chntpw工具,这是我开始寻找关于无证SAM结构信息的地方。
真正知道的唯一方法是在帐户创build时在计算机上启用帐户pipe理审计 。 然后,您会在创builddate的事件日志中看到EventID 4720。 (这篇文章说Active Directory,但同样适用于本地帐户;我查了。)
没有这一点,最接近你可以通过检查用户的registryconfiguration单元, ntuser.dat文件,用户configuration文件夹等创builddate,但正如在评论中提到的,这只是关于用户的第一次login准确,因为这是当这些东西被创造。
不幸的是,对于你来说,这是一个“如果你没有login,那么这个信息就不存在”的情况。
我正要给你一个POC PowerShell脚本来提取和parsing创build时间,但是我意识到chntpw的逻辑是不正确的。 它创build时间的值实际上是密码上次设置的时间,尽pipe这些值在创build初始帐户时是相同的。 在这里看到SAM的详尽描述。
埃文的第二个环节,可能是正确的。 看着它实际上做的工作。 如果你从这里看它的来源,第99行:
$c_date = $create->get_timestamp();
你会看到它从Perl的Parse::Win32Registry调用get_timestamp 。 我很确定这实际上是密钥的最后写入时间。 由于看起来特定的键( HKLM\SAM\SAM\Domains\Account\Users\Names\<USERNAME> )只保存一个指向相应的RID键的指针,所以在创build之后它不应该改变,并且最后的写入时间将是相等的到创作时间。
我想坚持使用更多的内置工具,下面是一系列脚本专家文章,解释如何通过PowerShell:
使用PowerShell来访问registry上次修改的时间戳
重用PowerShell注册时间戳代码
创build一个代理函数来显示registry键时间戳
通过PowerShell利用registry键时间戳
这个命令在powershell应该做的伎俩:
systeminfo | findstr /C:"Install Date"
通过我的电脑导航到
C:\ Users,您将看到本地计算机上列出的所有用户帐户。 您可以右键单击相应的用户帐户并转到属性,它会显示一个创build的date,这应该与创build用户帐户
只是我2美分