我一直在尝试以编程方式提取Windows 7的Windowslogin密码提示,并且知道可以从registryHKLM SAM SAM Domains Account Users “userkey” UserPasswordHint中的以下位置检索它。但是,我无法弄清楚是否有任何方式找出当前login用户编程的用户名?
debugging崩溃而不会引发AppDomain.UnhandledException的exe文件
如何使用C#代码获取IIS虚拟目录和Web应用程序的物理path?
我如何closures电脑?
使用VisualStyles控件的边框颜色
查看HKLMSAMSAMDomainsAccountUsersNames{username} 。 条目的值将与正确的用户userkey 。
当然记得提示可能不存在。
编辑
哈! 搞定了!
正如你在评论中所说的那样,它不是包含适当值的节点的值,而是该节点的默认条目的类型。 用c#来获得即使不是不可能,也很难,因为这种类型不是标准的。 我有这种方法麻烦,所以我改变了。
实际上,您调用用户userkey的十六进制值是用户SID的最后一部分(该部分称为RID)。 据我所知,每个管理员RID = 500,每个访客= 501,正常用户以1000或1001开头,现在不记得了。
那十六进制是什么?
500 = 0x1f4 501 = 0x1f5 1000= 0x3e9 ...
看起来很熟悉?
所以我们需要做的是获得用户的SID,提取有趣的部分,将其转换为填充的十六进制字符串并检索值。
static void Main(string[] args) { SecurityIdentifier sid = System.Security.Principal.WindowsIdentity.GetCurrent().User; var rid = sid.ToString().Split('-').Last(); var hexValue = int.Parse(rid).ToString("X").PadLeft(8,'0'); RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SAMSAMDomainsAccountUsers"+hexValue); try { var hint = key.GetValue("UserPasswordHint"); //... } catch (Exception) { Console.WriteLine("Could not access value"); } }
小心!
据我所知,如果你没有足够的权限,你不能访问SAM数据库。 以系统用户身份运行(例如使用psexec -s yourbinary.exe )会有所帮助,但会更改当前用户,程序将失败。 所以你需要自己动手做一个有趣的用户。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。