Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
pcfg_cracker — Générateur de mots de passe par grammaire hors contexte probabiliste (PCFG) | Kitploit
Outils/GitHubGitHub/lakiw/pcfg_cracker
Cassage de Mots de PasseAttaques de Mots de PasseCryptographieApprentissage Automatique
GitHublakiw/pcfg_cracker

pcfg_cracker

Générateur de mots de passe par grammaire hors contexte probabiliste (PCFG)

Voir le dépôt
370872il y a 1 anVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

PCFG = Grammaire Probabiliste Hors Contexte

PCFG = Guesseur Flou Assez Cool

En bref : Un ensemble d'outils pour mener des recherches sur la manière dont les humains génèrent des mots de passe. Ceux-ci peuvent être utilisés pour casser des hachages de mots de passe, mais aussi pour créer des mots de passe synthétiques (honeywords), ou aider à développer de meilleurs algorithmes de force des mots de passe.

Tool Versions

Entraîneur : 4.4

Guesseur : 4.6

PRINCE_LING : 4.3

Scoreur de mots de passe : 4.4

Documentation

Sphinx est utilisé pour créer dynamiquement un Guide du développeur basé sur les docstrings dans le code. Pour construire le Guide du développeur, reportez-vous aux instructions dans /doc/INSTRUCTIONS.rst

Un PDF pré-construit du Guide du développeur peut également être trouvé dans /doc/build/latex/pcfgdevelopersguide.pdf. Notez que je ne vais pas reconstruire ce guide entre les versions majeures pour garder l'historique git plus propre. Autrement dit, commiter des PDF devient très vite désordonné. Cela signifie que le guide pré-construit peut être légèrement obsolète, donc si vous l'utilisez pour vous aider à écrire/modifier du code, il est recommandé de construire le guide vous-même plutôt que d'utiliser le guide pré-construit.

Overview

Ce projet utilise l'apprentissage automatique pour identifier les habitudes de création de mots de passe des utilisateurs. Un modèle PCFG est généré en s'entraînant sur une liste de mots de passe divulgués en clair/cassés. Dans le contexte de ce projet, le modèle est appelé un ensemble de règles et contient de nombreuses parties différentes des mots de passe identifiées lors de l'entraînement, ainsi que leurs probabilités associées. Ce stemming peut être utile pour d'autres outils de cassage tels que PRINCE, et/ou des parties de l'ensemble de règles peuvent être directement incorporées dans des attaques par dictionnaire plus traditionnelles. Ce projet inclut également un générateur de suppositions PCFG qui utilise cet ensemble de règles pour générer des suppositions de mots de passe dans l'ordre de probabilité. C'est beaucoup plus puissant que les attaques par dictionnaire standard, et lors des tests, il s'est avéré capable de casser des mots de passe en moyenne avec significativement moins de suppositions que d'autres méthodes disponibles publiquement. L'inconvénient est que générer des suppositions dans l'ordre de probabilité est lent, ce qui signifie qu'il crée en moyenne 50 à 100k suppositions par seconde, alors que les algorithmes basés sur GPU peuvent créer des millions à des milliards (et plus) de suppositions par seconde contre des algorithmes de hachage rapides. Par conséquent, le guesseur PCFG est mieux utilisé contre de grands nombres de hachages salés, ou d'autres algorithmes de hachage lents, où le coût de performance de l'algorithme est compensé par la précision des suppositions.

Requirements + Installation

  • Python3 est la seule exigence matérielle pour ces outils
  • Il est hautement recommandé d'installer la bibliothèque python3 chardet pour l'entraînement. Bien que non obligatoire, elle effectue une détection automatique de l'encodage des caractères des mots de passe d'entraînement. Pour l'installer :
  • Téléchargez la source depuis https://pypi.python.org/pypi/chardet
  • Ou installez-la en utilisant pip3 install chardet

Quick Start Guide

Training

