2012-07-12 53 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'