微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从registry中检索Windows密码提示

我一直在尝试以编程方式提取Windows 7的Windowslogin密码提示,并且知道可以从registryHKLM SAM SAM Domains Account Users “userkey” UserPasswordHint中的以下位置检索它。但是,我无法弄清楚是否有任何方式找出当前login用户编程的用户名

debugging崩溃而不会引发AppDomain.UnhandledException的exe文件

如何使用C#代码获取IIS虚拟目录和Web应用程序的物理path?

我如何closures电脑?

找出当前用户用户名 – 当多个用户login时

使用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] 举报,一经查实,本站将立刻删除。

相关推荐