2017-08-31 3 views
0

私は学校プロジェクト用のシンプルなzipファイルパスワードクラッカーに取り組んでいます。パスワードを辞書の単語リストからクラックさせて表示する必要があります。私はそれを実行するたびにファイルを抽出し、何も印刷しません。パスワードを表示するにはどうしたらいいですか?ここに私のコードです。Python 3 Zip Password Cracker

import optparse 
import zipfile 
from threading import Thread 

def extract_zip(zFile, password): 
     try: 
       password = bytes(password.encode('utf-8')) 
       zFile.extractall(pwd=password) 
       print ("[+] Password Found: " + password + '\n') 
     except: 
       pass 

def Main(): 
     parser = optparse.OptionParser("useage &prog "+\ 
         "-f <zipfile> -d <dictionary>") 

     parser.add_option('-f', dest='zname', type='string',\ 
         help='specify zip file') 
     parser.add_option('-d', dest='dname', type='string',\ 
         help='specify dictionary file') 
     (options, arg) = parser.parse_args() 
     if (options.zname == None) | (options.dname == None): 
       print (parser.usage) 
       exit(0) 
     else: 
       zname = options.zname 
       dname = options.dname 

     zFile = zipfile.ZipFile(zname) 
     passFile = open(dname) 

     for line in passFile.readlines(): 
      password = line.strip('\n') 
      t = Thread(target=extract_zip, args=(zFile, password)) 
      t.start() 

if __name__ == '__main__': 
     Main() 
+2

お困りですか? –

+0

[ツアー]、[質問]、[mcve]の順にお読みください。まだ質問はしていないので、あなたの投稿を編集する必要があります。 –

+0

@DaveS質問を追加しました – Vixro

答えて

1

問題は、元のパスワードの代わりにエンコードされたパスワードを印刷しようとしていることです。バイトを文字列に連結することはできません。元のパスワードを印刷してください。bytes()の結果ではありません。

そして、アーカイブからすべてのファイルを抽出する代わりに、testzip()を使用して解読できるかどうかをテストします。しかし、これを行うには、各スレッドに独自のZipFileオブジェクトが必要です。それ以外の場合は、別のスレッドが使用するパスワードを設定します。

def extract_zip(filename, password): 
    with ZipFile(filename) as zFile: 
     try: 
      password_encoded = bytes(password.encode('utf-8')) 
      zFile.setpassword(password_encoded) 
      zFile.testzip() 
      print ("[+] Password Found: " + password + '\n') 
     except: 
      pass 

次にスレッド、ないzFileにファイル名を渡すために、発信者を変更します。

+0

また、実際にファイルを抽出せずにパスワードを与えるようにする方法がありますか?そして、それが見つからないときにパスワードが見つからなかったというメッセージを出力するための機能を追加するにはどうすればいいですか? – Vixro

+0

@Vixroブランケット 'try' /' except'を使うことに注意してください( ' except)は、何らかのエラーが発生しても、それを嚥下するので、トラブルのレシピです。おそらく、エラーの内容を明らかにするコード化されたバイトを印刷しようとすると例外がスローされてしまいましたが、例外をキャッチして渡したために印刷されませんでした。 –

+0

@JoshKarpelだからこそ、私はデバッグ時にエラー印刷を追加するように彼に言いました。 – Barmar