Python を使用して、プロファイル xml ファイルに保存されている Windows ワイヤレス パスワードを解読しようとしています。Python の win32crypt モジュールを使用してWindows CryptUnprotectDataを呼び出す方法の例を示すブログ投稿に出くわしました。私の問題は、エラーが発生し、LocalSystem を使用して実行する必要があることです。Key not valid for use in specified state
管理者として cmd.exe を実行しても、このエラーが発生します。ここで、Windows について少し知っておく必要があります。Windows 初心者の私は知りませんでした。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]
前もって感謝します。