在Windows中获取登录用户的用户名/密码
密码:不,这是因为安全原因而不被保留 - 它被使用,然后被丢弃。您可以从注册表中为该用户检索加密的密码,并给予足够的权限,然后使用类似rainbow tables的密码对其进行解密,但使用当前方法这非常耗费资源和耗时。更好地提示用户。或者,如果您想要像Novell那样实施某种'单点登录'系统,您应该通过GINA(Vista之前)或Credential Provider(Vista)来完成,这将导致您的代码在登录时被授予用户名和密码,只有密码可用。
对于用户名,获取当前用户名(运行代码的用户)很容易:AdvApi32.dll中的GetUserName函数完全适合您。
如果您作为一项服务运行,您需要记住没有一个“登录用户”:除了任何实际的任何时间,任何时候都有几个如LocalSystem,NetworkService,SYSTEM和其他帐户人。 This article provides some sample code and documentation这样做。
GetUserName会为您提供名称,但您无法获得密码。这甚至不是Windows存储的东西,AFAIK - 只是你的密码散列。
根据你想要达到什么(你可以告诉我们更多..)可以模仿登录用户并代表他/她做些什么。
谢谢 - 这就是我的想法。 – dennisV 2008-09-22 07:22:35
请确定它是如何完成的,但http://www.nirsoft.net/utils/network_password_recovery.html的“网络密码恢复”工具似乎从某个缓存中获取密码。
非常有趣 - 谢谢! – dennisV 2008-09-22 07:35:27
重新“网络密码恢复”工具
的Windows(截至XP)存储在passwd的一个简单方便的拷贝,打破加密 - 用于连接到旧式lanmanager网络共享。 这些工具通常会尝试使用所有可能的密码,使用彩虹表(预先加密的字典词语加密版本)加快速度。
在XPsp2/3 Vista中,此功能已删除。新的加密技术很难破解,需要花费很长时间来尝试所有可能的值,还有一些在线服务可以在大量机器上运行,以便为您提供价格的快速回答。
要回答原始海报 - 通常不会存储密码并将其与用户输入的内容进行比较。您对输入的密码进行加密(实际上是散列)并将其存储。要检查密码,您可以对用户执行的任何操作执行相同的加密,然后进行比较。通常不可能从加密表单返回到真实密码。
编辑我怀疑你在问这里的错误问题 - 你为什么要密码,你想要验证什么,以及什么时候?
是的,我明白了。提示用户比较“不寻常”更安全,因为我没有看到太多的应用程序这样做。 – 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登录相同。
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编译为“console”应用程序。
谢谢 - 我不想破解密码,我只想保存用户一步,但由于没有“好”的方法来做到这一点,我只是提示用户。 – dennisV 2008-09-22 07:34:13