RSMangler:高级密码字典生成与变形工具解析

RSMangler是一款专为渗透测试设计的密码字典生成工具,支持单词排列组合、大小写变换、1337语种转换、数字年份添加等高级变形功能,通过CRC32去重机制优化内存效率,适用于密码破解和网络安全评估场景。

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
  • 多种大小写转换
  • 1337语种替换
  • 单词反转
  • 在结尾添加"ed"和"ing"
  • 单词重复

1.1版本新增变形功能:

  • 在开头和结尾添加1990年至当前年份的所有年份
  • 在开头和结尾添加"sys"、“admin”、“pw"和"pwd”

初始单词表可通过文件指定或通过STDIN管道输入。默认输出到STDOUT(屏幕),也可通过--output参数输出到文件。

默认情况下,脚本不会输出任何重复的变形单词。1.5版本之前,通过在内存中缓存所有变形单词并使用uniq函数去除重复项来实现此功能,这导致应用需要存储大量字符串而占用极高内存。根据Thomas d’Otreppe的建议,现在应用会生成每个单词的CRC32值:若未见过该值则输出并存储CRC,若已见过则丢弃该单词。这样可以在生成变形词时立即输出,同时仅需存储整数值而非完整字符串,大幅降低内存占用。也可禁用去重功能以提升输出速度并减少内存使用。

下载

可从GitHub仓库获取副本。

安装

只需使脚本可执行,不依赖任何外部gem或库。

使用说明

注意:所有变形选项默认开启,以下参数用于关闭对应功能。

 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: 1337语种替换
--full-leet, -T: 全可能1337替换
--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

  • 停止在内存中缓存输出
  • 添加允许输出重复项的选项(降低内存使用)
  • 添加输出到文件功能
  • 改进1337转换规则

23.10.2012 - v1.4

  • 添加完整1337语种选项(感谢Felipe Molina @felmoltor)
  • 增加Ruby 1.9.x支持

24.08.2010 - v1.1

  • 新增三种变形功能:年份、首字母缩写和常见词添加

13.07.2010 - v1.0

  • 初始版本

许可证

本项目基于知识共享署名-相同方式共享 2.0 英国: 英格兰与威尔士许可协议发布。

致谢

感谢 Thomas d’Otreppe 在项目停滞5年后协助重启项目。 感谢 Felipe Molina 提供初始1337语种转换功能。 感谢 Gavin Watson 提出本项目原始构想。

问题反馈

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