1

パスワードで保護されたzipファイルを解読しようとする非常に単純なブルートフォーサーを作成しようとしています。ファイルのパスワードは「red」です。

import zipfile;
zfile = zipfile.ZipFile('password_archive.zip')

words = open('/usr/share/dict/words')
for word in words.readlines():
    try:
        password = word.strip('/n')
        zfile.extractall(pwd=password)
        print "Password found: "+ password
        exit(0)
    except Exception, e:
        print e

コンソール:

('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
('Bad password for file', <zipfile.ZipInfo object at 0x1004ca500>)
Password found: Abasgi

ここで何が起こっているのかよくわかりません。Abasgi は正しいパスワードではありませんが、スクリプトは間違ったパスワードで失敗したようで、正しいパスワードを見つけたようです。ループ内の正しい場所にパスワード変数を設定したと思います。

4

1 に答える 1

4

変更する必要があります:

password = word.strip('/n')

に:

password = word.strip("\n")

ただし、次のようにすることもできます。

password = word.strip()

ストリップのドキュメントを参照してください:

先頭と末尾の文字が削除された文字列のコピーを返します。chars が省略されているか None の場合、空白文字は削除されます。None 以外の場合、chars は文字列でなければなりません。文字列内の文字は、このメソッドが呼び出された文字列の両端から削除されます。

そして、それredがあなたの単語リストRedにあることを確認してください。私のものだったので、追加する必要がありました:

zfile.extractall(pwd=password.lower())

これらの変更の後、すべてうまくいくようです:

import zipfile
zfile = zipfile.ZipFile("file.zip")

words = open("/usr/share/dict/words")
for word in words.readlines():
     try:
        password = word.strip("\n")
        zfile.extractall(pwd=password.lower())
        print "Password found: "+ password
        exit(0)
     except Exception, e:
        pass
于 2014-07-20T09:06:57.987 に答える