Получение подсказки пароля 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) помогает, но меняет текущего пользователя, и программа не работает. Таким образом, вы должны решить самостоятельно, как запустить его для интересного пользователя.

Другие вопросы по тегам