Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
pcfg_cracker — Генератор угадывания паролей на основе вероятностной контекстно-свободной грамматики (PCFG) | Kitploit
Инструменты/GitHubGitHub/lakiw/pcfg_cracker
Взлом паролейАтаки на ПаролиКриптографияМашинное Обучение
GitHublakiw/pcfg_cracker

pcfg_cracker

Генератор угадывания паролей на основе вероятностной контекстно-свободной грамматики (PCFG)

Репозиторий
3708711 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

PCFG = Вероятностная контекстно-свободная грамматика

PCFG = Очень Крутой Нечеткий Угадыватель

Короче: Набор инструментов для исследования того, как люди создают пароли. Их можно использовать для взлома хешей паролей, а также для генерации синтетических паролей (honeywords) или помощи в разработке более совершенных алгоритмов оценки стойкости паролей.

Версии инструментов

Trainer: 4.4

Guesser: 4.6

PRINCE_LING: 4.3

Password_Scorer: 4.4

Документация

Sphinx используется для динамического создания руководства разработчика на основе строк документации в коде. Чтобы собрать руководство разработчика, обратитесь к инструкциям в /doc/INSTRUCTIONS.rst

Предварительно собранный PDF-файл руководства разработчика также можно найти в /doc/build/latex/pcfgdevelopersguide.pdf. Обратите внимание: я не буду перестраивать это руководство между крупными релизами, чтобы история git оставалась чище. Иначе коммиты PDF быстро становятся беспорядочными. Поэтому предварительно собранное руководство может быть немного устаревшим; если вы используете его для помощи в написании/изменении кода, рекомендуется собрать руководство самостоятельно, а не использовать предварительно собранное.

Обзор

Этот проект использует машинное обучение для выявления привычек создания паролей пользователями. Модель PCFG создается путем обучения на списке раскрытых паролей в открытом виде (или взломанных). В контексте этого проекта модель называется набором правил и содержит множество различных частей паролей, выявленных во время обучения, вместе с их вероятностями. Такое разбиение на составные части может быть полезно для других инструментов взлома, таких как PRINCE, и/или части набора правил могут быть напрямую включены в более традиционные атаки на основе словарей. Этот проект также включает генератор предположений PCFG, который использует этот набор правил для генерации паролей в порядке убывания вероятности. Это гораздо мощнее стандартных словарных атак, и в тестах доказано, что он способен взламывать пароли в среднем с использованием значительно меньшего количества попыток, чем другие общедоступные методы. Недостатком является то, что генерация предположений в порядке вероятности медленная — в среднем 50–100 тысяч попыток в секунду, в то время как алгоритмы на GPU могут выдавать миллионы и миллиарды (и больше) попыток в секунду для быстрых алгоритмов хеширования. Поэтому угадыватель PCFG лучше всего использовать для большого количества соленых хешей или других медленных алгоритмов хеширования, где точность предположений компенсирует вычислительные затраты.

Требования и установка

  • Python3 является единственным строгим требованием для этих инструментов.
  • Настоятельно рекомендуется установить библиотеку chardet для Python3 при обучении. Хотя это не обязательно, она выполняет автоматическое определение кодировки символов обучающих паролей. Для установки:
  • Загрузите исходный код с https://pypi.python.org/pypi/chardet
  • Или установите с помощью pip3 install chardet

Краткое руководство

Обучение

