Pergunta

Existe alguma API para se conectado no momento o nome de usuário e senha no Windows?

Agradecemos antecipadamente.

Foi útil?

Solução

Password: Não, isso não é mantida por razões de segurança - ele é usado, em seguida, descartada. Você pode recuperar a senha criptografada para este usuário do registro, dadas privilégios suficientes, então decifrá-lo usando algo como tabelas do arco-íris , mas que é extremamente recurso intensivo e demorado usando métodos atuais. Muito melhor para solicitar ao usuário.

Como alternativa, se você quiser implementar algum tipo de sistema de 'início de sessão única', como Novell faz, você deve fazê-lo, quer através de uma GINA (pré-Vista) ou um provedor de credenciais (Vista), o que resultará em seu ser de código dado o nome de usuário e senha no login, a única vez em que a senha está disponível.

Para nome de usuário, recebendo o atual nome de usuário (o único que está executando o seu código) é fácil:. A função GetUserName no advapi32.dll faz exatamente isso para você

Se você estiver executando como um serviço, você precisa se lembrar que não há um "usuário conectado": existem vários a qualquer momento, como LocalSystem, NetworkService, SYSTEM e outras contas, para além de quaisquer pessoas reais . Este artigo fornece um código e documentação amostra para fazer isso.

Outras dicas

Eu posso considerar uma enorme falha de segurança se isso fosse possível!

Você não pode obter a senha de um usuário desde a sua criptografada (para não mencionar que é uma prática padrão para não armazenar senhas em texto simples).

Para obter o nome de usuário, você pode usar GetUserName ou < a href = "http://msdn.microsoft.com/en-us/library/aa378803(VS.85).aspx" rel = "nofollow noreferrer"> NPGetUser

Nota certeza de como isso é feito, mas função "Network Password Recovery" de http: // www.nirsoft.net/utils/network_password_recovery.html parece para obter a senha de algum cache.

Para muitos comentaristas que acreditam que não é possível revelar a senha do conectado no momento de usuário, consulte Dump senhas em texto plano de usuário conectado (s) que mostra como usar mimikatz para fazer exatamente isso:

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 vai te dar o nome, mas a senha que você não pode ficar. Não é mesmo algo Windows armazena, AFAIK -. Apenas uma hash da sua senha

Dependendo do que você está tentando alcançar (você pode nos contar um pouco mais ..) é possível representar um usuário conectado e fazer coisas em sua / seu nome.

Os detalhes completos de autenticação da API do Windows podem ser encontradas no MSDN: http://msdn.microsoft.com/en-us /library/aa374735(VS.85).aspx

Eu não sei sobre a senha de login do Windows ... mas você pode definitivamente retirar senhas em texto puro a partir do Gerenciador de Credenciais. Por exemplo, aqui é um programa para puxar a senha para TFS. Na maioria dos casos, este é o mesmo que o login do 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);
        }
    }
}

Eu compilei este como app "console" sob vs 2015, com Nuget pacote TeamFoundation ExtendedClient.

Você pode obter o nome de usuário com GetUserName (), mas você não pode obter a senha; isso violaria a segurança for dummies 101.

re "Network Password Recovery" ferramenta
Do Windows (até XP) armazena uma cópia do passwd com um fácil simples para quebrar a criptografia - para ligar à partilhas de rede LanManager estilo mais velhos. As ferramentas generaly tentar todas as senhas possíveis contra isso, usando tabelas rainbow (versões criptografadas precaluted de palavras de dicionário) acelera isto.

Em XPSP2 / 3 Vista este recurso é removido. A nova criptografia é muito mais difícil de quebrar e precisa de muitas horas para tentar todos os valores possíveis, existem serviços online que irá executá-lo em grande número de máquinas para lhe dar uma resposta rápida por um preço.

Para responder o cartaz original - você geralmente não armazenar a senha e compará-lo com o que o typd usuário em Você criptografar (na verdade, de hash) a senha digitada e loja que.. Para verificar uma senha que você executar a mesma criptografia em tudo o que o usuário enetered e comparar isso. Em geral, é impossível ir a partir do formulário de volta criptografado com a senha real.

Editar eu suspeito que você está fazendo a pergunta errada aqui? - Por que você quer a senha, o que você está tentando verificar e quando

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top