Получение имени пользователя/пароля пользователя в 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 эта функция удалена. Новое шифрование намного сложнее взломать и требует много часов, чтобы попробовать все возможное значения, есть онлайн сервисы, которые будут работать на большом количестве машин, чтобы дать вам быстрый ответ по цене.

чтобы ответить на оригинальный плакат-вы обычно не храните пароль и не сравниваете его с тем, что пользователь набирает. Вы шифруете (фактически хэш) введенный пароль и сохраняете его. Чтобы проверить пароль, вы выполняете одно и то же шифрование для любого пользователя и сравниваете это. Как правило, невозможно перейти от зашифрованной формы обратно к реальной пароль:.

редактировать Я подозреваю, что вы задаете неправильный вопрос здесь - зачем вам нужен пароль, что вы пытаетесь проверить и когда?