Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
pcfg_cracker — Generador de conjeturas de contraseñas basado en Gramática Libre de Contexto Probabilística (PCFG) | Kitploit
Herramientas/GitHubGitHub/lakiw/pcfg_cracker
Descifrado de ContraseñasAtaques de ContraseñasCriptografíaAprendizaje Automático
GitHublakiw/pcfg_cracker

pcfg_cracker

Generador de conjeturas de contraseñas basado en Gramática Libre de Contexto Probabilística (PCFG)

Ver Repositorio
37087hace 11 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

PCFG = Probabilistic Context Free Grammar

PCFG = Pretty Cool Fuzzy Guesser

En resumen: Una colección de herramientas para investigar cómo los humanos generan contraseñas. Se pueden usar para descifrar hashes de contraseñas, pero también para crear contraseñas sintéticas (honeywords) o ayudar a desarrollar mejores algoritmos de fortaleza de contraseñas.

Versiones de las herramientas

Trainer: 4.4

Guesser: 4.6

PRINCE_LING: 4.3

Password_Scorer: 4.4

Documentación

Se utiliza Sphinx para crear dinámicamente una Guía para Desarrolladores basada en los docstrings del código. Para construir la Guía para Desarrolladores, consulte las instrucciones en /doc/INSTRUCTIONS.rst

También se puede encontrar una Guía para Desarrolladores preconstruida en PDF en /doc/build/latex/pcfgdevelopersguide.pdf. Nota: no voy a reconstruir esta guía entre versiones importantes para mantener el historial de git más limpio. Es decir, hacer commits de PDFs se vuelve muy desordenado muy rápido. Esto significa que la guía preconstruida puede estar ligeramente desactualizada, por lo que si la usas para ayudarte a escribir/modificar código, se recomienda construir la guía tú mismo en lugar de usar la preconstruida.

Resumen

Este proyecto utiliza aprendizaje automático para identificar los hábitos de creación de contraseñas de los usuarios. Se genera un modelo PCFG entrenando con una lista de contraseñas de texto plano divulgadas/descifradas. En el contexto de este proyecto, el modelo se denomina conjunto de reglas y contiene muchas partes diferentes de las contraseñas identificadas durante el entrenamiento, junto con sus probabilidades asociadas. Esta derivación puede ser útil para otras herramientas de descifrado como PRINCE, y/o partes del conjunto de reglas pueden incorporarse directamente en ataques de diccionario más tradicionales. Este proyecto también incluye un generador de conjeturas PCFG que utiliza este conjunto de reglas para generar conjeturas de contraseñas en orden de probabilidad. Esto es mucho más potente que los ataques de diccionario estándar, y en las pruebas se ha demostrado que puede descifrar contraseñas en promedio con significativamente menos conjeturas que otros métodos disponibles públicamente. La desventaja es que generar conjeturas en orden de probabilidad es lento, lo que significa que crea en promedio entre 50 y 100 mil conjeturas por segundo, mientras que los algoritmos basados en GPU pueden crear millones y miles de millones (y más) de conjeturas por segundo contra algoritmos de hash rápidos. Por lo tanto, el adivinador PCFG es mejor usado contra grandes cantidades de hashes salados u otros algoritmos de hash lentos, donde el costo de rendimiento del algoritmo se compensa con la precisión de las conjeturas.

Requisitos e Instalación

  • Python3 es el único requisito estricto para estas herramientas
  • Se recomienda encarecidamente instalar la biblioteca chardet de python3 para el entrenamiento. Aunque no es obligatorio, realiza la detección automática de la codificación de caracteres de las contraseñas de entrenamiento. Para instalarla:
  • Descargue el código fuente de https://pypi.python.org/pypi/chardet
  • O instálela usando pip3 install chardet

Guía de inicio rápido

Entrenamiento

