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 = 很酷的模糊猜测器

简而言之:一组用于研究人类如何生成密码的工具。这些工具可用于破解密码哈希,也可用于创建合成密码(蜜词)或帮助开发更好的密码强度算法。

工具版本

训练器: 4.4

猜测器: 4.6

PRINCE_LING: 4.3

密码评分器: 4.4

文档

使用 Sphinx 基于代码中的文档字符串动态创建开发者指南。要构建开发者指南,请参阅 /doc/INSTRUCTIONS.rst 中的说明。

预构建的开发者指南 PDF 也可以在 /doc/build/latex/pcfgdevelopersguide.pdf 找到。注意,我不会在主要版本之间重建此指南,以保持 git 历史更清洁。也就是说,提交 PDF 会很快变得混乱。这意味着预构建的指南可能稍微过时,因此如果你用它来帮助编写/修改代码,建议自行构建指南而不是使用预构建版本。

概述

该项目使用机器学习来识别用户的密码创建习惯。通过训练一个公开的明文/已破解密码列表来生成 PCFG 模型。在此项目上下文中,该模型被称为规则集,包含训练期间识别的密码的多个不同部分及其相关概率。这种词干分析可用于其他破解工具(如 PRINCE),并且规则集的某些部分可以直接纳入更传统的基于字典的攻击中。该项目还包括一个 PCFG 猜测生成器,它利用此规则集按概率顺序生成密码猜测。这比标准字典攻击强大得多,并且在测试中已被证明能够以显著少于其他公开可用方法的猜测次数平均破解密码。缺点是按概率顺序生成猜测速度较慢,平均每秒生成 5-10 万次猜测,而基于 GPU 的算法针对快速哈希算法每秒可以生成数百万到数十亿(甚至更多)次猜测。因此,PCFG 猜测器最适合用于大量加盐哈希或其他慢速哈希算法,在这些场景中,算法的性能损失可以通过猜测的准确性来弥补。

要求与安装

  • 这些工具的唯一硬性要求是 Python3
  • 强烈建议您安装 chardet python3 库用于训练。虽然不是必须的,但它可以自动检测训练密码的字符编码。安装方法:
  • 从 https://pypi.python.org/pypi/chardet 下载源码
  • 或使用 pip3 install chardet 安装

快速入门指南

训练

此仓库中包含的默认规则集是通过训练 RockYou 数据集的一个 100 万密码子集生成的。如果使用完整的 RockYou 3200 万密码集训练,可以获得更好的性能,但为了保持下载体积小,已将其排除。您可以使用默认规则集开始生成密码而无需在新列表上训练,但建议针对更接近您目标的目标密码集进行训练。如果您确实创建自己的规则集,请参考以下快速指南:

  1. 确定一组用于训练的明文密码。
  • 此密码集应包含重复密码。这样训练器就能识别出像 123456 这样的常见密码是常见的。
  • 密码应为明文,且已移除哈希和相关用户信息。不要尝试使用原始的 .pot 文件作为训练集,因为训练程序会将哈希视为密码的一部分。
  • 密码的编码方式应与您希望生成的密码猜测的编码方式一致。例如,如果您想创建 UTF-8 密码猜测,训练集也应为 UTF-8 编码。长期计划中,在生成猜测时修改编码的功能已列入开发计划,但目前尚不支持。
  • 训练密码列表的大小应在 10 万到 5000 万之间。训练密码列表大小对猜测生成的影响仍在测试中,即使密码列表小至 1 万也取得了良好的成功,但理想大小可能约为 100 万,之后收益递减。
  • 在本教程中,输入密码列表将称为 INPUT_PASSWORD_LIST
  1. 为您生成的规则集选择一个名称。在本教程中,它将称为 NEW_RULESET
  2. 在输入密码列表上运行训练器
  • python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET
  • 常用可选标志: a. coverage:您对训练集与目标密码匹配程度的信任度。更高的覆盖率意味着使用更少的使用马尔可夫建模的智能暴力生成(当前使用 OMEN 算法)。如果将覆盖率设置为 1,则不执行暴力破解。如果设置为 0,则仅使用马尔可夫攻击生成猜测。该值为浮点数,默认值为 0.6,即预期目标密码的基础词有 60% 的概率能在训练集中找到。示例:python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET -c 0.6 b. --save_sensitive:如果指定此选项,训练期间发现的敏感数据(如电子邮件地址和完整网站)将保存在规则集中。虽然 PCFG 猜测生成器当前未使用这些数据,但在实际密码破解攻击中非常有价值。默认情况下此选项关闭,以便在学术环境中更容易使用此工具。注意,即使关闭此选项,规则集中几乎肯定仍会保存 PII 数据,因此请妥善保护生成的规则集。示例:python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive c. --comments:向规则集配置文件添加注释。这有助于日后回顾时了解生成规则集的原因和方式。将您要添加的注释放在引号内。

猜测生成

此命令使用先前训练的 PCFG 规则集将猜测输出到 stdout。然后可以通过管道将这些猜测传送到任何需要使用它们的程序中。如果未指定规则集,将使用默认规则集 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 语言索引 N-Grams (Prince-Ling)

概述: 基于已训练的 PCFG 规则集/文法构建自定义词表,用于 PRINCE 风格的组合攻击。其背后的思路是:由于 PCFG 训练器已经将训练集中的密码分解为单独的解析,因此可以利用这些信息为其他攻击制定有针对性的词表。

基本机制: Prince-Ling 工具本质上是一个迷你 PCFG 猜测生成器。它去掉了马尔可夫猜测生成,并用一个显著简化的基础结构替换了正常 PCFG 攻击中使用的基结构,该结构专门用于生成 PRINCE 词表。这使得能够按概率顺序生成字典单词,并关注这些单词在 PRINCE 攻击中的预期有用性。

使用 Prince-Ling

  1. 使用 trainer.py 训练一个 PCFG 规则集。注意,您需要使用 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:从中创建 PRINCE 词表的 PCFG 规则集名称
  • --size:要为 PRINCE 词表创建的单词数量。注意,如果未指定,Prince-Ling 将生成所有可能的单词,这可能相当大,具体取决于是否启用了大小写变换。(大小写变换极大地增加了密钥空间)
  • --output:将条目写入的输出文件名。注意,如果未指定,Prince-Ling 将输出单词到 stdout,这在打印非 ASCII 字符时可能会导致问题,具体取决于使用的 shell。
  • --all_lower:仅生成小写单词用于 PRINCE 字典。当攻击不区分大小写的哈希,或者计划以其他方式应用针对性的大小写变换时,这很有用。

使用 John the Ripper 破解密码的示例

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

贡献

如果您发现任何错误,或者有希望添加的功能,请在此 GitHub 页面打开一个 issue。我也接受 pull request,但理想情况下,请将 pull request 链接到某个 issue,以便我能更轻松地审查、提问并更好地理解您所做的更改。

使用 PCFG 对密码创建策略进行建模还有许多可以改进的地方。我非常欢迎新的想法、更改和建议。仅仅因为代码当前以某种方式工作并不意味着那是最佳选择。例如,当前方法中为字母字符串、数字、其他字符等生成掩码的基础结构,是因为它是“最简单”的实现选项而被选用的。我的团队曾激烈争论,更好的选择可能是从一个基础词开始,然后将其上的传统篡改规则建模为 PCFG 中的转换。因此,请随意在这段代码上大展拳脚!

下载工具