
Генерирует миллионы мутаций паролей на основе ключевых слов за секунды.
Особая благодарность DavidAngelos:
▶️ Добавлен индикатор выполнения на каждом шаге для отслеживания процесса.
▶️ Добавлены опции:
-i / --inorder): объединять ключевые слова только в исходном порядке (например, foo,bar,baz → foo, bar, baz, foobar, foobaz, barbaz, foobarbaz).-c / --combinations): генерировать все перестановки каждого подмножества (например, foo,bar,baz → foo, bar, baz, foobar, foobaz, barfoo, …, bazbarfoo).--sep <string>): при объединении слов вставлять эту строку между токенами (по умолчанию без разделителя).--max-combine <N>): ограничение на количество объединяемых исходных ключевых слов (по умолчанию: 2).--minlen/--maxlen <N>): фильтровать итоговый список слов, оставляя только слова нужной длины.Psudohash — это генератор списков паролей для организации атак методом перебора и взлома хэшей. Он имитирует некоторые распространённые шаблоны создания паролей, используемые людьми, такие как замена букв слова на символы или цифры (leet), изменение регистра, добавление общего дополнения до или после основной парольной фразы и другое. Он основан на ключевых словах и обладает высокой настраиваемостью. 🎥 -> Видеопрезентация
Системные администраторы и другие сотрудники часто используют мутированную версию названия компании для установки паролей (например, Am@z0n_2022). Это часто встречается для сетевых устройств (точек доступа Wi-Fi, коммутаторов, маршрутизаторов и т.д.), приложений или даже доменных учётных записей. С помощью самых базовых опций psudohash может генерировать список слов со всеми возможными мутациями одного или нескольких ключевых слов, основанными на распространённых шаблонах замены символов (настраиваемых), вариациях регистра, строках, обычно используемых в качестве дополнения, и многом другом. Взгляните на следующий пример:

