3个不稳定版本
0.2.1 | 2022年11月9日 |
---|---|
0.2.0 | 2022年11月9日 |
0.1.0 | 2022年11月1日 |
#1284 in 文本处理
97KB
2.5K SLoC
ctf-brute
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