3

我正在尝试使用 Python 解密存储在配置文件 xml 文件中的 Windows 无线密码。我遇到了一篇博客文章,它给出了一个如何使用 Python 的 win32crypt 模块调用 Windows CryptUnprotectData的示例。我的问题是我收到Key not valid for use in specified state错误,需要使用 LocalSystem 运行它。

即使您以管理员身份运行 cmd.exe,也会收到该错误。这里是你需要了解的一点关于 Windows 的地方,作为一个 Windows n00b,我不知道:LocalSystem 帐户不同于管理员权限。为了使用 LocalSystem 帐户运行 cmd.exe,您需要安装一个名为 PsTools 的 Microsoft 软件包。在 PsTools 中有一个名为 PsExec 的程序,它有点像 Un*x 上的 sudo。只需下载上面 Microsoft TechNet 页面底部链接的 zip 文件,然后将其解压缩到可以找到的地方。

要使用 PsExec,请以管理员身份打开 cmd.exe(打开屏幕左下角的开始菜单,在搜索框中键入 cmd.exe,然后按 Ctrl+Shift+Enter 以管理员身份运行)。在打开的用户帐户控制对话框中点击“继续”。在打开的命令外壳中,导航到解压缩 PsTools 的目录。现在运行“psexec.exe /s /i cmd.exe”。在您同意 PsTools 的 EULA 后,PsTools 应该会打开一个以 LocalSystem 运行的新 cmd.exe 外壳窗口。

psexec.exe有没有办法在不使用博客文章状态的情况下解决这个错误?也许使用 CryptoPy 或 PyCrypto?

作为参考,我检索到的加密密码是 Windows Vista 配置文件 xml 文件中的 keyMaterial 密钥。

我正在使用的代码:

import win32crypt
mykey='01000000D08C9DDF.....' # 308 characters long
binout = []
for i in range(len(mykey)):
    if i % 2 == 0:
        binout.append(chr(int(mykey[i:i+2],16)))
pwdHash=''.join(binout)

output =  win32crypt.CryptUnprotectData(pwdHash,None,None,None,0)

print "hex:", "".join(["%02X" % ord(char) for char in output[1]])

print "ascii:", output[1]

提前致谢。

4

1 回答 1

1

如果你需要的话,不要求你的系统管理员给你 LocalSystem 权限吗?

顺便说一句,不要为从十六进制到二进制的复杂转换而烦恼。做就是了:

In [5]: '01000000D08C9DDF'.decode('hex')
Out[5]: '\x01\x00\x00\x00\xd0\x8c\x9d\xdf'
于 2012-09-01T23:49:27.633 回答