attribute winapi visual-c++ mfc

winapi - set console text attribute c++



Obtener el nombre de usuario/contraseƱa del usuario conectado en Windows (10)

¿Hay alguna API para obtener el nombre de usuario y la contraseña actualmente registrados en Windows?

Gracias de antemano.


¡Consideraría un gran defecto de seguridad si eso fuera posible!


Contraseña: No, esto no se retiene por razones de seguridad: se usa y luego se descarta. Podría recuperar la contraseña cifrada para este usuario del registro, con suficientes privilegios, y luego descifrarla utilizando algo parecido a las tablas de arcoiris , pero eso consume mucho tiempo y recursos con los métodos actuales. Mucho mejor para incitar al usuario.

Alternativamente, si desea implementar algún tipo de sistema de "inicio de sesión único" como lo hace Novell, debe hacerlo a través de un GINA (previo a la Vista) o un proveedor de credenciales (Vista), lo que dará como resultado que su código reciba el nombre de usuario. y contraseña al iniciar sesión, el único momento en que la contraseña está disponible.

Para nombre de usuario, obtener el nombre de usuario actual (el que está ejecutando su código) es fácil: la función GetUserName en AdvApi32.dll hace exactamente esto por usted.

Si se está ejecutando como un servicio, debe recordar que no hay un "usuario registrado": hay varios en cualquier momento, como LocalSystem, NetworkService, SYSTEM y otras cuentas, además de las personas reales. Este artículo proporciona algunos ejemplos de código y documentación para hacerlo.


GetUserName le dará el nombre, pero la contraseña que no puede obtener. Ni siquiera es algo que Windows almacene, AFAIK: solo un hash de tu contraseña.

Dependiendo de lo que esté tratando de lograr (puede decirnos un poco más ...) es posible suplantar a un usuario conectado y hacer cosas en su nombre.



No se puede obtener la contraseña de un usuario desde que está encriptada (sin mencionar que es una práctica estándar no almacenar contraseñas en texto plano).

Para obtener el nombre de usuario, puede usar GetUserName o NPGetUser


Puede obtener el nombre de usuario con GetUserName (), pero no puede obtener la contraseña; esto violaría la seguridad para los tontos 101.



re "Herramienta de recuperación de contraseña de red"
Windows (hasta XP) almacena una copia de la contraseña con un cifrado más simple y fácil de descifrar: para conectarse a recursos compartidos de red estilo lanmanager más antiguos. Las herramientas generalmente intentan todas las contraseñas posibles en contra de esto, usando tablas rainbow (versiones codificadas precalucadas de palabras del diccionario) acelera esto.

En XPsp2 / 3 Vista esta característica se elimina. El nuevo cifrado es mucho más difícil de descifrar y requiere muchas horas para probar todos los valores posibles, existen servicios en línea que lo ejecutarán en un gran número de máquinas para brindarle una respuesta rápida por un precio.

Para responder al póster original, generalmente no almacena la contraseña y la compara con lo que el usuario usó. Encripta (realmente pica) la contraseña ingresada y la almacena. Para verificar una contraseña, realice el mismo cifrado en lo que sea que el usuario ingresó y compare eso. En general, es imposible pasar de la forma encriptada a la contraseña real.

EDITAR Sospecho que estás haciendo la pregunta incorrecta aquí: ¿por qué quieres la contraseña, qué intentas verificar y cuándo?


Para los muchos comentaristas que creen que no es posible revelar la contraseña del usuario que está conectado actualmente, vea las contraseñas de descarga de usuarios sin conexión que muestran cómo usar mimikatz para hacer eso:

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


No sé sobre la contraseña de inicio de sesión de Windows ... pero definitivamente puede extraer contraseñas de texto plano del Administrador de credenciales. Por ejemplo, aquí hay un programa para extraer la contraseña de TFS. En la mayoría de los casos, esto es lo mismo que el inicio de sesión de 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); } } }

Lo compilé como una aplicación de "consola" en el vs 2015 con el paquete Nuget TeamFoundation ExtendedClient.