Набор правил по умолчанию, включенный в этот репозиторий, был создан путем обучения на подмножестве из 1 миллиона паролей из набора RockYou. Лучшей производительности можно достичь, обучаясь на полном наборе из 32 миллионов паролей RockYou, но он был исключен, чтобы уменьшить размер загрузки. Вы можете использовать набор правил по умолчанию для начала генерации паролей без необходимости обучения на новом списке, но рекомендуется обучаться на целевом наборе паролей, который может быть ближе к тому, что вы хотите атаковать. Если вы создаете свой собственный набор правил, вот краткое руководство:

  1. Определите набор паролей в открытом виде для обучения.
  • Этот набор паролей должен содержать дублирующиеся пароли. Таким образом, программа обучения сможет выявить, что такие распространенные пароли, как 123456, являются частыми.
  • Пароли должны быть в открытом виде, без хешей и связанной информации (например, имен пользователей). Не пытайтесь использовать необработанные файлы .pot в качестве обучающего набора, так как программа обучения посчитает хеши частью пароля.
  • Пароли должны быть закодированы так же, как вы хотите генерировать предположения. То есть, если вы хотите создавать предположения в UTF-8, обучающий набор также должен быть в UTF-8. В долгосрочной перспективе возможность изменять это при генерации предположений включена в план разработки, но в настоящее время эта функция не поддерживается.
  • Размер обучающего списка паролей должен быть от 100 тысяч до 50 миллионов. Еще проводятся исследования влияния размера обучающего списка на генерацию предположений; хорошие результаты были достигнуты даже со списками всего из 10 тысяч паролей, но идеальный размер, вероятно, около 1 миллиона, с убывающей отдачей после этого.
  • Для целей этого руководства входной список паролей будет называться INPUT_PASSWORD_LIST.
  1. Выберите имя для вашего созданного набора правил. Для целей этого руководства это будет NEW_RULESET.
  2. Запустите программу обучения на входном списке паролей:
  • python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET
  • Часто используемые опциональные флаги: a. coverage: Насколько вы доверяете обучающему набору, что он соответствует целевым паролям. Более высокое значение означает использование менее умной brute-force генерации на основе марковского моделирования (в настоящее время алгоритм OMEN). Если установить coverage=1, brute-force не будет выполняться. Если установить coverage=0, будут генерироваться только предположения с помощью марковских атак. Это значение с плавающей точкой, по умолчанию 0.6, что означает ожидание 60% вероятности, что базовые слова целевого пароля будут найдены в обучающем наборе. Пример: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET -c 0.6 b. --save_sensitive: Если указано, чувствительные данные, такие как адреса электронной почты и полные веб-сайты, обнаруженные во время обучения, будут сохранены в наборе правил. Хотя генератор предположений PCFG в настоящее время не использует эти данные, они очень ценны в реальной атаке на взлом паролей. По умолчанию эта опция отключена, чтобы упростить использование этого инструмента в академических целях. Обратите внимание: даже если эта опция отключена, в наборе правил почти наверняка останутся персональные данные, поэтому защищайте созданные наборы правил соответствующим образом. Пример: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive c. --comments: Добавляет комментарий в файл конфигурации набора правил. Это полезно, чтобы позже, взглянув на него, вы знали, почему и как был создан этот набор правил. Заключите комментарий, который хотите добавить, в кавычки.

Генерация предположений

Это генерирует предположения в stdout, используя ранее обученный набор правил PCFG. Эти предположения затем можно передать по конвейеру в любую программу, которая будет их использовать. Если набор правил не указан, будет использоваться набор правил по умолчанию DEFAULT. Для целей этого руководства предполагается, что используется набор правил NEW_RULESET.

  1. Примечание: программа генерации предположений учитывает регистр при указании имени набора правил.
  • Имя сеанса не требуется (по умолчанию будет создан сеанс с именем default_run), но оно полезно для упрощения перезапуска приостановленного/остановленного сеанса. В этих примерах будет использоваться имя сеанса SESSION_NAME. Обратите внимание: встроенной проверки на одновременный запуск нескольких сеансов с одинаковым именем нет, но рекомендуется этого избегать.
  1. Чтобы начать новый сеанс угадывания, выполните:
  • python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME
  1. Чтобы перезапустить предыдущий сеанс угадывания, выполните (Примечание: при восстановлении сеанса необходимо указать тот же набор правил):
  • python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --load

Оценка стойкости паролей

