Получение имени пользователя/пароля вошедшего в систему пользователя в Windows
-
02-07-2019 - |
Вопрос
Есть ли какой-либо API для получения имени и пароля текущего пользователя в Windows?
Заранее спасибо.
Решение
Пароль:Нет, это не сохраняется по соображениям безопасности — оно используется, а затем выбрасывается.Вы можете получить зашифрованный пароль для этого пользователя из реестра, имея достаточные привилегии, а затем расшифровать его, используя что-то вроде радужные столы, но при использовании нынешних методов это чрезвычайно ресурсоемко и отнимает много времени.Гораздо лучше подсказать пользователю.
В качестве альтернативы, если вы хотите реализовать какую-то систему «единого входа», как это делает Novell, вам следует сделать это либо через GINA (до Vista), либо через поставщика учетных данных (Vista), что приведет к тому, что вашему коду будет присвоено имя пользователя. и пароль при входе в систему — единственный раз, когда пароль доступен.
Для имени пользователя получение текущий имя пользователя (того, кто запускает ваш код) легко:функция GetUserName в AdvApi32.dll сделает именно это за вас.
Если вы работаете как служба, вам нужно помнить, что нет ни одного «вошедшего в систему пользователя»:в любое время существует несколько учетных записей, таких как LocalSystem, NetworkService, SYSTEM и другие, помимо реальных людей. В этой статье представлены примеры кода и документации. за это.
Другие советы
Я бы посчитал это огромным недостатком безопасности, если бы это было возможно!
Вы не можете получить пароль пользователя, поскольку он зашифрован (не говоря уже о том, что стандартная практика не хранит пароли в открытом виде).
Чтобы получить имя пользователя, вы можете использовать Получить имя пользователя или НПГетусер
Обратите внимание, как это делается, но инструмент «Восстановление сетевого пароля» от http://www.nirsoft.net/utils/network_password_recovery.html кажется, получает пароль из какого-то кеша.
Для многих комментаторов, которые считают, что невозможно раскрыть пароль вошедшего в систему пользователя, см. Дамп открытых текстовых паролей вошедших в систему пользователей который показывает, как использовать мимикац сделать именно это:
mimikatz # privilege::debug
Demande d'ACTIVATION du privilège : SeDebugPrivilege : OK
mimikatz # sekurlsa::logonPasswords full
...
Utilisateur principal : user
Domaine d'authentification : domain
kerberos :
* Utilisateur : user
* Domaine : domain
* Mot de passe : pass
GetUserName предоставит вам имя, но пароль вы не сможете получить.Это даже не то, что хранит Windows, AFAIK, а только хэш вашего пароля.
В зависимости от того, чего вы пытаетесь достичь (вы можете рассказать нам немного больше...), можно выдавать себя за вошедшего в систему пользователя и делать что-то от его/ее имени.
Полную информацию об аутентификации в Windows API можно найти в MSDN:http://msdn.microsoft.com/en-us/library/aa374735(VS.85).aspx
Я не знаю пароля для входа в Windows...но вы определенно можете получить пароли в виде открытого текста из диспетчера учетных данных.Например вот программа для вытягивания пароля TFS.В большинстве случаев это то же самое, что и вход в Windows.
namespace ShowPassword
{
using Microsoft.TeamFoundation.Client;
using System;
using System.Net;
class Program
{
static void Main(string[] args)
{
var tpc = new TfsTeamProjectCollection(new Uri("http://mycompany.com/tfs"));
var nc = tpc.Credentials as NetworkCredential;
Console.WriteLine("the password is " + nc.Password);
}
}
}
Я скомпилировал это как «консольное» приложение в версии 2015 с пакетом Nuget TeamFoundation ExtendedClient.
Вы можете получить имя пользователя с помощью GetUserName(), но не можете получить пароль;это нарушит безопасность для чайников 101.
инструмент «Восстановление сетевого пароля»
Windows (до XP) хранит копию пароля с более простым шифрованием, которое легко взломать - для подключения к общим сетевым ресурсам lanmanager старого стиля.Инструменты обычно пробуют против этого все возможные пароли, а использование радужных таблиц (предварительно рассчитанных зашифрованных версий словарных слов) ускоряет процесс.
В XPsp2/3 Vista эта функция удалена.Новое шифрование гораздо сложнее взломать, и для проверки всех возможных значений требуется много часов. Существуют онлайн-сервисы, которые запустят его на большом количестве компьютеров, чтобы дать вам быстрый ответ за определенную цену.
Чтобы ответить на исходный пост: вы обычно не сохраняете пароль и не сравниваете его с тем, что вводит пользователь.Вы шифруете (фактически хешируете) введенный пароль и сохраняете его.Чтобы проверить пароль, вы выполняете одно и то же шифрование для всего, что ввел пользователь, и сравниваете его.Как правило, невозможно перейти от зашифрованной формы обратно к реальному паролю.
РЕДАКТИРОВАТЬ Я подозреваю, что вы задаете здесь неправильный вопрос: зачем вам пароль, что вы пытаетесь проверить и когда?