Như các bạn đã biết, định dạng .zip 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 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 một file zip.
CHARACTER ='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()'
Tiếp tục ta viết hàm Brute và sử dụng hàm extractall trong module zipfile để thử giải nén file zip với password được tạo:
Tiếp theo ta có hàm main:
Toàn bộ code:
Ban đầu, list pass được tạo với length = 1 sẽ có dạng [a, b, c,...] sau đó không được tiếp tục tăng length = 2 nên list trở thành [aa, ab, ac,...] cũng không được nốt, length = 3 thì [aaa, aab,..., jav,...] , tuyệt vời =))
1. Các thư viện cần dùng
Thư viện zipfile để xử lí file Zip.
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 ).
Đầ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: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. Coding
CHARACTER ='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()'
Tiếp tục ta viết hàm Brute và sử dụng hàm extractall trong module zipfile để thử giải nén file zip với password được tạo:
def Brute(zipFile,password):
# Thử giải nén file zip
try:
zipFile.extractall(pwd=password.encode())
print ('Password:',password)
return True
except:
pass
Tiếp theo ta có hàm main:
def main():
# File zip cần crack
zipFile = zipfile.ZipFile('filename.zip')
length = 1
start_time = time.clock()
# Lặp cho đến khi tìm ra pass
while True:
# Tạo list pass
listPass = product(CHARACTER, repeat=length)
for tryPass in listPass:
password = ''.join(tryPass)
# Nếu password đúng thì in thời gian và return
if Brute(zipFile,password):
print('Time',time.clock() - start_time,'s')
return
# Nếu list pass sai, tăng độ dài kí tự trong list lên 1
length += 1
Function product trong module itertools sẽ có nhiệm vụ tạo ra list pass với chiều dài chữ trong biến length. Sau đó hàm Brute sẽ có nhiệm vụ thử giải nén pass trong list này, nếu như sai thì tạo lại list pass với độ dài các chữ tăng thêm 1, cứ thế cho đến khi tìm ra password.
Toàn bộ code:
import zipfile
from itertools import product
import time
CHARACTER = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()'
def Brute(zipFile,password):
# Thử giải nén file zip
try:
zipFile.extractall(pwd=password.encode())
print ('Password:',password)
return True
except:
pass
def main():
# File zip cần crack
zipFile = zipfile.ZipFile('filename.zip')
length = 1
start_time = time.clock()
# Lặp cho đến khi tìm ra pass
while True:
# Tạo list pass
listPass = product(CHARACTER, repeat=length)
for tryPass in listPass:
password = ''.join(tryPass)
# Nếu password đúng thì in thời gian và return
if Brute(zipFile,password):
print('Time',time.clock() - start_time,'s')
return
# Nếu list pass sai, tăng độ dài kí tự trong list lên 1
length += 1
if __name__ == '__main__':
main()
3. Thử nghiệm
4. Lời kết
Đây là một cách crack file zip đơn giản sử dụng kĩ thuật Brute Force, ưu điểm là luôn tìm ra password, nhưng nhược điểm là phải mất kha khá thời gian với các mật khẩu dài dòng. Tuy nhiên các bạn có thể tăng tốc bằng cách sử dụng module Thread (mình cũng định thêm vào nhưng hơi lười với cả cái này chắc ai cũng biết rồi nên thôi, viết mỗi cái lõi cũng được :stuck_out_tongue: ).
Viết 1 bình luận:
0 comments so far,add yours