Существует много случаев, когда вы можете захотеть оценить вероятность генерации пароля по ранее обученному набору правил. Например, это может быть частью метрики стойкости пароля или использоваться для других исследовательских целей. Включена примерная программа для выполнения этого.

  • INPUT_LIST представляет список паролей для оценки. Эти пароли должны быть в открытом виде, разделены символами новой строки, один пароль на строку.
  1. Чтобы запустить сеанс оценки: python3 password_scorer -r NEW_RULESET -i INPUT_LIST
  2. По умолчанию результаты выводятся в stdout, каждый пароль оценивается в отдельной строке:
  • Первое значение — это исходный пароль.
  • Второе значение показывает, был ли входной пароль оценен как 'password', 'website', 'e-mail address' или 'other'. Это определение пароля или другого значения зависит от ограничений, которые вы установили как для лимита предположений OMEN, так и для вероятности, связанной с PCFG.
  • Третье значение — это вероятность пароля согласно набору правил. Если ему присвоено значение 0.0, это означает, что пароль не будет сгенерирован набором правил, хотя может быть сгенерирован марковской атакой.
  • Четвертое значение — это уровень OMEN, который сгенерирует пароль. Значение -1 означает, что пароль не будет сгенерирован OMEN.

Генератор списков слов Prince-Ling

Название: PRINCE Language Indexed N-Grams (Prince-Ling)

Обзор: Создает настраиваемые списки слов на основе уже обученного набора правил PCFG/грамматики для использования в комбинаторных атаках в стиле PRINCE. Идея заключается в том, что программа обучения PCFG разбивает обучающий набор паролей на отдельные разборы, и эту информацию можно использовать для создания целевых списков слов для других атак.

Основные принципы: Под капотом Prince-Ling — это, по сути, мини-генератор предположений PCFG. Он удаляет генерацию марковских предположений и заменяет базовые структуры, используемые в обычных атаках PCFG, на значительно уменьшенную базовую структуру, предназначенную для создания списков слов для PRINCE. Это позволяет генерировать слова из словаря в порядке убывания вероятности с учетом того, насколько эти слова, как ожидается, будут полезны в атаке PRINCE.

Использование Prince-Ling

  1. Обучите набор правил PCFG с помощью trainer.py. Обратите внимание: необходимо создать набор правил с помощью версии 4.1 или более поздней версии набора инструментов PCFG, так как более ранние версии не изучали все структуры данных, которые использует Prince-Ling.
  2. Запустите Prince-Ling: python3 prince-ling.py -r RULESET_NAME -s SIZE_OF_WORDLIST_TO_CREATE -o OUTPUT_FILENAME
  • --rule: Имя набора правил PCFG, из которого создается список слов для PRINCE.
  • --size: Количество слов для создания в списке слов PRINCE. Если не указано, Prince-Ling сгенерирует все возможные слова, что может быть довольно большим в зависимости от того, включено ли изменение регистра. (Изменение регистра значительно увеличивает пространство ключей.)
  • --output: Имя выходного файла для записи записей. Если не указано, Prince-Ling выведет слова в stdout, что может вызвать проблемы в зависимости от используемой оболочки при выводе не-ASCII символов.
  • --all_lower: Генерировать только слова в нижнем регистре для словаря PRINCE. Это полезно при атаке на хеши, нечувствительные к регистру, или если вы планируете применять целевое изменение регистра другим способом.

Пример взлома паролей с помощью John the Ripper

python3 pcfg_guesser -r NEW_RULESET -s SESSION_NAME | ./john --stdin --format=bcrypt PASSWORDS_TO_CRACK.txt

Вклад

Если вы заметили какие-либо ошибки или у вас есть функция, которую вы хотели бы добавить, пожалуйста, откройте issue на этой странице GitHub. Я также принимаю pull request'ы, но в идеале, пожалуйста, привязывайте pull request к issue, чтобы мне было проще его просмотреть, задать вопросы и лучше понять вносимые вами изменения.

Есть много улучшений, которые можно внести в моделирование стратегий создания паролей с помощью PCFG. Я открыт для новых идей, изменений и предложений. То, что код в настоящее время делает что-то определенным образом, не означает, что это лучший вариант. Например, фундаментальная базовая структура текущего подхода, при котором маски генерируются для строк из букв, цифр, других символов и т.д., была выбрана, потому что это был «самый простой» вариант реализации. В нашей команде было много споров о том, что лучшим вариантом может быть начать с базового слова, а затем моделировать более традиционные правила изменения, применяемые к нему, как переходы в PCFG. Так что смело экспериментируйте с этим кодом!

Скачать инструмент