El conjunto de reglas predeterminado incluido en este repositorio se creó entrenando con un subconjunto de 1 millón de contraseñas del conjunto de datos RockYou. Se puede lograr un mejor rendimiento entrenando con el conjunto completo de 32 millones de contraseñas de RockYou, pero se excluyó para mantener el tamaño de descarga pequeño. Puede usar el conjunto de reglas predeterminado para comenzar a generar contraseñas sin tener que entrenar con una nueva lista, pero se recomienda entrenar con un conjunto objetivo de contraseñas que pueda estar más cerca de lo que intenta atacar. Si crea su propio conjunto de reglas, aquí tiene una guía rápida:

  1. Identifique un conjunto de contraseñas de texto plano para entrenar.
  • Este conjunto de contraseñas debe incluir contraseñas duplicadas. De esa manera, el entrenador puede identificar que contraseñas comunes como 123456 son comunes.
  • Las contraseñas deben estar en texto plano, con los hashes y la información asociada (como nombres de usuario) eliminados. No intente usar archivos .pot sin procesar como conjunto de entrenamiento, ya que el programa de entrenamiento considerará los hashes como parte de la contraseña.
  • Las contraseñas deben estar codificadas de la misma manera en que desea generar las conjeturas de contraseñas. Por lo tanto, si desea crear conjeturas de contraseñas en UTF-8, el conjunto de entrenamiento también debe estar codificado en UTF-8. A largo plazo, la capacidad de modificar esto al generar conjeturas está en el plan de desarrollo, pero esa característica actualmente no es compatible.
  • La lista de contraseñas de entrenamiento debe tener entre 100k y 50 millones. Todavía se están realizando pruebas sobre cómo el tamaño de la lista de contraseñas de entrenamiento afecta la generación de conjeturas, y se ha tenido éxito incluso con listas de contraseñas tan pequeñas como 10k, pero un tamaño ideal probablemente sea alrededor de 1 millón, con rendimientos decrecientes después de eso.
  • Para los fines de este tutorial, la lista de contraseñas de entrada se denominará INPUT_PASSWORD_LIST
  1. Elija un nombre para su conjunto de reglas generado. Para los fines de este tutorial, será NEW_RULESET
  2. Ejecute el entrenador en la lista de contraseñas de entrada
  • python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET
  • Banderas opcionales comunes: a. coverage: Cuánto confía en que el conjunto de entrenamiento coincida con las contraseñas objetivo. Una cobertura más alta significa usar menos generación por fuerza bruta inteligente mediante modelado Markov (actualmente usando el algoritmo OMEN). Si establece la cobertura en 1, no se realizará fuerza bruta. Si establece la cobertura en 0, solo generará conjeturas usando ataques Markov. Este valor es un flotante, con el valor predeterminado de 0.6, lo que significa que espera un 60% de probabilidad de que las palabras base de la contraseña objetivo se encuentren en el conjunto de entrenamiento. Ejemplo: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET -c 0.6 b. --save_sensitive: Si se especifica, los datos sensibles como direcciones de correo electrónico y sitios web completos que se descubran durante el entrenamiento se guardarán en el conjunto de reglas. Aunque el generador de conjeturas PCFG actualmente no utiliza estos datos, son muy valiosos durante un ataque real de descifrado de contraseñas. Esta opción está desactivada por defecto para facilitar el uso de esta herramienta en un entorno académico. Tenga en cuenta que, incluso cuando está desactivada, casi con seguridad seguirá habiendo datos de PII guardados dentro de un conjunto de reglas, así que proteja adecuadamente los conjuntos de reglas generados. Ejemplo: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive c. --comments: Agrega un comentario al archivo de configuración de su conjunto de reglas. Esto es útil para saber por qué y cómo generó su conjunto de reglas cuando lo revise más tarde. Incluya el comentario que desee agregar entre comillas.

Generación de conjeturas

Esto genera conjeturas en stdout usando un conjunto de reglas PCFG previamente entrenado. Estas conjeturas se pueden redirigir a cualquier programa que desee utilizarlas. Si no se especifica ningún conjunto de reglas, se usará el conjunto de reglas predeterminado DEFAULT. Para los fines de esta guía, se asumirá que el conjunto de reglas utilizado es NEW_RULESET.

  1. Nota: el programa de generación de conjeturas distingue entre mayúsculas y minúsculas al especificar el nombre del conjunto de reglas.
  • No se requiere un nombre de sesión (por defecto creará una sesión llamada default_run), pero es útil para facilitar el reinicio de una sesión pausada/detenida. Estos ejemplos usarán el nombre de sesión SESSION_NAME. Nota: no hay una verificación de cordura incorporada si ejecuta múltiples sesiones con el mismo nombre al mismo tiempo, pero se recomienda evitarlo.
  1. Para iniciar una nueva sesión de adivinación, ejecute:
  • python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME
  1. Para reiniciar una sesión de adivinación anterior, ejecute (Nota: aún debe especificar el mismo conjunto de reglas al restaurar una sesión):
  • python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --load

Puntuación de fortaleza de contraseñas

