словарь взлома паролей

Я очень новичок в кодировании, и я просто вскочил и пробую некоторые вещи.

Я использовал следующий код для создания словаря паролей для взлома паролей Wi-Fi с помощью грубой силы, но для запуска всех возможных комбинаций потребуется целая жизнь. Как бы я изменил код, чтобы он не начинался с 11111111 а вместо этого перетасовывает комбинации? Разве это не ускорит поиск пароля? У меня Windows 11 и Python 3.11.

import itertools as its
words="ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890abcdefghijklmnopqrstuvwxyzº!§$%&/()=ß"'+#-.,><@€|^~-{[]}ÄÖÜäöû'
r =its.product(words,repeat=8)
dic = open("pwd.txt","a")
for i in r:
    dic.write("".join(i))
    dic.write("".join("\n"))
dic.close()

1 ответ
1

Обзор идеи

Это 100 разных символов, повторяющихся 8 раз, т.е. 100^8 или 100000000000000000 разных паролей или 10000 Терабайт. Я думаю, вы не можете сделать это быстрее. Даже с очень быстрыми современными твердотельными накопителями NVME со скоростью 1500 МБ/с запись на диск займет около 77 дней, если вы можете позволить себе покупку 10000 твердотельных накопителей. Подключение их к компьютеру может занять еще больше времени. Учитывая, что каждому SSD требуется 8 Вт, вам также понадобится небольшая электростанция в вашем саду.

[…] перетасовывает комбинации, разве это не ускорит поиск пароля?

нет. Среднее время подбора правильного пароля остается прежним. Вы просто изменить возникновение удачи.

Я не совсем уверен, хотите ли вы выполнить атаку по словарю или атаку грубой силы. То, что вы делаете, является атакой грубой силы: вы генерируете все возможные пароли (длиной 8) и пытаетесь записать их в файл. Если вы используете этот файл в качестве словаря для атаки по словарю, это все равно будет атака полным перебором. Идея атаки по словарю состоит в том, что вы уменьшаете количество возможностей, используя слова из реального словаря английского языка, а не из словаря Python (хэш-карты).

Взлом WiFi в реальном мире обычно происходит быстро из-за уязвимостей в стандарте WiFi или его реализации.

Обзор кода

Отличная идея использовать готовую библиотеку вместо того, чтобы писать функции для самостоятельного получения комбинаций. Это уменьшает количество ошибок, экономит строки кода и хорошо понятно всем, кто знаком с библиотекой.

Мы

words это не хорошее имя. Эта строка содержит не слова, а символы.

Я даже не могу представить, что ты хотел выразить r. Это список комбинаций из 8 символов, каждая из которых является потенциальным паролем WiFi. Итак, давайте назовем это passwords или так.

dic это не очень хорошее имя, потому что open() возвращает не словарь, а дескриптор файла. Вызов этого file будет нормально я думаю. Или dictionary_file если вы хотите пойти действительно описательный.

i обычно используется в циклах for, но не в циклах foreach. Если мы заменим r к passwords как предлагалось ранее, то for password in passwords: хороший выбор. Обратите внимание на тонкую разницу между единственным и множественным числом.

Обработка файлов

Использовать with чтобы открывать файлы и правильно их закрывать. Посмотрите на пример переполнения стека

Новая линия

"".join("\n") просто "\n".

Расстояние

Иногда у вас есть места вокруг =, иногда нет. Есть PEP8 который определяет правила для интервалов.

Результат

import itertools as its
characters="ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890abcdefghijklmnopqrstuvwxyzº!§$%&/()=ß"'+#-.,><@€|^~-{[]}ÄÖÜäöû'
passwords = its.product(characters, repeat=8)
with open("pwd.txt", "a") as file:
    for password in passwords:
        file.write("".join(password))
        file.write("\n")

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *