Есть ли какой-либо API для получения имени и пароля пользователя в Windows?Получение имени пользователя/пароля зарегистрированного пользователя в Windows
Заранее спасибо.
Есть ли какой-либо API для получения имени и пароля пользователя в Windows?Получение имени пользователя/пароля зарегистрированного пользователя в Windows
Заранее спасибо.
Пароль: Нет, это не сохраняется по соображениям безопасности - оно используется, а затем отбрасывается. Вы можете получить зашифрованный пароль для этого пользователя из реестра, учитывая достаточные привилегии, а затем расшифровать его, используя что-то вроде rainbow tables, но это чрезвычайно ресурсоемкие и трудоемкие с использованием текущих методов. Гораздо лучше запросить пользователя.
В качестве альтернативы, если вы хотите реализовать какую-то систему «единого входа», как это делает Novell, вы должны сделать это с помощью GINA (pre-Vista) или поставщика учетных данных (Vista), что приведет к вашему коду с указанием имени пользователя и пароля при входе в систему, единственного момента, когда пароль доступен.
Для пользователя, получившего текущее имя пользователя (тот, кто запускает ваш код) легко: функция GetUserName в AdvApi32.dll делает именно это для вас.
Если вы работаете как служба, вам нужно помнить, что ни один «зарегистрированный пользователь» не существует: в любое время есть несколько таких, как LocalSystem, NetworkService, SYSTEM и другие учетные записи, в дополнение к какому-либо фактическому люди. This article provides some sample code and documentation для этого.
Я бы счел это огромным недостатком безопасности, если это было возможно!
Да, это то, о чем я тоже думаю, но хотел дважды проверить, что я ничего не пропустил ... – dennisV 2008-09-22 07:21:56
GetUserName даст вам имя, но пароль вы не сможете получить. Это даже не то, что Windows хранит, AFAIK - только хэш вашего пароля.
В зависимости от того, чего вы пытаетесь достичь (вы можете рассказать нам немного больше), можно выдать себя за личную учетную запись и сделать все от его имени.
Спасибо - вот что я думал. – dennisV 2008-09-22 07:22:35
Вы не можете получить пароль пользователя с момента его зашифрования (не говоря уже о том, что стандартная практика не хранить пароли в виде открытого текста).
Для получения имени пользователя, вы можете использовать GetUserName или NPGetUser
Вы можете получить имя пользователя с GetUserName(), но вы не можете получить пароль; это нарушит безопасность для манекенов 101.
Спасибо - мне нужно будет спросить пользователя. – dennisV 2008-09-22 07:24:42
Обратите внимание, что это делается, но инструмент «Network Password Recovery» от http://www.nirsoft.net/utils/network_password_recovery.html, похоже, получает пароль из некоторого кеша.
Очень интересно - спасибо! – dennisV 2008-09-22 07:35:27
Полная информация о подлинности в Windows API, можно найти на сайте MSDN: http://msdn.microsoft.com/en-us/library/aa374735(VS.85).aspx
повторно «Network Password Recovery» инструмент
для Windows (до XP) хранит копию PASSWD с более простой легко сломать шифрование - для подключения к более старым сетевым ресурсам lanmanager. В общем, инструменты используют все возможные пароли против этого, используя таблицы радуги (предварительные зашифрованные версии словарных слов) ускоряет это.
В XPsp2/3 Vista эта функция удалена. Новое шифрование намного сложнее взломать и требует много часов, чтобы попробовать все возможные значения, есть онлайн-сервисы, которые будут запускать его на большом количестве машин, чтобы дать вам быстрый ответ по цене.
Чтобы ответить на исходный плакат, вы обычно не храните пароль и не сравниваете его с тем, что пользователь вводил. Вы шифруете (фактически хэш) введенный пароль и сохраняете его. Чтобы проверить пароль, вы выполняете одно и то же шифрование на том, что пользователь вводил и сравнивал. Как правило, невозможно перейти от зашифрованной формы к реальному паролю.
EDIT Я подозреваю, что вы задаете здесь неправильный вопрос - почему вы хотите пароль, что вы пытаетесь проверить и когда?
Да, я понимаю. Безопаснее запрашивать пользователя, немного «необычный», поскольку я не видел слишком много приложений, которые это делают. – dennisV 2008-09-22 23:20:39
Для многих комментаторов, которые считают, что это не представляется возможным раскрыть пароль вошедшего в данный момент пользователя, см Dump cleartext passwords of logged in user(s), который показывает, как использовать 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
Я не знать пароль для входа в Windows ... но вы можете определенно вытащить пароли открытого текста из диспетчера учетных данных. Например, вот программа для вытягивания пароля для TFS. В большинстве случаев это то же самое, что и в Windows Login.
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.
Спасибо - я не хочу взломать пароль, я просто хотел сохранить пользователя на один шаг, но так как нет «хорошего» способа сделать это, я просто попрошу пользователя его. – dennisV 2008-09-22 07:34:13