Продолжим изучать и использовать Python в ИБ. В этой статье мы напишем программу на Python для взлома пароля zip-архива, с помощью брутфорса (перебор пароля).
Еще по теме: Асимметричное шифрование с помощью Python
Иногда попадаются защищенные паролем архивы Zip. Если был использован простой ненадежный пароль, то его легко взломать с помощью атаки брутфорс.
Брутфорс (от англ. brute force — грубая сила) — метод подбора пароля (или ключа, используемого для шифрования), предполагающий систематический перебор всех возможных комбинаций символов. Он может занять много времени, если используется большой словарь, с большим количеством возможных вариантов пароля.
Для перебора будем использовать популярный словарь для брута «rockyou».
Использование Python для взлома пароля ZIP
- Сначала импортируйте библиотеку zipfile.
- Инициализируйте объект ZipFile, который помогает извлекать содержимое zip-файла.
- Подсчитайте количество слов, присутствующих в файле «rockyou.txt», и отобразите его в терминале.
- Вызовите функцию «crack_password», которая возвращает true, если пароль найден, иначе возвращает false. Передайте имя текстового файла и объект ZipFile в качестве параметров.
- Переменная idx используется для отслеживания номеров строк.
- Откройте текстовый файл «rockyou.txt» в режиме « rb», чтобы обрабатывать содержимое файла в двоичной форме. Это связано с тем, что файл содержит некоторые специальные символы, которые не могут быть обработаны, если файл открыт в режиме « r» и будет генерировать UnicodeDecodeError.
- После открытия файла извлеките строку из файла, а затем отделите от нее слово.
- В блоке try извлеките содержимое zip-файла, указав пароль в поле pwd метода extractall. Метод extractall() извлечет все содержимое zip-файла в текущий рабочий каталог. Вышеупомянутая программа извлекает zip-файл с именем «gfg.zip» в том же каталоге, что и этот скрипт Python.
- Если пароль неверный, будет сгенерировано исключение. В блоке exclude продолжите цикл, чтобы проверить другие слова в файле.
- Если пароль найден, верните true, или false и отобразите желаемое сообщение.
Ниже приведен полный код:
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 |
import zipfile def crack_password(password_list, obj): # tracking line no. at which password is found idx = 0 # open file in read byte mode only as "rockyou.txt" # file contains some special characters and hence # UnicodeDecodeError will be generated with open(password_list, 'rb') as file: for line in file: for word in line.split(): try: idx += 1 obj.extractall(pwd=word) print("Password found at line", idx) print("Password is", word.decode()) return True except: continue return False password_list = "rockyou.txt" zip_file = "gfg.zip" # ZipFile object initialised obj = zipfile.ZipFile(zip_file) # count of number of words present in file cnt = len(list(open(password_list, "rb"))) print("There are total", cnt, "number of passwords to test") if crack_password(password_list, obj) == False: print("Password not found in this file") |
На этом все. Надеюсь статья была полезна и вы разобрались с кодом.
Еще по теме:
для Rar архива как код выглядит?