Получение имени пользователя/пароля пользователя в Windows
есть ли API для получения текущего имени пользователя и пароля в Windows?
заранее спасибо.
10 ответов
пароль: Нет, это не сохраняется по соображениям безопасности - он используется, а затем выбраковывают. Вы можете получить зашифрованный пароль для этого пользователя из реестра с достаточными привилегиями, а затем расшифровать его, используя что-то вроде радужные таблицы, но это чрезвычайно ресурсоемкое и трудоемкое использование текущих методов. Гораздо лучше подсказать пользователю.
кроме того, если вы хотите реализовать какую-то систему "единого входа", как это делает Novell, вы следует сделать это с помощью GINA (pre-Vista) или поставщика учетных данных (Vista), что приведет к тому, что ваш код получит имя пользователя и пароль при входе в систему, единственное время, когда пароль доступен.
для имени пользователя, получение настоящее имя пользователя (тот, кто работает с вашим кодом) легко: функция GetUserName в AdvApi32.ДЛЛ делает именно это для вас.
Если вы работаете как Служба, вам нужно помнить, что нет никого " вошедшего в систему пользователя": есть несколько в любое время, такие как LocalSystem, NetworkService, SYSTEM и другие учетные записи, в дополнение к любым фактическим людям. в этой статье приведен пример кода и документации для этого.
вы не можете получить пароль пользователя, так как он зашифрован (не говоря уже о том, что его стандартная практика не хранить пароли в открытом тексте).
для получения имени пользователя, вы можете использовать GetUserName или NPGetUser
обратите внимание, как это делается, но инструмент "восстановление сетевого пароля" изhttp://www.nirsoft.net/utils/network_password_recovery.html Кажется, получить пароль от некоторого кэша.
для многих комментаторов, которые считают, что невозможно раскрыть пароль текущего зарегистрированного пользователя, см. дамп пароли открытого текста вошедшего в систему пользователя(ов) который показывает, как использовать mimikatz для этого:
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-только хэш вашего пароля.
в зависимости от того, чего вы пытаетесь достичь (вы можете рассказать нам немного больше..) вполне возможно выдать себя за зарегистрированного пользователя и делать от его имени.
полную информацию об аутентификации в API Windows можно найти на 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);
}
}
}
я скомпилировал это как" консольное " приложение под vs 2015 с пакетом NuGet TeamFoundation ExtendedClient.
вы можете получить имя пользователя с помощью GetUserName (), но вы не можете получить пароль; это нарушит безопасность для чайников 101.
re" восстановление сетевого пароля " инструмент
Windows (до XP) хранит копию passwd с более простым шифрованием - для подключения к старым сетевым ресурсам lanmanager стиля.
Инструменты в целом попробовать все возможные пароли против этого, используя радужные таблицы(предварительно зашифрованные версии словаря слов) ускоряет это.
в Xpsp2 / 3 Vista эта функция удалена. Новое шифрование намного сложнее взломать и требует много часов, чтобы попробовать все возможное значения, есть онлайн сервисы, которые будут работать на большом количестве машин, чтобы дать вам быстрый ответ по цене.
чтобы ответить на оригинальный плакат-вы обычно не храните пароль и не сравниваете его с тем, что пользователь набирает. Вы шифруете (фактически хэш) введенный пароль и сохраняете его. Чтобы проверить пароль, вы выполняете одно и то же шифрование для любого пользователя и сравниваете это. Как правило, невозможно перейти от зашифрованной формы обратно к реальной пароль:.
редактировать Я подозреваю, что вы задаете неправильный вопрос здесь - зачем вам нужен пароль, что вы пытаетесь проверить и когда?