Получение подсказки пароля Windows из реестра
Я пытался извлечь подсказку пароля для входа в Windows для Windows 7 программным путем, и я узнал, что ее можно получить из следующего местоположения в реестре HKLM\SAM\SAM\Domains\Account\Users\"userkey"\UserPasswordHint. Однако Я не могу понять, есть ли способ узнать userkey
для текущего вошедшего в систему пользователя программно?
1 ответ
Если вы можете получить текущее имя пользователя, это довольно просто, используя то же дерево реестра.
Заглянуть в HKLM\SAM\SAM\Domains\Account\Users\Names\{username}
, Значение записи будет относиться к надлежащему userkey
,
Конечно, помните, что подсказка может не существовать.
РЕДАКТИРОВАТЬ
Ха! Успешно справился!
Как вы сказали в комментарии, это не значения узла, которые содержат правильное значение, это тип записи по умолчанию для этого узла. Трудно, если не невозможно, получить с помощью C#, поскольку эти типы не являются стандартными. У меня проблемы с этим подходом, поэтому я изменил его.
Шестнадцатеричное значение, которое вы называете userkey
фактически последняя часть пользовательского SID (эта часть называется RID). Насколько я знаю, каждый Администратор имеет RID = 500, каждый Гость = 501, обычные пользователи, начинающиеся с 1000 или 1001, не могут вспомнить прямо сейчас.
И что это в шестнадцатеричном?
500 = 0x1f4
501 = 0x1f5
1000= 0x3e9
...
Выглядит знакомо?
Итак, нам нужно получить этот SID пользователя, извлечь интересную часть, преобразовать его в шестнадцатеричную строку с дополнением и получить значение.
static void Main(string[] args)
{
SecurityIdentifier sid = System.Security.Principal.WindowsIdentity.GetCurrent().User;
var rid = sid.ToString().Split('-').Last();
var hexValue = int.Parse(rid).ToString("X").PadLeft(8, '0');
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SAM\SAM\Domains\Account\Users\"+hexValue);
try
{
var hint = key.GetValue("UserPasswordHint");
//...
}
catch (Exception)
{
Console.WriteLine("Could not access value");
}
}
ОСТОРОЖНО!
Насколько я знаю, вы не можете получить доступ к базе данных SAM, если у вас недостаточно прав. Запуск от имени пользователя системы (например, с psexec -s yourbinary.exe
) помогает, но меняет текущего пользователя, и программа не работает. Таким образом, вы должны решить самостоятельно, как запустить его для интересного пользователя.