3个不稳定版本

0.2.1 2022年11月9日
0.2.0 2022年11月9日
0.1.0 2022年11月1日

#1284 in 文本处理

MIT许可证

97KB
2.5K SLoC

ctf-brute

crate

Rust的暴力破解工具。

关于

此crate是为捕获旗帜竞赛创建的辅助工具,在该竞赛中,您需要使用某些已知模式/限制进行暴力破解/猜测文本。

模式

模式支持类似正则表达式的语法,用于生成文本。

语法

名称 示例 描述
letter 'a' 单个字母
转义字母 '{' 由于语法使用,不能单独使用的转义字母。转义字符:"[](){}-"
ascii letter '\x4F' ASCII表示的字母
unicode letter '\u1F92F' Unicode表示的字母
range 'A-Z' 从较小到较大的所有字母(Unicode值)
高级范围 [abC-Ef-g] 多个范围和/或字母
group (pattern) 组合多个模式
repeater pattern{n} 重复模式n次
高级重复器 pattern{n,m} 在n和m之间重复模式
零重复器 pattern{,n} 在0和n之间重复模式

特殊符号

符号 描述 字符集
\w 小写字母 "abcdefghijklmnopqrstuvwxyz"
\W 大写字母 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
\l 字母 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
\d 数字 "0123456789"
\h 小写十六进制字母 "0123456789abcdef"
\H 大写十六进制字母 "0123456789ABCDEF"
\X 十六进制字母 "0123456789ABCDEFabcdef"
\p 标点符号 "!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
\n 小写字母数字 "0123456789abcdefghijklmnopqrstuvwxyz"
\N 大写字母数字 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
\m 字母数字 "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
\b 字母数字和标点符号 "!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
\a ascii 所有ascii字符
\U unicode 所有unicode字符

示例

use ctf_brute::ops::Pattern;

fn main() {
    let pattern = Pattern::from_pattern("(abc){1,4}").expect("Failed to parse pattern");
    for result in pattern.iter() {
        println!("{result}");
    }
}

输出

abc
abcabc
abcabcabc
abcabcabcabc
use ctf_brute::ops::Pattern;

fn main() {
    let pattern = Pattern::from_pattern(r"\d{3}").expect("Failed to parse pattern");
    for result in pattern.iter() {
        println!("{result}");
    }
}

输出

000
001
002
.
.
.
997
998
999
use ctf_brute::ops::Pattern;

fn main() {
    let pattern = Pattern::from_pattern(r"[A-C5-7x-z\]\{]").expect("Failed to parse pattern");
    for result in pattern.iter() {
        println!("{result}");
    }
}

输出

5
6
7
A
B
C
]
x
y
z
{
use ctf_brute::ops::Pattern;

fn main() {
    let pattern = Pattern::from_pattern(r"Text: [ab][C-E]a{0,4}").expect("Failed to parse pattern");
    for result in pattern.iter() {
        println!("{result}");
    }
}

输出

Text: aC
Text: aCa   
Text: aCaa  
Text: aCaaa 
Text: aCaaaa
Text: aD    
Text: aDa   
Text: aDaa  
Text: aDaaa
Text: aDaaaa
Text: aE
Text: aEa
Text: aEaa
Text: aEaaa
Text: aEaaaa
Text: bC
Text: bCa
Text: bCaa
Text: bCaaa
Text: bCaaaa
Text: bD
Text: bDa
Text: bDaa
Text: bDaaa
Text: bDaaaa
Text: bE
Text: bEa
Text: bEaa
Text: bEaaa
Text: bEaaaa
use ctf_brute::ops::Pattern;

fn main() {
    let pattern = Pattern::from_pattern(r"\b").expect("Failed to parse pattern");
    let results: Vec<String> = pattern.iter().collect();
    println!("{results:?}")
}

输出

["!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", 
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~"]

贡献

因为这是我第一次创建crate,我对Rust也相当陌生,因此这个crate需要帮助进行优化。如果您有任何建议,请随时提出问题,或者更好的是提交一个带有修复的pull request。我已经编写了很多单元测试,所以您不必担心功能会中断。

依赖项

约2MB