Crack Password File Zip và Rar đơn giản với Python sử dụng kĩ thuật Brute Force
Bài viết tên kipalog– của tác giả Thành Minh Như các bạn đã biết, định dạng .zip và .rar là 1 trong những định dạng nén phổ biến nhất trên PC hay kể cả mobile. Việc crack password file zip hay rar cũng thực sự không hề khó, chỉ là việc hơi mất thời gian đối với các mật khẩu phức ...
Bài viết tên kipalog– của tác giả Thành Minh
Như các bạn đã biết, định dạng .zip và .rar là 1 trong những định dạng nén phổ biến nhất trên PC hay kể cả mobile. Việc crack password file zip hay rar cũng thực sự không hề khó, chỉ là việc hơi mất thời gian đối với các mật khẩu phức tạp, trong bài này mình sẽ hướng dẫn sử dụng kĩ thuật Brute Force để crack password.
1. Các thư viện cần dùng
Thư viện zipfile để xử lí file Zip.
Thư viện rarfile để xử lí file Rar.
Thư viện UnRAR, thư viện rarfile bắt buộc đi kèm với thư viện này
Thư viện os để kiểm tra file.
Thư viện argparse để nhận các Argument.
Thư viện threading để tăng tốc bằng cách xử lí đa luồng.
Thư viện itertools để tạo các chuỗi password.
Thư viện time để tính thời gian (cái này mình đưa vào để tính xem mất bao lâu thôi chứ nó không bắt buộc ).
2. Tiến hành
Đầu tiên ta tạo một biến lưu giá trị của tất cả các kí tự trên bàn phím:
1 2 3 |
CHARACTER ='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&()' |
Sau đó viết các argument cần thiết:
1 2 3 4 5 |
parser = argparse.ArgumentParser(description='CompressedCrack', epilog='Use the -h for help') parser.add_argument('-i','--input', help='Insert the file path of compressed file', required=True) parser.add_argument('rules', nargs='*', help='<min> <max> <character>') |
Ta viết một class check các argument:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
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ó tồn tạ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ính để xử lí:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
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.FileCrack = zipfile.ZipFile(self.location) else: self.FileCrack = rarfile.RarFile(self.location) def Brute(self,password): # Brute với các pass đưa vào, nếu .zip thì phải encode string password thành utf-8 vì module zipfile bắt buộc 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 có rules thì sẽ lặp từ độ dài <min> <max> của các argument đưa 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: return |
Toàn bộ code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
Có thể bạn quan tâm
0
|