Назад | Перейти на главную страницу

Как узнать дату создания локальной учетной записи пользователя?

Я хотел бы получить дату создания локальной учетной записи пользователя (Win 7, если это имеет значение). Я просмотрел следующие объекты WMI (и, конечно, Google):

Win32_UserAccount Win32_NetworkLoginProfile

Объекты, возвращенные из NetworkLoginProfile имеют время последнего входа в систему, но не дату создания. Проверка Date Created свойство папки профиля просто указывает дату, когда папка была создана, не обязательно сама учетная запись.

Данные находятся в 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 */
  ...
}

В регриппер В криминалистическом проекте есть плагин, сампарс который сообщит дату создания учетной записи.

Инструмент судебной экспертизы, вероятно, не то, что вам нужно, но похоже, что Microsoft не упрощает его.


Исследуя это, мне показалось забавным, что Microsoft MVP не знал, что данные для создания учетной записи хранятся в SAM.. В его пользу, может быть, он не уехал chntpw Утилита, с которой я начал поиск информации о недокументированных структурах SAM.

Единственный способ узнать на самом деле - это иметь аудит управления учетными записями включен на вычисленииr при создании учетной записи. Тогда вы увидите EventID 4720 в журнале событий на дату создания. (В статье говорится об Active Directory, но то же самое относится и к локальным учетным записям; я проверил.)

Без этого самое лучшее, что вы можете сделать, это проверить дату создания в кусте реестра пользователя, ntuser.dat файл, папка профиля пользователя и т. д., но, как упоминалось в комментариях, это верно только в отношении первого входа пользователя в систему, поскольку именно тогда эти вещи создаются.

К несчастью для вас, это случай, «если вы не регистрировали это, значит, такой информации не существует».

Я собирался дать вам сценарий POC PowerShell для извлечения и анализа времени создания, но я понял, что chntpwлогика неверна. Значение, которое он называет временем создания, на самом деле является временем последней установки пароля, хотя эти значения остаются такими же при первоначальном создании учетной записи. Видеть Вот для исчерпывающего описания SAM.

Вторая ссылка Эвана, для samparse, может все исправить. Глядя на это, действительно работает. Если вы посмотрите на его источник Вот, строка 99:

$c_date = $create->get_timestamp();

ты увидишь звонки get_timestamp из Perl Parse::Win32Registry. Я почти уверен, что это время последней записи ключа. Поскольку похоже, что именно этот ключ (HKLM\SAM\SAM\Domains\Account\Users\Names\<USERNAME>) содержит только указатель на соответствующий ключ RID, он не должен измениться после создания, а время последней записи будет равно времени создания.

Если вы хотите использовать больше встроенных инструментов, вот серия статей Scripting Guy, объясняющих, как с помощью PowerShell:

Использование PowerShell для доступа к отметке времени последнего изменения реестра

Повторное использование кода отметки времени реестра PowerShell

Создание прокси-функции для отображения отметок времени ключа реестра

Использование меток времени ключа реестра через PowerShell

Эта команда в PowerShell должна помочь:

systeminfo | findstr /C:"Install Date"

Перейдите через Мой компьютер к

C: \ Users, и вы увидите все учетные записи пользователей, перечисленные на локальном компьютере. Вы можете щелкнуть правой кнопкой мыши соответствующую учетную запись пользователя и перейти к свойствам, и она покажет вам дату создания, она должна быть такой же, как создание учетной записи пользователя.

Только мои 2 цента