L'ensemble de règles par défaut inclus dans ce dépôt a été créé en s'entraînant sur un sous-ensemble de 1 million de mots de passe du jeu de données RockYou. De meilleures performances peuvent être obtenues en s'entraînant sur l'ensemble complet de 32 millions de mots de passe de RockYou, mais cela a été exclu pour garder la taille de téléchargement petite. Vous pouvez utiliser l'ensemble de règles par défaut pour commencer à générer des mots de passe sans avoir à vous entraîner sur une nouvelle liste, mais il est recommandé de vous entraîner sur un ensemble cible de mots de passe qui pourrait être plus proche de ce que vous essayez de cibler. Si vous créez votre propre ensemble de règles, voici un guide rapide :

  1. Identifiez un ensemble de mots de passe en clair sur lequel vous entraîner.
  • Cet ensemble de mots de passe doit inclure des mots de passe en double. Ainsi, l'entraîneur peut identifier que des mots de passe courants comme 123456 sont courants.
  • Les mots de passe doivent être en clair avec les hachages et les informations associées comme les noms d'utilisateur supprimés. N'essayez pas d'utiliser des fichiers .pot bruts comme ensemble d'entraînement car les hachages seront considérés comme faisant partie du mot de passe par le programme d'entraînement.
  • Les mots de passe doivent être encodés de la même manière que vous souhaitez générer les suppositions de mots de passe. Ainsi, si vous voulez créer des suppositions de mots de passe UTF-8, l'ensemble d'entraînement doit également être encodé en UTF-8. À long terme, la possibilité de modifier cela lors de la génération des suppositions est dans le plan de développement, mais cette fonctionnalité n'est actuellement pas supportée.
  • La liste de mots de passe d'entraînement doit être comprise entre 100k et 50 millions. Des tests sont encore en cours sur la façon dont la taille de la liste de mots de passe d'entraînement affecte la génération de suppositions, et il y a eu de bons résultats même avec des listes aussi petites que 10k, mais une taille idéale est probablement autour de 1 million, avec des rendements décroissants après cela.
  • Pour les besoins de ce tutoriel, la liste de mots de passe d'entrée sera appelée INPUT_PASSWORD_LIST
  1. Choisissez un nom pour l'ensemble de règles généré. Pour les besoins de ce tutoriel, il sera appelé NEW_RULESET
  2. Exécutez l'entraîneur sur la liste de mots de passe d'entrée
  • python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET
  • Indicateurs optionnels courants : a. coverage : Dans quelle mesure vous faites confiance à l'ensemble d'entraînement pour correspondre aux mots de passe cibles. Une couverture plus élevée signifie utiliser moins de génération brute force intelligente utilisant la modélisation Markov, (actuellement en utilisant l'algorithme OMEN). Si vous réglez la couverture à 1, aucune force brute ne sera effectuée. Si vous réglez la couverture à 0, seules des suppositions utilisant des attaques Markov seront générées. Cette valeur est un float, la valeur par défaut étant 0,6, ce qui signifie qu'elle s'attend à une probabilité de 60% que les mots de base du mot de passe cible se trouvent dans l'ensemble d'entraînement. Exemple : python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET -c 0.6 b. --save_sensitive : Si spécifié, les données sensibles telles que les adresses e-mail et les sites Web complets découverts lors de l'entraînement seront sauvegardées dans l'ensemble de règles. Bien que le générateur de suppositions PCFG n'utilise pas actuellement ces données, elles sont très précieuses lors d'une véritable attaque de cassage de mots de passe. Cette option est désactivée par défaut pour rendre cet outil plus facile à utiliser dans un cadre académique. Notez que même lorsque cette option est désactivée, il y aura presque certainement encore des données PII sauvegardées dans un ensemble de règles, donc protégez les ensembles de règles générés de manière appropriée. Exemple : python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive c. --comments : Ajoute un commentaire à votre fichier de configuration d'ensemble de règles. Cela est utile pour savoir pourquoi et comment vous avez généré votre ensemble de règles lorsque vous y reviendrez plus tard. Incluez le commentaire que vous souhaitez ajouter entre guillemets.

Guess Generation

Ceci génère des suppositions vers stdout en utilisant un ensemble de règles PCFG précédemment entraîné. Ces suppositions peuvent ensuite être redirigées (piped) vers tout programme que vous souhaitez utiliser. Si aucun ensemble de règles n'est spécifié, l'ensemble de règles par défaut DEFAULT sera utilisé. Pour les besoins de ce guide, on supposera que l'ensemble de règles utilisé est NEW_RULESET.

  1. Note : le programme de génération de suppositions est sensible à la casse lors de la spécification du nom de l'ensemble de règles.
  • Un nom de session n'est pas requis (il créera par défaut une session appelée default_run), mais il est utile pour faciliter la reprise d'une session mise en pause/arrêtée. Ces exemples utiliseront le nom de session SESSION_NAME. Notez qu'il n'existe pas de vérification de cohérence intégrée si vous exécutez plusieurs sessions avec le même nom en même temps, mais il est recommandé d'éviter cela.
  1. Pour démarrer une nouvelle session de supposition, exécutez :
  • python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME
  1. Pour reprendre une session de supposition précédente, exécutez (Note : vous devez toujours spécifier le même ensemble de règles lors de la restauration d'une session) :
  • python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --load

Password Strength Scoring

Il existe de nombreux cas où vous pouvez souhaiter estimer la probabilité qu'un mot de passe soit généré par un ensemble de règles précédemment entraîné. Par exemple, cela pourrait faire partie d'une métrique de force de mot de passe, ou être utilisé à d'autres fins de recherche. Un programme d'exemple a été inclus pour effectuer cela.

  • INPUT_LIST représente la liste des mots de passe à scorer. Ces mots de passe doivent être en clair, séparés par des sauts de ligne, avec un mot de passe par ligne.
  1. Pour exécuter une session de scoring : python3 password_scorer -r NEW_RULESET -i INPUT_LIST
  2. Par défaut, il affichera les résultats sur stdout, chaque mot de passe scoré par ligne.
  • La première valeur est le mot de passe brut.
  • La deuxième valeur indique si la valeur d'entrée a été scorée comme 'password', 'website', 'e-mail address' ou 'other'. Cette détermination dépend des limites que vous avez définies pour la limite de suppositions OMEN ainsi que de la probabilité associée au PCFG.
  • La troisième valeur est la probabilité du mot de passe selon l'ensemble de règles. Si elle est assignée à 0.0, cela signifie que le mot de passe ne sera pas généré par l'ensemble de règles, bien qu'il puisse être généré par une attaque basée sur Markov.
  • La quatrième valeur est le niveau OMEN qui générera le mot de passe. Une valeur de -1 signifie que le mot de passe ne sera pas généré par OMEN.

Prince-Ling Wordlist Generator

Nom : PRINCE Language Idexed N-Grams (Prince-Ling)

Overview : Construit des listes de mots personnalisées basées sur un ensemble de règles/grammaire PCFG déjà entraîné pour une utilisation dans des attaques de combinaison de style PRINCE. L'idée derrière cela était que puisque l'entraîneur PCFG décompose déjà un ensemble d'entraînement de mots de passe en analyses individuelles, cette information pourrait être exploitée pour créer des listes de mots ciblées pour d'autres attaques.

Basic Mechanics : Sous le capot, l'outil Prince-Ling est essentiellement un mini-générateur de suppositions PCFG. Il supprime la génération de suppositions Markov et remplace les structures de base utilisées dans les attaques PCFG normales par une structure de base significativement réduite conçue pour générer des listes de mots PRINCE. Cela permet de générer des mots de dictionnaire dans l'ordre de probabilité en gardant un œil sur l'utilité attendue de ces mots dans une attaque PRINCE.

Using Prince-Ling

  1. Entraînez un ensemble de règles PCFG en utilisant trainer.py. Notez que vous devez créer l'ensemble de règles en utilisant la version 4.1 ou ultérieure de l'ensemble d'outils PCFG, car les versions antérieures n'apprenaient pas toutes les structures de données qu'utilise Prince-Ling.
  2. Exécutez Prince-Ling python3 prince-ling.py -r RULESET_NAME -s SIZE_OF_WORDLIST_TO_CREATE -o OUTPUT_FILENAME
  • --rule: Nom de l'ensemble de règles PCFG à partir duquel créer la liste de mots PRINCE.
  • --size: Nombre de mots à créer pour la liste de mots PRINCE. Notez que s'il n'est pas spécifié, Prince-Ling générera tous les mots possibles, ce qui peut être assez volumineux en fonction de si le case_mangling est activé. (Le case mangling augmente énormément l'espace de clés.)
  • --output: Nom du fichier de sortie pour écrire les entrées. Notez que s'il n'est pas spécifié, Prince-Ling affichera les mots sur stdout, ce qui peut causer des problèmes selon le shell que vous utilisez lors de l'impression de caractères non-ASCII.
  • --all_lower: Génère uniquement des mots en minuscules pour le dictionnaire PRINCE. Cela est utile lors de l'attaque de hachages insensibles à la casse, ou si vous prévoyez d'appliquer un case mangling ciblé d'une manière différente.

Example Cracking Passwords Using John the Ripper

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

Contributing

Si vous remarquez des bogues, ou si vous avez une fonctionnalité que vous souhaiteriez voir ajoutée, veuillez ouvrir un problème sur cette page GitHub. J'accepte également les pull requests, mais idéalement, veuillez lier une pull request à un problème afin que je puisse plus facilement la réviser, poser des questions et mieux comprendre les modifications que vous apportez.

Il y a de nombreuses améliorations qui peuvent être apportées à la modélisation des stratégies de création de mots de passe en utilisant les PCFGs. Je suis très ouvert aux nouvelles idées, changements et suggestions. Ce n'est pas parce que le code fait actuellement quelque chose d'une certaine manière que c'est la meilleure option. Par exemple, la structure de base fondamentale de l'approche actuelle où des masques sont générés pour les chaînes alpha, les chiffres, autres, etc., a été choisie parce que c'était l'option la "plus facile" à implémenter. Mon équipe a beaucoup débattu qu'une meilleure option pourrait être de commencer par un mot de base, puis de modéliser des règles de mangling plus traditionnelles appliquées à celui-ci comme des transitions dans le PCFG. Alors n'hésitez pas à laisser libre cours à votre imagination avec ce code !

Télécharger l’outil