- Probabilistic Context-Free Grammar (PCFG) password generator - Pure Go Edition
- pcfg-go is a Pure Go rewrite of the Python3 pcfg_cracker
- The goal of this Go implementation is to provide a substantial performance improvement over the original Python3 version, while also adding features such as supporting
$HEX[]input/output and multi-byte character support — which is not implemented in the Pure C pcfg_guesser - While the general functionality of pcfg-go is tested and working, this tool is still beta, so please report any issues you run across
- Credits for the original python3 pcfg_cracker belong to the author, lakiw
trainer:
go install github.com/cyclone-github/pcfg-go/cmd/trainer@mainpcfg_guesser:
go install github.com/cyclone-github/pcfg-go/cmd/pcfg_guesser@main- Performance — ~3× faster trainer, ~40× faster pcfg_guesser (see Benchmarks)
- $HEX[] input — Trainer accepts
$HEX[...]encoded passwords in the training wordlist (multi-byte support) - Ctrl+C handling — Pressing Ctrl+C auto saves session on pcfg_guesser
- Multi-keyboard layouts — QWERTY, AZERTY, QWERTZ, Dvorak, JCUKEN (Russian Cyrillic)
- Expanded TLD list — Legacy, ccTLDs, gTLDs (
.info,.xyz,.app,.dev, etc.), and short TLDs (.co,.io,.ai,.me,.gg); improves both website and email detection - Improved website detection — Broader URL/prefix detection (
http://,https://,www., etc.) and host extraction - Multi-threaded architecture — pcfg_guesser is multi-threaded for increased performance
- Compiled binary — No runtime, so fuss; pcfg-go uses statically compiled binaries for speed and easy deployment
- 1 million password training set
Python3 trainer: 97.2 secondsGo trainer: ~32 secondsGo trainer ~3× faster (~204% gain)
- benchmark:
Python3 pcfg_guesser ~280 K/sGo pcfg_guesser ~11.4 M/sGo pcfg_guesser ~40× faster (~3970% gain)
Train a new ruleset from wordlist:
trainer -r rule_name -t wordlist.txtGenerate guesses from a trained ruleset:
pcfg_guesser -r rule_nameSession save/restore:
pcfg_guesser -r rule_name -s my_session # save to my_session.sav on exit
pcfg_guesser -r rule_name -s my_session -l # load and resumePress Ctrl+C to save session and exit.
pcfg_guesser -r rule_name -s my_session | hashcat -m 0 hashes.txt...trainer
pcfg-go vs pcfg-python3 flags
| Go | Python3 | Description |
|---|---|---|
| -r | --rule | Ruleset name |
| -t | --training | Training wordlist (required) |
| -e | --encoding | File encoding |
| -C | --comments | Config comments |
| -S | --save_sensitive | Save emails, URLs |
| -p | --prefixcount | Lines prefixed with count |
| -n | --ngram | OMEN ngram size (2-5) |
| -a | --alphabet | Alphabet size for Markov |
| -c | --coverage | PCFG vs OMEN coverage |
| -m | --multiword | Pre-train multiword file |
| -h | --help | Help |
| -version | --version | Version info |
pcfg_guesser
pcfg-go vs pcfg-python3 flags
| Go | Python3 | Description |
|---|---|---|
| -r | --rule | Ruleset name |
| -s | --session | Session name |
| -l | --load | Load previous session |
| -n | --limit | Max guesses |
| -b | --skip_brute | Skip OMEN/Markov |
| -a | --all_lower | No case mangling |
| -d | --debug | Debug output |
| -h | --help | Help |
| -version | --version | Version info |
Requires Go and Git.
git clone https://github.com/cyclone-github/pcfg-go.git
cd pcfg-go
go mod tidy
mkdir -p bin
go build -ldflags="-s -w" -o bin/trainer ./cmd/trainer
go build -ldflags="-s -w" -o bin/pcfg_guesser ./cmd/pcfg_guesserInstall to $GOPATH/bin:
go install -ldflags="-s -w" ./cmd/trainer
go install -ldflags="-s -w" ./cmd/pcfg_guesser