Hay muchos casos en los que desea estimar la probabilidad de que una contraseña sea generada por un conjunto de reglas previamente entrenado. Por ejemplo, esto podría ser parte de una métrica de fortaleza de contraseña, o usarse para fines de investigación. Se ha incluido un programa de ejemplo para realizar esto.

  • INPUT_LIST representa la lista de contraseñas a puntuar. Estas contraseñas deben estar en texto plano y separadas por saltos de línea, con una contraseña por línea.
  1. Para ejecutar una sesión de puntuación: python3 password_scorer -r NEW_RULESET -i INPUT_LIST
  2. Por defecto, mostrará los resultados en stdout, con cada contraseña puntuada por línea.
  • El primer valor es la contraseña sin procesar
  • El segundo valor indicará si el valor de entrada se puntuó como 'contraseña', 'sitio web', 'dirección de correo electrónico' u 'otro'. Esta determinación de contraseña u otro depende de los límites que establezca tanto para el límite de conjeturas OMEN como para la probabilidad asociada al PCFG.
  • El tercer valor es la probabilidad de la contraseña según el conjunto de reglas. Si se le asigna un valor de 0.0, significa que la contraseña no será generada por el conjunto de reglas, aunque podría ser generada por un ataque basado en Markov.
  • El cuarto valor es el nivel OMEN que generará la contraseña. Un valor de -1 significa que la contraseña no será generada por OMEN.

Generador de listas de palabras Prince-Ling

Nombre: PRINCE Language Indexed N-Grams (Prince-Ling)

Resumen: Construye listas de palabras personalizadas basadas en un conjunto de reglas/gramática PCFG ya entrenado para usar en ataques combinatorios estilo PRINCE. La idea detrás de esto es que, dado que el entrenador PCFG ya descompone un conjunto de entrenamiento de contraseñas en análisis individuales, esa información podría aprovecharse para hacer listas de palabras dirigidas para otros ataques.

Mecánica básica: Internamente, la herramienta Prince-Ling es básicamente un generador de conjeturas PCFG en miniatura. Elimina la generación de conjeturas Markov y reemplaza las estructuras base utilizadas en los ataques PCFG normales con una estructura base significativamente reducida adaptada para generar listas de palabras PRINCE. Esto permite generar palabras de diccionario en orden de probabilidad teniendo en cuenta cuán útiles se espera que sean esas palabras en un ataque PRINCE.

Usando Prince-Ling

  1. Entrene un conjunto de reglas PCFG usando trainer.py. Tenga en cuenta que necesita crear el conjunto de reglas usando la versión 4.1 o posterior del conjunto de herramientas PCFG, ya que las versiones anteriores no aprendían todas las estructuras de datos que utiliza Prince-Ling.
  2. Ejecute Prince-Ling: python3 prince-ling.py -r NOMBRE_DEL_CONJUNTO_DE_REGLAS -s TAMAÑO_DE_LA_LISTA_DE_PALABRAS_A_CREAR -o NOMBRE_ARCHIVO_SALIDA
  • --rule: Nombre del conjunto de reglas PCFG del cual crear la lista de palabras PRINCE.
  • --size: Número de palabras a crear para la lista de palabras PRINCE. Nota: si no se especifica, Prince-Ling generará todas las palabras posibles, lo que puede ser bastante grande dependiendo de si la manipulación de mayúsculas/minúsculas está habilitada. (La manipulación de mayúsculas/minúsculas aumenta enormemente el espacio de claves).
  • --output: Nombre del archivo de salida para escribir las entradas. Nota: si no se especifica, Prince-Ling mostrará las palabras en stdout, lo que puede causar problemas dependiendo del shell que esté utilizando al imprimir caracteres no ASCII.
  • --all_lower: Generar solo palabras en minúsculas para el diccionario PRINCE. Esto es útil al atacar hashes que no distinguen entre mayúsculas y minúsculas, o si planea aplicar manipulación de mayúsculas/minúsculas dirigida de otra manera.

Ejemplo de descifrado de contraseñas usando John the Ripper

python3 pcfg_guesser -r NEW_RULESET -s NOMBRE_SESION | ./john --stdin --format=bcrypt CONTRASEÑAS_A_DESCIFRAR.txt

Contribuir

Si observa algún error, o si tiene una función que le gustaría que se agregue, por favor abra un issue en esta página de GitHub. También acepto pull requests, aunque idealmente enlace un pull request a un issue para que pueda revisarlo más fácilmente, hacer preguntas y comprender mejor los cambios que está realizando.

Hay muchas mejoras que se pueden hacer en el modelado de estrategias de creación de contraseñas usando PCFGs. Estoy muy abierto a nuevas ideas, cambios y sugerencias. Solo porque el código actualmente haga algo de cierta manera no significa que sea la mejor opción. Por ejemplo, la estructura base fundamental del enfoque actual, donde se generan máscaras para cadenas alfabéticas, dígitos, otros, etc., se eligió porque era la opción "más fácil" de implementar. Mi equipo tuvo mucho debate sobre que una mejor opción podría ser comenzar con una palabra base, y luego modelar reglas de manipulación más tradicionales aplicadas a ella como transiciones en el PCFG. ¡Así que siéntase libre de experimentar con este código!

Descargar herramienta