Crack password file zip và rar đơn giản với python sử dụng kĩ thuật brute force

1. Các tlỗi viện đề nghị dùng

Thư viện ziptệp tin nhằm xử lí file Zip.Thư viện rartệp tin nhằm up load file Rar.Tlỗi viện UnRAR, thỏng viện rartệp tin cần đi kèm cùng với tlỗi viện nàyThư viện os nhằm kiểm tra tệp tin.Thư viện argparse để nhận những Argument.Tlỗi viện threading nhằm tăng tốc bằng phương pháp up load đa luồng.Tlỗi viện itertools nhằm chế tác các chuỗi password.Thư viện time nhằm tính thời hạn (đặc điểm này mình đưa vào nhằm tính coi mất bao thọ thôi chứ nó không nên ).

You watching: Crack password file zip và rar đơn giản với python sử dụng kĩ thuật brute force

2. Tiến hành

Trước tiên ta tạo thành một đổi mới lưu lại giá trị của tất cả những kí trường đoản cú bên trên bàn phím:

CHARACTER ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!
#$%^&()"Sau kia viết những argument buộc phải thiết:

parser = argparse.ArgumentParser(description="Craông xã zip rar", epilog="Use the -h for help")parser.add_argument("-i","--input", help="Insert the tệp tin path of compressed file", required=True)parser.add_argument("rules", nargs="*", help=" ")Ta viết một class check những argument:

class Check: def __init__(self, Arg): self.type = None self.rules = False self.minLength = None self.maxLength = None self.character = None # Kiểm tra rules if len(Arg) >= 4: self.getData(Arg) self.rules = True elif len(Arg) == 0 or len(Arg) > 2: parser.print_help() parser.exit() # Kiểm tra file có mãi mãi hay không if (self.CheckFileExist(Arg)): self.getType(Arg) else: print ("No such file or directory: ",Arg<1>) parser.exit() def CheckFileExist(self, Arg): if (os.path.isfile(Arg<1>)): return True else: return False def getData(self, Arg): try: self.minLength = int(Arg<2>) self.maxLength = int(Arg<3>) except ValueError: print ("Value Error") parser.exit() if self.minLength > self.maxLength: print ("Length Error") parser.exit() if len(Arg) == 5: self.character = Arg<4> def getType(self, Arg): if os.path.splitext(Arg<1>)<1> == ".rar" or os.path.splitext(Arg<1>)<1>==".zip": self.type = os.path.splitext(Arg<1>)<1> else: print ("Extension Error") parser.exit()Tiếp tục ta viết class chủ yếu nhằm xử lí:

class Handler: def __init__(self, rules, typeCompress, minLength, maxLength, character): self.rules = rules self.location = sys.argv<2> self.type = typeCompress self.minLength = minLength self.maxLength = maxLength if not character: self.character = CHARACTER else: self.character = character self.result = False self.GetFile() self.CheckRules() def GetFile(self): # Knhì báo tệp tin if self.type == ".zip": self.FileCraông chồng = zipfile.ZipFile(self.location) else: self.FileCrachồng = rarfile.RarFile(self.location) def Brute(self,password): # Brute cùng với các pass đưa vào, ví như .zip thì yêu cầu encode string password thành utf-8 vị module zipfile nên try: if self.type == ".zip": tryPass = password.encode() else: tryPass = password print (tryPass) self.FileCraông chồng.extractall(pwd=tryPass) print ("Complete") print("Time:",time.clock() - self.start_time,"s") print ("Password:",password) self.result = True except: pass def CheckRules(self): self.start_time = time.clock() print ("Cracking...") # Nếu không có rules thì lặp vô hạn if not self.rules: length = 1 while True: self.SendRequest(length) if self.result: return length += 1 # Nếu bao gồm rules thì vẫn lặp trường đoản cú độ lâu năm của những argument gửi vào else: for length in range(self.minLength, self.maxLength + 1): self.SendRequest(length) if self.result: return if not self.result: print ("Cannot find password with this rules") return def SendRequest(self,length): listPass = product(self.character, repeat=length) for Pass in listPass: tryPass = "".join(Pass) # Multi Thread: # nThread = Thread(target=self.Brute, args=(tryPass, )) # nThread.start() # Single Thread: self.Brute(tryPass) if self.result: returnToàn bộ code:

import zipfileimport rarfileimport osimport sysfrom threading import Threadimport argparsefrom itertools import productimport timeparser = argparse.ArgumentParser(description="Craông chồng zip rar", epilog="Use the -h for help")parser.add_argument("-i","--input", help="Insert the tệp tin path of compressed file", required=True)parser.add_argument("rules", nargs="*", help=" ")CHARACTER = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!
#$%^&*()"class Check: def __init__(self, Arg): self.type = None self.rules = False self.minLength = None self.maxLength = None self.character = None # Kiểm tra rules if len(Arg) >= 4: self.getData(Arg) self.rules = True elif len(Arg) == 0 or len(Arg) > 2: parser.print_help() parser.exit() # Kiểm tra tệp tin tất cả vĩnh cửu hay là không if (self.CheckFileExist(Arg)): self.getType(Arg) else: print ("No such tệp tin or directory: ",Arg<1>) parser.exit() def CheckFileExist(self, Arg): if (os.path.isfile(Arg<1>)): return True else: return False def getData(self, Arg): try: self.minLength = int(Arg<2>) self.maxLength = int(Arg<3>) except ValueError: print ("Value Error") parser.exit() if self.minLength > self.maxLength: print ("Length Error") parser.exit() if len(Arg) == 5: self.character = Arg<4> def getType(self, Arg): if os.path.splitext(Arg<1>)<1> == ".rar" or os.path.splitext(Arg<1>)<1>==".zip": self.type = os.path.splitext(Arg<1>)<1> else: print ("Extension Error") parser.exit()class Handler: def __init__(self, rules, typeCompress, minLength, maxLength, character): self.rules = rules self.location = sys.argv<2> self.type = typeCompress self.minLength = minLength self.maxLength = maxLength if not character: self.character = CHARACTER else: self.character = character self.result = False self.GetFile() self.CheckRules() def GetFile(self): # Khai báo file if self.type == ".zip": self.FileCraông xã = zipfile.ZipFile(self.location) else: self.FileCraông xã = rarfile.RarFile(self.location) def Brute(self,password): # Brute cùng với các pass chuyển vào, ví như .zip thì bắt buộc encode string password thành utf-8 bởi module ziptệp tin phải try: if self.type == ".zip": tryPass = password.encode() else: tryPass = password print (tryPass) self.FileCrack.extractall(pwd=tryPass) print ("Complete") print("Time:",time.clock() - self.start_time,"s") print ("Password:",password) self.result = True except: pass def CheckRules(self): self.start_time = time.clock() print ("Cracking...") # Nếu không có rules thì lặp vô hạn if not self.rules: length = 1 while True: self.SendRequest(length) if self.result: return length += 1 # Nếu bao gồm rules thì đang lặp tự độ lâu năm của các argument gửi vào else: for length in range(self.minLength, self.maxLength + 1): self.SendRequest(length) if self.result: return if not self.result: print ("Cannot find password with this rules") return def SendRequest(self,length): listPass = product(self.character, repeat=length) for Pass in listPass: tryPass = "".join(Pass) # Multi Thread: # nThread = Thread(target=self.Brute, args=(tryPass, )) # nThread.start() # Single Thread: self.Brute(tryPass) if self.result: returndef main(): kiểm tra = Check(sys.argv<1:>) args = parser.parse_args() rartệp tin.UNRAR_TOOL = "UnRAR.exe" Handling = Handler(check.rules, kiểm tra.type, check.minLength, check.maxLength, check.character)if __name__ == "__main__": main()3. Thử nghiệm

Không rules

Mình sản xuất một tệp tin zip tên là Takizawa Laura.zip cùng với pass là jav

*

Chạy test với kết quả:

*

Ban đầu, danh sách pass được tạo nên cùng với length = 1 sẽ sở hữu được dạng kế tiếp ko được liên tiếp tăng length = 2 đề nghị các mục biến chuyển cũng ko được nốt, length = 3 thì jav,...>.

Có rules

Mình tạo nên một file rar thương hiệu là PPPD-558.rar cùng với pass là boobs

*

Chạy demo với rules 4 5 abos:

*

Ban đầu, danh mục pass được tạo thành với length = 4 (min Length) sẽ có dạng tiếp đến không được thường xuyên tăng length = 5 (max Length) ( đề nghị menu trở nên boobs,...> .

See more: Tải Ccleaner Full Crack Mới Nhất 2020, Ccleaner Professional 5

4. Lời kết

Đây là 1 trong bí quyết crack tệp tin zip dễ dàng thực hiện kỹ năng Brute Force, điểm mạnh là luôn luôn đưa ra password, cơ mà điểm yếu là cần mất tương đối thời gian cùng với các password lâu năm cái, ví dụ như: yaxua.laktr0j tuyệt racjngp0yvjppr0 chẳng hạn.

Sử dụng thread có thể tăng tốc độ lên một ít,nhưng các bạn nên limit thread lại kẻo treo sản phẩm công nghệ bằng phương pháp sử dụng tlỗi viện queue.

See more: Mouse And Keyboard Recorder Phần Mềm Ghi Lại Thao Tác, Mouse And Keyboard Recorder

Mình đã và đang thêm rules vào để về tối ưu hóa năng lực kiếm tìm pass, với rules những chúng ta cũng có thể bớt con số pass test, ví dụ như các bạn đoán pass dài khoảng chừng 6 - 9 kí từ bỏ và lượng character chỉ tất cả gồm những kí trường đoản cú bao gồm thì dịp này sẽ rút ít gọn gàng được rất nhiều thời gian.

Các bạn có thể fork project của mình bên trên github.Cảm ơn các bạn vẫn gọi bài bác.

*

Bài viết được đăng lại tự blog: https://mnismt.space/crack-password-file-zip-va-rar-don-gian-voi-python-su-dung-ki-thuat-brute-force/