Скрипт реализует следующую схему подстановки символов. Вы можете добавить/изменить сопоставления подстановки символов, отредактировав список transformations в psudohash.py и следуя структуре данных, представленной ниже (по умолчанию):
transformations = [
{'a' : ['@', '4']},
{'b' : '8'},
{'e' : '3'},
{'g' : ['9', '6']},
{'i' : ['1', '!']},
{'o' : '0'},
{'s' : ['$', '5']},
{'t' : '7'}
]
При установке паролей, я считаю, довольно стандартно добавлять последовательность символов до и/или после основной парольной фразы, чтобы сделать её «надёжнее». Например, кто-то может установить пароль «dragon» и добавить в конце значение «!!!» или «!@#», в результате чего получаются «dragon!!!», «dragon!@#» и т.д. Psudohash считывает такие значения из common_padding_values.txt и использует их для мутации предоставленных ключевых слов, добавляя их перед (-cpb) или после (-cpa) каждой сгенерированной вариации ключевого слова. Вы можете изменять этот файл по своему усмотрению.
При добавлении значения года к мутированному ключевому слову psudohash будет использовать различные разделители. По умолчанию используются следующие разделители, которые можно изменить, отредактировав список year_seperators:
year_seperators = ['', '_', '-', '@']
Например, если задано ключевое слово «amazon» и использована опция -y 2023, вывод будет включать «amazon2023», «amazon_2023», «amazon-2023», «amazon@2023», «amazon23», «amazon_23», «amazon-23», «amazon@23».
Сначала установите Python 3.x и tqdm:
pip3 install tqdm
Затем клонируйте репозиторий и сделайте скрипт исполняемым:
git clone https://github.com/t3l3machus/psudohash.git
cd ./psudohash
chmod +x psudohash.py
./psudohash.py [-h] -w WORDS [-i] [-c] [--sep SEP] [--max-combine N] [-an LEVEL] [-nl LIMIT] [-y YEARS] [-ap VALUES] [-cpb] [-cpa] [-cpo] [-o FILENAME] [-q]
Диалог справки [-h, --help] содержит подробности использования и примеры.
-w, --words <kw1,kw2,…>
Исходные ключевые слова, разделённые запятыми (обязательно).
-i, --inorder
Объединять до --max-combine ключевых слов в заданном порядке (например, foo,bar,baz → foo, bar, baz, foobar, foobaz, barbaz, foobarbaz).
-c, --combinations
Генерировать все перестановки каждого подмножества (до --max-combine) (например, foo,bar,baz → foo, bar, baz, foobar, foobaz, barfoo, …).
--max-combine <N> (по умолчанию: 2)
Максимальное количество исходных ключевых слов для объединения в одну базовую строку.
--sep <string>
При объединении слов ( или ) помещать эту строку между токенами. По умолчанию пустая строка.
Без объединения слов (только одиночные слова)
./psudohash.py -w foo,bar,baz -cpa
# → foo, bar, baz
Последовательные объединения (-i, до 2 слов по умолчанию)
./psudohash.py -w foo,bar,baz -i
# → foo, bar, baz, foobar, foobaz, barbaz
Комбинации всех порядков (-c, до 2 слов по умолчанию)
./psudohash.py -w foo,bar,baz -c
# → foo, bar, baz, foobar, foobaz, barfoo, barbaz, bazfoo, bazbar
Изменение разделителя между объединёнными словами
./psudohash.py -w foo,bar,baz -i --sep "_"
# → foo, bar, baz, foo_bar, foo_baz, bar_baz
Фильтрация по длине (--minlen/--maxlen)
./psudohash.py -w apple,banana -i --minlen 10
# Warning: exact size cannot be determined because of length filters.
# Example final outputs might include “applebanana” (11 chars), “bananaapple” (11 chars).
Объединение до 3 слов (вместо 2 по умолчанию)
--years и --append-numbering с --numbering-limit ≥ последних двух цифр любого введённого года, скорее всего, приведёт к появлению дублирующихся слов из-за шаблонов мутации, реализованных в инструменте.--minlen или --maxlen скрипт не может предварительно вычислить точное количество слов; вы увидите предупреждение «exact size cannot be determined» и будет рассчитан размер без этого фильтра, итоговый размер будет меньше.Что касается людей, я думаю, все мы (в большей или меньшей степени) устанавливали пароли, используя мутацию одного или нескольких слов, которые что-то значат для нас, например, наше имя или имена жены/ребёнка/питомца/группы, добавляя год рождения в конце или, возможно, супербезопасное дополнение вроде «!@#». Ну, угадайте что?

Я собираю информацию о часто используемых шаблонах создания паролей для улучшения возможностей инструмента.
-i-c--minlen <N>
Отбрасывать любой итоговый пароль короче N символов.
--maxlen <N>
Отбрасывать любой итоговый пароль длиннее N символов.
-an, --append-numbering <LEVEL>
Добавлять нумерованные суффиксы (с дополнением нулями до <LEVEL> цифр) к каждой мутации слова.
-nl, --numbering-limit <LIMIT>
Максимальное число для подсчёта при добавлении номеров (по умолчанию: 50).
-y, --years <years>
Добавлять один или несколько годов к каждой мутации (например, 1990-2000 или 2022,2023).
-ap, --append-padding <vals>
Добавлять пользовательские значения дополнения (через запятую). Должен использоваться с -cpb или -cpa.
-cpb, --common-paddings-before
Добавлять значения из common_padding_values.txt перед каждой мутацией.
-cpa, --common-paddings-after
Добавлять значения из common_padding_values.txt после каждой мутации.
-cpo, --custom-paddings-only
Использовать только предоставленные пользователем дополнения (без значений по умолчанию). Должен использоваться с -ap.
-o, --output <file>
Записать результаты в <file> (по умолчанию: output.txt).
-q, --quiet
Подавлять показ ASCII-баннера при запуске.