Cracking Mastery

Pro Tips

These are battle-tested tips from real password cracking engagements and CTFs. Mastering them turns a casual user into an efficient cracker.

Tips

1Start with Single Mode

Always start every cracking session with --single. It uses user metadata (name, GECOS) to generate guesses and is fast enough to try on every hash. Many weak passwords use personal information directly.

2Use Sessions to Save Progress

Cracking large hash sets can take days. Always save your session with --session=myjob. If interrupted, resume with --restore=myjob instead of starting over.

3Combine Wordlist + Incremental Fallback

Combine --wordlist=rockyou.txt --incremental to run dictionary first, then automatically try brute force on remaining hashes. This handles both weak dictionary passwords AND unknown short PINs.

4Know Your Hash Speed

MD5/NTLM: billions/sec with GPU. bcrypt/scrypt/argon2: hundreds or less. Plan time estimates with john --test to benchmark. Slow hashes require longer wordlists + better rules.

5Filter Wordlists for Target

Instead of raw rockyou.txt, filter to relevant words: company name, location, products, years. Pre-processing to custom lists gives better hit rate and faster cracking cycle.

6Use Fork for CPU Parallelism

--fork=N splits work across N CPU cores. For wordlist mode, fork=4 on a 4-core machine nearly quadruples speed. Benchmark to find sweet spot.

7Compressed Wordlists

John reads .gz directly: --wordlist=rockyou.txt.gz. This saves disk space without slowing down I/O much.

8Mask Attacks for Known Patterns

For external mode or Hashcat-style masks: ?u?u?u?d?d?d for "AAA123" patterns. Not native to John — use external mode or hybrid attacks with rules.

9External Mode for Custom Generators

When you know the password structure (e.g., "CompanyYYMMDD!"), write an external mode or use --stdout piping to generate candidates efficiently.

10Format-Specific Optimization

For slow hashes (bcrypt, argon2), disable rules — each guess already costs 100ms+. With wordlists, focus on quality over quantity. For fast hashes, use huge wordlists + Jumbo rules.

11Hybrid Wordlist+Brute Force with Rules

Instead of pure incremental, use --rules=Wordlist to append numbers or --rules=Jumbo for permutations. This gives incremental-like coverage with dictionary base.

12Remove Duplicates & Sort Hash Files

Sort and deduplicate your hash file: sort hashes.txt | uniq > clean.txt. Prevents redundant work and avoids counting cracked passwords incorrectly.

13Benchmark Before Investing Time

Run john --test to see guesses/sec for every format on your hardware. This informs whether GPU or CPU paths are better, and whether brute force is feasible.

14Maximize RAM for Slow Hashes

Memory-hard hashes (scrypt, argon2) run faster with more RAM. Stop other memory-hungry processes to give John full access to system memory during cracking.

15Use Multiple Wordlists Sequentially

Feed several wordlists one after another (multiple --wordlist flags). John exhausts the first before moving to the second. Order by likelihood.

16Exploit Password Reuse

If you crack one hash format, try the same password on other accounts/hashes. Add --users to target specific accounts, or use --show to export results.

17Check for Already-Cracked Hashes

Use john --show hashes.txt to list cracked passwords. This also removes them from further attempts. Keep a master cracked.txt list across engagements.

18Leverage GPU with OpenCL

Build John with --enable-opencl for GPU acceleration. Use formats with -opencl suffix (md5-opencl, sha256-opencl). GPU can be 100-1000x faster than CPU.

19Limit Brute-Force for Specific Patterns

Use --max-length=N with incremental mode to restrict search space to short passwords you can realistically exhaust.

20Watch Progress with --status

For named sessions, run john --status=myjob in another terminal to see current rate, elapsed time, and current candidate.

Benchmark Your System

Before committing hours to a cracking session, benchmark the format to gauge feasibility:

Run full benchmark

bash
1john --test

Test single format

bash
1john --format=sha512crypt --test

Test with OpenCL GPU

bash
1john --format=md5-opencl --test

Info

Typical speeds on modern 8-core CPU + good GPU (RTX 3090): NTLM 20B p/s, MD5 40B p/s, bcrypt 200k p/s, argon2 <1000 p/s.

Advanced Usage Patterns

Hybrid mode with stdin piping

bash
1crunch 6 6 abc123 | john --stdin --format=raw-md5 hashes.txt

Extract uncracked hashes only

bash
1john --show --left hashes.txt > remaining.txt

Monitor session status

bash
1john --status=myjob

Generate candidates to stdout

bash
1john --stdout --wordlist=rockyou.txt --rules=Jumbo | head -100

Useful to preview your rule expansion without cracking.