3

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]

前もって感謝します。

4

1 に答える 1

1

必要であれば、システム管理者に LocalSystem 権限を与えるように依頼してはどうでしょうか?

ところで、16 進数から 2 進数への複雑な変換を気にしないでください。ただ行う:

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