Я очень новичок в кодировании, и я просто вскочил и пробую некоторые вещи.
Я использовал следующий код для создания словаря паролей для взлома паролей 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 ответ
Обзор идеи
Это 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")