RSMangler:强大的密码字典生成与变形工具

RSMangler是一款基于Ruby的密码字典生成工具,能够对输入词表进行多种变形操作,包括排列组合、大小写转换、leet语替换、数字年份添加等,支持去重和输出到文件,适用于密码破解和安全性测试场景。

RSMangler

RSMangler 接收一个词表并对其执行多种变形操作,类似于 John the Ripper 所做的处理,主要区别在于它会首先获取输入词,生成所有排列组合和首字母缩写(按文件中出现的顺序),然后再应用其余变形操作。例如,给定以下三个输入词:

1
2
3
freds
national
bank

RSMangler 会生成以下初始词表:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
freds
national
bank
fredsnational
fredsbank
nationalfreds
nationalbank
bankfreds
banknational
fredsnationalbank
fredsbanknational
nationalfredsbank
nationalbankfreds
bankfredsnational
banknationalfreds
fnb

每个新生成的词都会进一步接受其他变形操作。因此,强烈建议在启用排列模式(默认)时使用非常小的词表。3 个起始词会生成包含 5345 个词的最终列表,而 5 个起始词会生成包含 108557 个词的列表。作为测试,我们尝试使用几百个词,当进程内存使用达到 3G 时放弃了。

如果尝试使用超过 5 个词的文件,将会收到警告并可以选择中止。

其他变形操作包括在词首和词尾添加数字 1 到 123、01 到 09,各种大小写转换、leet 语替换、词反转、在词尾添加 ed 和 ing,以及重复词。

1.1 版本中的新变形操作包括在词首和词尾添加 1990 年到当前年份的所有年份,以及在词首和词尾添加 sys、admin、pw 和 pwd。

初始词表可以指定为文件,也可以通过 STDIN 管道输入。默认情况下,输出到 STDOUT(屏幕),但可以通过 --output 参数发送到文件。

默认情况下,脚本不会输出任何重复的变形词。在 1.5 版本之前,这是通过在内存中缓存所有变形词并在发送到屏幕之前使用 uniq 函数去除任何重复项来实现的。这导致应用程序使用大量内存,因为它必须在最终运行输出之前存储可能数千个字符串。根据 Thomas d’Otreppe 的建议,应用程序现在生成每个词的 CRC32,如果之前没有见过该值,则将其发送输出并存储 CRC。如果已经见过,则直接丢弃该词。这使得变形词可以在生成后立即输出,同时将内存使用保持在最低水平,因为每个词只需要存储一个整数而不是完整字符串。还可以禁用去重选项,这样可以加快输出速度并减少内存使用。

下载

您可以从我的 GitHub 仓库获取副本。

安装

只需使脚本可执行,它不依赖任何 gems 或外部内容。

使用说明

注意,所有变形选项默认都是开启的,这些参数会关闭它们。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
rsmangler.rb [OPTION]

--help, -h: 显示帮助
--file, -f: 输入文件,使用 - 表示 STDIN
--perms, -p: 对所有词进行排列
--double, -d: 重复每个词
--reverse, -r: 反转词
--leet, -t: 对词进行 l33t 语替换
--full-leet, -T: 所有可能的 l33t 替换
--capital, -c: 将词首字母大写
--upper, -u: 将词转换为大写
--lower, -l: 将词转换为小写
--swap, -s: 交换词的大小写
--ed, -e: 在词尾添加 ed
--ing, -i: 在词尾添加 ing
--punctuation: 在词尾添加常见标点
--pna: 在词尾添加 01 - 09
--pnb: 在词首添加 01 - 09
--na: 在词尾添加 1 - 123
--nb: 在词首添加 1 - 123
--years: 在词首和词尾添加从 1990 到当前年份的所有年份
--acronym: 根据所有输入词按顺序创建首字母缩写并添加到词表
--common: 在词首和词尾添加以下词:admin, sys, pw, pwd
--force: 不显示关于列表长度的警告
--allow-duplicates: 允许输出列表中出现重复项

变更日志

28.09.2017 - v1.5

  • 停止在内存中缓存输出
  • 添加允许输出中重复项的选项 - 使用更少内存
  • 添加输出到文件的选项
  • 改进了 leet 转换

23.10.2012 - v1.4

  • 添加完整 leetspeak 选项,感谢 Felipe Molina (@felmoltor)
  • 添加对 ruby 1.9.x 的支持

24.08.2010 - v1.1

  • 添加三个新变形操作 - years、acronym 和 common。

13.07.2010 - v1.0

  • 初始发布

许可证

本项目根据 Creative Commons Attribution-Share Alike 2.0 UK: England & Wales 发布。

致谢

感谢 Thomas d’Otreppe 在项目被忽视 5 年后帮助其重生。 感谢 Felipe Molina 提供了最初的 l33t 语功能。 感谢 Gavin Watson 提出了这个项目的原始想法。

错误、评论、反馈

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计