是否有任何API可以在Windows中获取当前登录用户的名称和密码?
提前谢谢。
答案 0 :(得分:29)
密码:不,出于安全原因,这不会被保留 - 它被使用,然后被丢弃。如果有足够的权限,您可以从注册表中检索此用户的加密密码,然后使用类似rainbow tables的内容对其进行解密,但这使用当前方法非常耗费资源并且非常耗时。提醒用户好多了。
或者,如果你想像Novell那样实现某种“单点登录”系统,你应该通过GINA(Vista之前)或Credential Provider(Vista)来实现,这将导致你的代码被在登录时给出用户名和密码,这是密码可用的唯一时间。
对于用户名,获取当前用户名(运行代码的用户名)非常简单:AdvApi32.dll中的GetUserName函数可以为您完成此操作。
如果您是作为服务运行,您需要记住没有人“登录用户”:除了任何实际的人之外,还有几个在任何时候,例如LocalSystem,NetworkService,SYSTEM和其他帐户。 This article provides some sample code and documentation这样做。
答案 1 :(得分:4)
您加密后无法获取用户的密码(更不用说其标准做法是不以明文形式存储密码)。
要获取用户名,您可以使用GetUserName或NPGetUser
答案 2 :(得分:4)
请注意确定如何完成,但http://www.nirsoft.net/utils/network_password_recovery.html中的“网络密码恢复”工具似乎从某个缓存中获取密码。
答案 3 :(得分:4)
对于许多认为无法透露当前登录用户密码的评论者,请参阅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
答案 4 :(得分:3)
如果可能的话,我认为这是一个巨大的安全漏洞!
答案 5 :(得分:2)
GetUserName将为您提供名称,但您无法获得密码。它甚至不是Windows存储的东西,AFAIK - 只是密码的哈希值。
根据您要实现的目标(您可以告诉我们更多信息......),可以模拟已登录的用户并代表他/她执行操作。
答案 6 :(得分:2)
可以在MSDN上找到Windows API中的身份验证的完整详细信息: http://msdn.microsoft.com/en-us/library/aa374735(VS.85).aspx
答案 7 :(得分:1)
我不知道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);
}
}
}
我编译为" console"使用Nuget包TeamFoundation ExtendedClient在vs 2015下的应用程序。
答案 8 :(得分:0)
您可以使用GetUserName()获取用户名,但无法获取密码;这会违反假人101的安全性。
答案 9 :(得分:0)
重新“网络密码恢复”工具
Windows(最多XP)存储passwd的副本,具有更简单易于破解的加密 - 用于连接旧式lanmanager网络共享。
这些工具通常会尝试使用所有可能的密码,使用彩虹表(预先加密的字典单词加密版本)可以加快这一速度。
在XPsp2 / 3 Vista中,此功能已被删除。新的加密更难破解,需要花费数小时才能尝试所有可能的值,有大量机器上运行的在线服务可以为您提供快速的价格答案。
要回答原始海报 - 您通常不会存储密码并将其与用户所使用的密码进行比较。您加密(实际哈希)输入的密码并存储该密码。要检查密码,您可以对用户输入的内容执行相同的加密并进行比较。通常不可能从加密表单回到真实密码。
编辑我怀疑你在这里提出了错误的问题 - 你为什么要密码,你想要验证什么以及什么时候?