Sua Loi Blogger Blade1407

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.

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.

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 ).

2. Coding

Đầ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:
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


Chạy thử và kết quả:


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 =))

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: ).
Chia sẻ:

Viết 1 bình luận:

0 comments so far,add yours