python暴力解凍rar暗号化ファイルプロセスの詳細


csdnを初めて使って文章を書いて、うまく書けませんでした。ご了承ください。運行環境:python 3.6)
パスワード付きの圧縮バッグを作りました。pythonの初心者として、python暴力で解読できるかと思い、インターネットで多くの資料を探しました。見ていても面倒ではないようです。暴力的に解読できるプログラムを書いてみたいです。書いているうちに様々な問題が発生しました。大手たちに連れて行ってほしいです。発生した問題は以下の通りです。
  • zipfileとzipfile 2はAES解読(https://bugs.python.org/issue9170
  • をサポートしていないようです。
  • は、rarfileで暴力的にクラックしたときに、パスワードが間違っていても、例外を出さないため、try、exceptでパスワードを取得することができませんでした。
    本来はzipとrarを同時に暴力的に解読できるプログラムを書きたいですが、zipを解読してみましたが、パスワードを間違えてからzipを放棄しました。暴力的に壊したプログラムを書いてもいいですか?
    まずは辞書を作ることです。itertoolsモジュールを使うべきです。
    
    import itertools as its
    import string
    
    def createDict(path,repeats,words):
    	dict = its.product(words,repeat=repeats) 
    	'''   words        ,repeats        ,   dict           '''
    	f = open(path,'a')
    	for cipher in dict:
    		f.write(''.join(cipher) + '
    ') f.close() def main(): numbers = string.digits # 0-9 path = ' ' length = for i in range(1,length): createDict(path,i,numbers) if __name__=="__main__": main()
    ここに来て私たちの辞書はもう生成されました。これから暴力を始めます。
    
    from threading import Thread
    from unrar import rarfile
    import os
    
    '''         ,               '''
    
    def get_pwd(dict_path):
    	with open(dict_path,'r') as f:
    		for pwd in f:
    			yield pwd.strip()
    
    def decode_rar(fp,pwd,extract_path):
    	try:
    		fp.extractall(extract_path,pwd=pwd) 
    	except:
    		pass
    	else:
    		print('the pwd is>',pwd)
    '''
                     else,             。  
               ,           
    
    
    def decode_rar(fp,pwd,check_file,extract_path):
    	fp.extractall(extract_path,pwd=pwd)
    	if os.path.exists(check_file):
    		print('The pwd is:',pwd)
    		exit(0)
      check_file     fp.namelist()[0]
                ,         
    '''
    
    def main():
    	extract_path = '       '
    	dict_path = '      '
    	filename = '  rar  '
    	fp = rarfile.RarFile(filename)
    	pwds = get_pwd(dict)
    	'''          '''
    	for pwd in pwds:
    		t = Thread(target=rar_file,args=(fp,pwd,extract_path))
    		t.start()
    以上はプログラムの構想を書いてと出会う各種のピットで、コードは手でたたいたので、いくつか誤りがあるかもしれなくて、理解と助けを得ることができることを望みます。
    次はグラフィックインターフェースのrarソースコードを解読します。(図は練習したいだけで、実行が遅いので、上の関数を直接実行することをお勧めします。)
    
    import tkinter as tk
    import os
    from tkinter import messagebox
    from unrar import rarfile
    from threading import Thread
    
    def getPwd(dict):
      with open(dict,'r') as f:
        for pwd in f:
          yield pwd.strip()
    def slowerDecode(fp,pwd,check_file,extract_path):
      fp.extractall(extract_path,pwd=pwd)
      if os.path.exists(check_file):
        messagebox.showinfo(message="  :"+pwd)
        messagebox.showinfo(message="    ")
        messagebox.showinfo(message="  :"+pwd)
        exit(0)
    	
    def quickDecode(fp,pwd,extract_path):
      fp.extractall(extract_path,pwd=pwd)
    
    
    def check(obs):
      flag = 1
      for ob in obs:
        if not ob.checkExist():
          flag = 0
          ob.showError()  
    
      if(not flag):
        return 0
      else:
        for ob in obs:
          if not ob.check():
            flag = 0
            ob.showError()
    		
      if (not flag):
        return 0
      else:
        for ob in obs:
          ob.right()
        return 1
    		
    def main(obs):
      extract_path = obs[0].path_input.get()
      rar_path = obs[1].path_input.get()
      txt_path = obs[2].path_input.get()
      pwds = getPwd(txt_path)
      global var1
      global var2
      if(check(obs)):
        if(var1.get() == 0 and var2.get() == 0):
          messagebox.showerror(message="      !!!")
        elif(var1.get() == 0 and var2.get() == 1):
          fp = rarfile.RarFile(rar_path)
          check_file = fp.namelist()[0]
          for pwd in pwds:
            slowerDecode(fp,pwd,check_file,extract_path)
        elif(var1.get() == 1 and var2.get() == 0):
          fp = rarfile.RarFile(rar_path)
          for pwd in pwds:
            t = Thread(target=quickDecode,args=(fp,pwd,extract_path))
            t.start()
          exit(0)
        else:
          messagebox.showerror(message="     !!!")
        
    
    class FolderPath:
      
      def __init__(self,y=0,error_message="Not exists!",path_input="",text=''):
        self.y = y
        self.error_message = error_message
        self.path_input = path_input
        self.text = text
    	
      def createLabel(self):
        label = tk.Label(window,bg="white",font=("  ",13),width=20,text=self.text)
        cv.create_window(100,self.y,window=label)
      
      def createEntry(self):
      	entry = tk.Entry(window,fg="blue",width="40",bg="#ffe1ff",textvariable=self.path_input)
      	cv.create_window(330,self.y,window=entry)
      
      def show(self):
        self.createLabel()
        self.createEntry()
    	
      def showError(self,color="red"):
        label = tk.Label(window,bg="white",fg=color,font=("  ",13),width="10",text=self.error_message)
        cv.create_window(530,self.y,window=label)
      
      def checkExist(self):
        self.error_message = 'Not exists!'
        if not os.path.exists(self.path_input.get()):
          return 0
        return 1
      
      def check(self):
        if not os.path.isdir(self.path_input.get()):
          self.error_message = 'Not a dir!'
          return 0
        else:
          return 1
      
      def right(self):
        self.error_message = "right path!"
        self.showError('#00FFFF')
    	
      
    class FilePath(FolderPath):
      def check(self):
        if (self.path_input.get().split('.')[-1] == self.suffix):
          return 1
        else:
          self.error_message = "Not "+self.suffix + '!'
          return 0
      
    
    window = tk.Tk()
    window.title('made by qiufeng')
    window.geometry('600x300')
    cv = tk.Canvas(window,width=600,height=300,bg='white')
    cv.pack()
    
    folderpath = FolderPath(y=140,path_input=tk.StringVar(),text="       ")
    folderpath.show()
    
    
    rarpath = FilePath(y=60,path_input=tk.StringVar(),text="   rar  ")
    rarpath.suffix = 'rar'
    rarpath.show()
    
    txtpath = FilePath(y=100,path_input=tk.StringVar(),text="       ")
    txtpath.suffix = 'txt'
    txtpath.show()
    obs = [folderpath,rarpath,txtpath]
    
    #   
    var1 = tk.IntVar()
    var2 = tk.IntVar()
    ck1 = tk.Checkbutton(window,text="    (      )",variable=var1)
    cv.create_window(150,200,window=ck1)
    ck2 = tk.Checkbutton(window,text="  (     )",variable=var2)
    cv.create_window(132,230,window=ck2)
    button = tk.Button(window,text="  ",command=lambda: main(obs))
    cv.create_window(90,260,window=button)
    
    window.mainloop()
    以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。