前提
エラーなしで実行が止まってしまいます。
pythonの勉強を兼ねてプログラムを書いている中で興味があったので、ブルートフォースアッタクについてインターネットで調べながら書いて解読しているので、完璧にコードが理解できている訳ではありません。
実現したいこと
こちらで用意したpdfファイルのパスワードを特定したいです。
発生している問題・エラーメッセージ
エラーが発生していません。
該当のソースコード
Python
1import PyPDF2 2import itertools 3from multiprocessing import Pool 4import datetime 5 6def FileOpen(pw, file_pass): 7 pdf_file = open(file_pass, 'rb') 8 pw = ''.join(pw) 9 try: 10 open(pdf_file, password=pw) 11 print('パスワードは『{}』です'.format(pw)) 12 return True 13 except: 14 pass 15 16 def BruteForceAttack(fill_pass, num_p, alphanumeric, pass_num): 17 p = Pool(num_p) 18 dt_now = datetime.datetime.now() 19 print(dt_now, ",処理開始") 20 for i in pass_num: 21 dt_now = datetime.datetime.now() 22 print(dt_now, ", ", i, "文字開始") 23 24 cnt = 1 25 26 for passlist in itertools.product(alphanumeric, repeat=i): 27 if cnt <= 1: 28 start = datetime.datetime.now() 29 result = p.apply_async(FileOpen, (passlist, file_pass)) 30 result.wait() 31 elif 1 < cnt <= 100: 32 result = p.apply_async(FileOpen, (passlist, file_pass)) 33 result.wait() 34 else: 35 result - p.apply_async(FileOpen, (passlist, file_pass)) 36 37 if cnt == 100: 38 end = datetime.datetime.now() 39 start2end = end - start 40 wait = start2end.total_second() / 100 41 waitspan = 1 42 43 if cnt > 100 and cnt % waitspan == 0: 44 result.wait() 45 46 if result.get() == True: 47 break 48 49 cnt = cnt + 1 50 51 result.wait() 52 dt_now = datetime.datetime.now() 53 print(dt_now, ", ", i, "文字終了") 54 55 if result.get() == True: 56 break 57 58 p.close() 59 p.join() 60 61 dt_now = datetime.datetime.now() 62 print(dt_now, ", 処理終了") 63 64 if __name__ == "__main__": 65 file_pass = "------/2022.pdf" 66 num_p = 2 67 alphanumeric = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 68 pass_num = [1, 2, 3, 4, 5, 6, 7, 8] 69 70 BruteForceAttack(fill_pass, num_p, alphanumeric, pass_num)
試したこと
同じようにブルートフォースアタックについて調べて出てきたプログラムと見比べてみたり他のプログラムを動かしてみたりしたのですが、当プログラムがなぜ途中で止まってしまうのかというのは分かりませんでした。
補足情報(FW/ツールのバージョンなど)
環境はmacです。
少し無理をしてパスワードは6桁にしたのですが、解読できずとも動けるコードが書きたいと思っています。
Pythonに関して全くの初心者なので、ご迷惑をおかけすることが多いかと思います。
上記のプログラムが書かれていたwebsiteです。
https://s6raming.blogspot.com/2021/08/pdf.html
Pythonのバージョンはいくつですか?
確認してみたところ、インストールできているつもりが確認不足でできていませんでした。
インストールできていないとは?
エディターとかも教えていただけますか?
pyenvまではインストールできていたのですがそこから、エラーが出ていて、pythonの環境構築でつまづいていました。
ただいま、インストールを行なっている状況です。
質問に表示されているコードのインデントは、手元のコードのインデントと同じでしょうか?
はい、同じです。
下記ご確認ください。
・インデントが間違っているようです。
・「fill_pass」が未定義です。
ありがとうございます。
インデントについては全くそのような言語とも知らずだったためそこから学び直したいと思います。
first_passについてはPCの情報だったため伏せさせていただきました。
> first_passについてはPCの情報だったため伏せさせていただきました
そうではありません。file_passとfill_passの違いのことです。タイプミスでは?との指摘です。
大変申し訳ありませんでした。
ありがとうございます。
全く気が付きませんでした。タイプミスでした。
質問の
・「fill_pass」が未定義です。
で指摘されているのは、
> BruteForceAttack(fill_pass, ...
この引数のことです。 多分、file_pass のつづり間違えでしょう。 という指摘ですね。
こういう写し間違えも、動かない原因になるので注意が必要ですね。
ところで、元のコードの file_pass も file_path の間違えでしょうね。
そのような所でエラーが出ない言語なのですね。使いこなせばすごい言語な分より勉強したいと思います。
ご指摘またご教授いただき誠にありがとうございます。
> そのような所でエラーが出ない言語なのですね。
質問のコードでもインデントを直せば、fill_passのところでちゃんと「NameError」が発生します。今回はそこまでコードが実行されていないということです。TakaiYさんのご指摘通り関数が定義されただけですので。
大変失礼いたしました。
そういったことだったのですね。
まずインデントを直してからエラーについても学んでいきたいと思います。
ありがとうございます。
回答1件
あなたの回答
tips
プレビュー