Задача: подобрать забытый пароль к архиву.
Условия: длинна пароля не более 4-х слов без пробелов. Есть список из 5 слов которые могут быть в пароле в неизвестном порядке.
Сделано:
С помощью itertools.product сгенерировал все возможные варианты порядка слов в пароле и записал в файл.
for word in itertools.product([‘first’,’second’,’third’,’fourth’,’fiftht’], repeat=4): print(».join(word))
Для распаковки 7z архива использую библиотеку py7zr. Для открытия архива с паролем в библиотеке используется функция
with py7zr.SevenZipFile(‘encrypted.7z’, mode=’r’, password=’secret’) as Archive: Archive.extractall()
Ниже приведен мой код.
passfile = open(‘pass.txt’, ‘r’) # открываю файл с паролями для чтения Lines = passfile.readlines() # в файле каждый вариант пароля на новой строке. Читаем файл построчно. for word in Lines: arch = py7zr.SevenZipFile(‘Archive.7z’, mode=’r’, password=word) arch.extractall(path=»»)
Вопрос: как подставлять word (предполагаемый пароль с файла) в параметры функции в password для полного перебора все вариантов.
Подбор пароля к zip-файлу в Python
Помогите, пожалуйста.
- Вопрос задан более двух лет назад
- 1642 просмотра
5 комментариев
Простой 5 комментариев
Источник: qna.habr.com
Мы взломали 40000 паролей при помощи Python. Один из них может быть вашим
Помните старые добрые времена, когда вы раздавали любовные записки в аудитории?Скорее всего, вам нужно было передать эту записку своему другу, ему другому другу, а потом еще одному другу до того, как она попадет вашей любви. А друзья были, мягко говоря, не самыми честными. Вы никогда не могли бы доверить им свое секретное сообщение или важный пароль. Поэтому вы, вероятно, заранее установили какой-то шифр между вами и вашей любовью. Послание несет смысл для вас обоих, но для людей, которые его передают, кажется бессмысленным.
Это то, что мы называем шифрованием
ВНИМАНИЕ
Шифрование и хеширование, по своей сути являются одним и тем же – превращают слова в бред. Разница лишь в том, что шифрование обратимо, а вот хеширование (почти) необратимо. Поэтому для паролей используется хеширование.
Как компании хранят ваш пароль
- Простой текст (можно услышать, как мы цокаем языком).
- Хешированные пароли.
- «Соленые» хешированные пароли.
Ответственные компании хешируют ваши пароли. Они берут пароль, который вы вводите на своей странице регистрации, делают его бессмысленным, а затем сохраняют эти бессмысленные слова в своей базе данных. В случае, если хакер флиртует с администратором вашей базы данных и обманным путем получает доступ к базе данных, все, что он увидит — это просто чепуха. Он не может просто скопировать ваш бессмысленный пароль и вставить его на страницу входа в систему, потому что набор символов превратится в другое бессмысленное слово. Сейчас продемонстрируем:
Крутой заказ на фрилансе | Подбираем забытый пароль к Excel файлу с помощью Python
Еще более ответственные компании солят ваши пароли. Это означает, что они «добавляют случайные символы в случайной позиции» к вашим паролям перед отправкой на хеширование. Например, вы вводите самый худший пароль — «Пароль». При «засолке» алгоритм, возможно, добавляет к нему несколько символов, пока он не станет похож на такой «xyzПароль123». «Пароль» есть в словаре, а «xyzПароль123» — нет. Это делает угадывание фактического пароля намного сложнее.
Рушим ваши ожидания
В следующей части этой статьи мы собираемся показать вам, как хакеры «расшифровывают» хэшированные пароли (ну, на самом деле они не дешифруют, лишь угадывают). Затем мы собираемся показать вам, как это делается в Python. Прежде чем продолжить, мы хотели бы отметить, что цель этой статьи — показать вам общую картину; Мы не станем показывать всю техническую часть.
Если увидите что-нибудь техническое, вы услышите, как мы извиняемся. Кажется, мы прояснили многие вещи здесь. Здорово? Поехали.
Как работают атаки по словарям
Короче говоря, атака по словарю (извините!) — это взлом пароля, основанный на словах, которые существуют в словаре. Необходимо выполнить 3 шага при атаке по словарю.
- ДОСТУП к (хешированному) списку паролей
- ХЕШИРОВАНИЕ всех слов найденных в словаре английского (чаще всего) языка
- СРАВНИТЬ (хэшированные) английские слова с (хэшированными) паролями
ЭТАП 1: ДОСТУП
Позвольте привести пример. Допустим, я познакомился с администратором базы данных компании и сумел получить доступ к следующим трем хешированным паролям:
- 5f4dcc3b5aa765d61d8327deb882cf99
- 9b4609b17fea63f3f3f067fc2f465c6e
- 24ebcd0fd5d6b86649fb187d75f80ad0
ЭТАП 2: ХЭШ
Используя программирование, мы хэшировали все 350 000+ английских слов. Мы будем использовать метод хеширования под названием «md5» (извините!). Существует много способов хеширования — MD5, SHA1, SHA2, SHA3 (извините, извините, извините, извините) и т. д.
ЭТАП 3: СРАВНЕНИЕ
Затем мы прочесываем чуть более 370 000 (хэшированных) английских слов (то есть все). Если найдем совпадение, бинго! Это пароль. Все еще в замешательстве? Ниже мы представляем 20-секундный фильм-блокбастер, чтобы вы могли увидеть, как это работает:
Атака по словарю (при использовании Python)
Черный треугольник

