psudohash:基于 Python 的密码列表生成工具项目

Generates millions of keyword-based password mutations in seconds.

分支2Tags2
文件最后提交记录最后更新时间
3 年前
4 年前
1 年前
3 年前
1 年前

psudohash

Python 3.x License

v1.1.0 版本的酷炫新特性

特别感谢 DavidAngelos
▶️ 在每个步骤中添加了进度条,用于跟踪执行情况。
▶️ 新增选项:

  • 按序组合-i / --inorder):仅按原始顺序组合关键词(例如 foo,bar,bazfoo, bar, baz, foobar, foobaz, barbaz, foobarbaz)。
  • 全序组合-c / --combinations):为每个子集生成所有可能的排序(例如 foo,bar,bazfoo, bar, baz, foobar, foobaz, barfoo, …, bazbarfoo)。
  • 自定义分隔符--sep <string>):组合单词时,在标记之间插入此字符串(默认无分隔符)。
  • 最大组合数量--max-combine <N>):限制组合在一起的原始关键词数量(默认值:2)。
  • 最终单词的最小/最大长度过滤--minlen/--maxlen <N>):仅保留具有所需长度的单词来过滤最终的单词列表。

用途

Psudohash 是一款密码列表生成工具,用于精心策划暴力破解攻击和哈希破解。它模拟人类常用的某些密码创建模式,例如用符号或数字替换单词中的字母(leet 替换)、使用字符大小写变化、在主密码前后添加常见的填充内容等等。它基于关键词且高度可定制。🎥 -> 视频演示

企业环境渗透测试

系统管理员和其他员工在设置密码时,通常会使用公司名称的变体(例如 Am@z0n_2022)。网络设备(Wi-Fi 接入点、交换机、路由器等)、应用程序乃至域账户通常都是这种情况。使用最基本的选项,psudohash 就能基于常见的字符替换模式(可自定义)、大小写变化、常用填充字符串等,生成包含一个或多个关键词所有可能变体的单词列表。请看以下示例:

image

自定义设置

特殊字符替换(Leet Character Substitution)

本脚本采用以下字符替换规则。您可以通过编辑 psudohash.py 文件中的 transformations 列表,并遵循下方展示的默认数据结构,来添加或修改字符替换映射:

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,bazfoo, bar, baz, foobar, foobaz, barbaz, foobarbaz)。

  • -c, --combinations
    生成每个子集的所有排列(最多 --max-combine 个关键词)(例如 foo,bar,bazfoo, bar, baz, foobar, foobaz, barfoo, …)。

  • --max-combine <N>(默认值:2)
    连接成一个基础字符串的原始关键词的最大数量。

  • --sep <string>
    连接词语时(使用 -i-c),在此字符串置于标记之间。默认为空字符串。

  • --minlen <N>
    丢弃任何长度短于 N 个字符的最终密码。

  • --maxlen <N>
    丢弃任何长度长于 N 个字符的最终密码。

  • -an, --append-numbering <LEVEL>
    将编号后缀(零填充至 <LEVEL> 位数字)附加到每个词语变体。

  • -nl, --numbering-limit <LIMIT>
    附加数字时计数的最大数值(默认值:50)。

  • -y, --years <years>
    将一个或多个年份附加到每个变体(例如 1990-20002022,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 艺术横幅。

使用示例

  1. 无多词(仅单个词)

    ./psudohash.py -w foo,bar,baz -cpa
    # → foo, bar, baz
    
  2. 按顺序连接(-i,默认最多 2 个词)

    ./psudohash.py -w foo,bar,baz -i
    # → foo, bar, baz, foobar, foobaz, barbaz
    
  3. 全顺序组合(-c,默认最多 2 个词)

    ./psudohash.py -w foo,bar,baz -c
    # → foo, bar, baz, foobar, foobaz, barfoo, barbaz, bazfoo, bazbar
    
  4. 更改连接词语之间的分隔符

    ./psudohash.py -w foo,bar,baz -i --sep "_"
    # → foo, bar, baz, foo_bar, foo_baz, bar_baz
    
  5. 长度过滤(--minlen/--maxlen

     ./psudohash.py -w apple,banana -i --minlen 10
     # 警告:由于长度过滤,无法确定确切大小。
     # 最终输出示例可能包括 “applebanana”(11 个字符)、“bananaapple”(11 个字符)。
    
  6. 最多组合 3 个词(而非默认的 2 个)

使用技巧

  1. --numbering-limit 大于或等于任何年份输入的后两位数字时,组合使用 --years--append-numbering 选项,由于工具实现的变异模式,很可能会产生重复词汇。
  2. 如果你添加自定义填充值和/或修改源代码中预定义的常用填充值,并结合多个可选参数,可能会有小概率出现重复词汇。psudohash 包含词汇过滤控制,但为了速度,这些控制是有限的。
  3. 使用 --minlen--maxlen 时,脚本无法预先计算确切的词汇数量;你会看到“无法确定确切大小”的警告,并且会计算不应用此过滤器时的大小,最终大小会更小。

个人方面

说到人,我想我们或多或少都使用过由一个或多个对我们有意义的词变异而来的密码,例如我们的名字或妻子/孩子/宠物/乐队的名字,在末尾加上我们的出生年份,或者可能是像“!@#”这样的“超级安全”填充符。那么,你猜怎么着?

usage_example_png

未来展望

我正在收集有关常用密码创建模式的信息,以增强该工具的功能。

项目介绍

在数秒内生成数百万基于关键词的密码变异体。【此简介由AI生成】

定制我的领域
181.47 K175访问 GitHub