Quinto
"I'm not a thief. I'm a locksmith." — Quinto, master safecracker
Quinto is a CLI tool that automates hash cracking. Give it a hash string or a password-protected file — it figures out the hash type, selects an attack plan, and runs hashcat and John the Ripper so you don't have to.
Designed for CTF competitions, authorized penetration testing, and security research.
How it works
- Identifies the hash type using prefix matching, name-that-hash, and hashid
- Detects GPU availability via nvidia-smi, falls back to CPU mode
- Selects an attack plan based on whether the hash is fast or slow (key-stretching algorithms like bcrypt get a reduced plan) and your
--patiencelevel - Runs attacks in sequence: wordlist → wordlist + rules → masks → EFF diceware passphrases
- Saves session state after each attack so you can
--resumeif interrupted
For password-protected files (.zip, .pdf, Office docs, etc.), it first extracts the hash using John's *2john tools, then cracks it with wordlists.
Prerequisites
Quinto orchestrates external tools — you need to install these separately before it will work.
Required
hashcat (v6+) — the primary cracking engine:
# Option A: GitHub release (recommended — always up to date)
wget https://github.com/hashcat/hashcat/releases/latest/download/hashcat-7.1.2.7z
7z x hashcat-7.1.2.7z && sudo mv hashcat-7.1.2 /opt/hashcat
sudo ln -sf /opt/hashcat/hashcat.bin /usr/local/bin/hashcat
# Option B: package manager (may be outdated)
sudo apt install hashcat
John the Ripper (Jumbo build) — handles formats hashcat doesn't support, and extracts hashes from protected files:
sudo apt install -y build-essential libssl-dev zlib1g-dev yasm libgmp-dev libpcap-dev
git clone --depth 1 https://github.com/openwall/john.git ~/john-build
cd ~/john-build/src && ./configure && make -sj$(nproc) && cd ~
# Create wrapper scripts (symlinks break John's config lookup):
for f in ~/john-build/run/john ~/john-build/run/*2john*; do
name=$(basename "$f")
printf '#!/bin/sh\nexec "%s" "$@"\n' "$f" | sudo tee "/usr/local/bin/$name" > /dev/null
sudo chmod +x "/usr/local/bin/$name"
done
rockyou.txt — the baseline wordlist (required for basic functionality):
sudo mkdir -p /usr/share/wordlists
sudo wget -q https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt \
-O /usr/share/wordlists/rockyou.txt
Recommended
SecLists — additional wordlists (darkweb2017, xato, probable, NCSC, Pwdb):
sudo git clone --depth 1 https://github.com/danielmiessler/SecLists /usr/share/seclists
crackstation.txt — massive 15GB wordlist:
Download from crackstation.net and place at /usr/share/wordlists/crackstation.txt
OneRuleToRuleThemAll — powerful external rule file:
sudo wget -q https://raw.githubusercontent.com/NotSoSecure/password_cracking_rules/master/OneRuleToRuleThemAll.rule \
-O /usr/share/hashcat/rules/OneRuleToRuleThemAll.rule
EFF diceware wordlist — for passphrase attacks:
sudo wget -q https://www.eff.org/files/2016/07/18/eff_large_wordlist.txt \
-O /usr/share/wordlists/eff-diceware.txt
Installation
pip install quinto
On first run, Quinto checks your environment and reports what's available:
quinto --deps
This also generates a config file at ~/.config/quinto/config.toml (Linux) that you can edit to point to custom wordlist/rule paths.
Usage
quinto <hash_string>
quinto <protected_file>
quinto --resume
quinto --patience=quick|normal|patient <hash>
Crack a raw hash
quinto 5f4dcc3b5aa765d61d8327deb882cf99
Quinto identifies the type (MD5 here), then runs through wordlists, rules, and masks until it finds the plaintext or exhausts the plan.
Crack a password-protected file
quinto archive.zip
quinto document.pdf
quinto database.kdbx
Supported file types: .zip, .rar, .7z, .pdf, .kdbx (KeePass), .doc/.docx, .xls/.xlsx, .ppt/.pptx, SSH private keys.
Patience levels
quinto --patience=quick hash # rockyou only — fast, lower coverage
quinto --patience=normal hash # rockyou + crackstation (default)
quinto --patience=patient hash # everything: all wordlists x all rules + extended masks
| Level | Wordlists | Rules | Masks | Passphrases |
|---|---|---|---|---|
quick |
rockyou | all | tier 1 | — |
normal |
rockyou, crackstation | all | tier 1–2 | 2-word |
patient |
all | all | tier 1–3 | 3-word |
Resume an interrupted session
Sessions are saved after each completed attack. If a crack is interrupted (Ctrl+C, timeout, system sleep), resume where you left off:
quinto --resume
Sessions expire after 24 hours.
Attack strategy
Fast hashes (MD5, SHA1, SHA256, NTLM, ...)
- Wordlist straight
- Wordlist + best64 rules
- Wordlist + OneRuleToRuleThemAll
- Wordlist + dive rules
- Smart mask files (
.hcmask— pattern-based brute force) - EFF diceware passphrase combinator (1-word, 2-word, 3-word)
Slow hashes (bcrypt, scrypt, Argon2, yescrypt, phpass, ...)
Reduced plan — brute force is not practical:
- rockyou straight
- rockyou + best64 (normal+)
- crackstation + best64 (patient)
- EFF diceware passphrase (1-word, 2-word)
Argon2 variants are routed directly to John the Ripper (hashcat doesn't support them).
Supported hash types
Quinto maps to hashcat modes for 70+ algorithm names including:
| Category | Algorithms |
|---|---|
| General | MD5, MD4, SHA1, SHA224, SHA256, SHA384, SHA512, SHA3-256, SHA3-512 |
| Windows | NTLM, Net-NTLMv1, Net-NTLMv2, LM |
| Unix | md5crypt, sha256crypt, sha512crypt, yescrypt, scrypt |
| KDF | bcrypt, Argon2i/d/id, PBKDF2-SHA256/SHA512, scrypt |
| Web/CMS | phpass (WordPress/phpBB), Django PBKDF2, LastPass |
| Database | MySQL 3.2.3, MySQL 4.1/5.x |
| Network | WPA/WPA2, WPA-PMKID, Cisco Type 8/9 |
| Crypto | Whirlpool, RIPEMD-160, BLAKE2, Tiger, Snefru, CRC32 |
| Other | KeePass, 1Password, VeraCrypt, Android FDE, LUKS |
Prefixed/salted formats (e.g., $2b$, $6$, $argon2id$, $P$) are identified from the hash string directly with 100% confidence.
Configuration
On first run, Quinto auto-generates a config template at:
- Linux:
~/.config/quinto/config.toml - macOS:
~/Library/Preferences/quinto/config.toml - Windows:
%APPDATA%\quinto\config.toml
All values are optional — Quinto auto-discovers tools and wordlists from common install locations. Uncomment any line to override:
[wordlists]
rockyou = "/data/wordlists/rockyou.txt"
crackstation = "/data/wordlists/crackstation.txt"
[rules]
onetorule = "/opt/hashcat/rules/OneRuleToRuleThemAll.rule"
[paths]
mask_dir = "/opt/hashcat/masks"
Ethical use
Quinto is intended for:
- CTF competitions
- Authorized penetration testing engagements
- Security research on hashes you own or have explicit permission to test
- Recovering your own passwords
Only use this tool against systems and data you own or have written authorization to test. Unauthorized access to computer systems is illegal in most jurisdictions.
License
MIT
Metadata
Release files for quinto 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| quinto-0.1.0.tar.gz | 26.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| quinto-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 54.7 kB
Release files / quinto-0.1.0.tar.gz
| Download URL | quinto-0.1.0.tar.gz |
|---|---|
| Size | 26.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
310f46cd41983da1598690a4d5eb2c3a2a792cf2830b1ad5a10fa20219230e77
|
|
BLAKE2b-256 checksum How to use checksums |
c48f0c1ef9e161be6e1c4af6771b8325b538402ae53db510f87577314bcbbc42
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.8.10
|
Release files / quinto-0.1.0-py3-none-any.whl
| Download URL | quinto-0.1.0-py3-none-any.whl |
|---|---|
| Size | 28.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
53441931c66230274e3296c33a5ef7f55546a185aca040e84f1b63fd2c21c653
|
|
BLAKE2b-256 checksum How to use checksums |
552cb32517b8cda9f1082560b17a0fe7968839e7ee57c5c236b56a603a23fe56
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.8.10
|