Сегодня понадобилось написать простой код для перебора случайно сгенерированных четырехзначных паролей, для «взлома». Естественно, пароль, который мы будем «взламывать», мы введем сами, в этой же программе, ведь я не хочу создавать скрипт для брута, а лишь хочу продемонстрировать новичкам в программировании, как должен работать подобный скрипт.
Для начала надо выбрать язык. Я решил выбрать Python, так как он приятней глазу, и на нем будет проще объяснить, как работает процесс перебора паролей.
Итак, начнем. Какие модули нам необходимы? Только один — random! Импортируем его.
import random
Далее, надо определиться с переменными. Нам нужны 6.
correctPassword = «1234» # Вводим пароль, который нужно забрутить
wrongPasswords = [] # В этот список будут добавляться уже подобранные пароли, чтобы не повторяться
password = «» # В эту переменную будет записываться сгенерированный пароль, и, если он ложный, пойдет в wrongPassword
length = 4 # Длина пароля. Эта переменная нужна будет в будущем
chars = «1234567890» # Символы, из которых будет генерироваться пароль.
run = True # Думаю, не стоит объяснять
Вот и все необходимые переменные.
Теперь необходимо создать цикл. В нем все и будет выполняться. Также добавим в него строчку для обнуления переменной password
while run:
password = «»
Переходим к самому интересному — генерации и перебору паролей.
Сначала создадим цикл for, для генерации пароля. Тут нам и пригодится переменная length.
for i in range(length):
password += random.choise(chars)
Теперь напишем код, который будет проверять, генерировала уже программа этот пароль, или нет. Ну и проверять, идентичен ли он правильному.
if password not in wrongPasswords:
print(password)
if password != correctPassword:
wrongPasswords.append(password)
else:
run = False
break
print(password + » is correct»)
Вот и все! Все работает!
Надеюсь, кому-то данная статья помогла, кому-то просто была интересна.
Весь код полностью:
import random
correctPassword = «1234»
wrongPasswords = []
password = «»
length = 4
chars = «12e4567890»
run = True
while run:
password = «»
for i in range(length):
password += random.choise(chars)
if password not in wrongPasswords:
if password != correctPassword:
print(password)
wrongPasswords.append(password)
else:
run = False
break
print(password + » is correct»)
Поделиться
- Получить ссылку
- Электронная почта
- Другие приложения
Источник: cumshoat.blogspot.com