2012-07-12 191 views
3

我试图使用Python解密存储在配置文件xml文件中的Windows无线密码。我碰到一个blog post举例说明了如何使用Python的win32crypt模块调用Windows CryptUnprotectData。我的问题是我得到了Key not valid for use in specified state错误,需要使用LocalSystem运行它。使用Python解密Windows无线密码

即使您以管理员身份运行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应打开一个新的cmd.exe shell窗口 作为LocalSystem运行。

有没有办法绕过这个错误,而不使用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] 

在此先感谢。

回答

1

不要求您的系统管理员给您本地系统权限,如果这是您所需要的?

顺便说一句,不要打扰从十六进制到二进制的复杂转换。只要:

In [5]: '01000000D08C9DDF'.decode('hex') 
Out[5]: '\x01\x00\x00\x00\xd0\x8c\x9d\xdf'