- C 92.4%
- Perl 2.8%
- Common Lisp 2.8%
- Shell 1%
- Python 0.4%
- Other 0.6%
Speed up optimised mode 0 by dropping the message words that are always zero The short length kernels of mode 0 feed all 16 message words into the MD5 rounds, although a candidate in that bucket cannot reach past the first 8. With -O the kernel accepts 31 characters at most, so w2 and the first two words of w3 are zero on every candidate, and the rounds that take them add a round constant to a zero. Under -a 0 a compiler sees that for itself and folds it away. Under -a 1 the two words are joined at a runtime offset, so the zeroes are invisible to it and the rounds are emitted in full. The rounds that read those words now use MD5_STEP0, which takes the round constant on its own. The word holding the message length keeps its ordinary round, and the kernels for the longer length buckets are untouched, because a candidate there does reach w2. Combinator attacks gain throughout. 3 runs of each build alternated over 25 second windows: ``` Intel Arc A770 OpenCL 7.87 -> 15.10 GH/s +92.0 percent Radeon RX 7900 XTX HIP 30.77 -> 39.31 GH/s +27.7 percent Radeon Pro W5700X Metal 7.68 -> 9.07 GH/s +18.1 percent RTX A400 CUDA 2.29 -> 2.68 GH/s +16.8 percent GeForce RTX 4090 CUDA 67.87 -> 78.82 GH/s +16.1 percent Radeon RX 9070 XT HIP 23.71 -> 27.45 GH/s +15.8 percent GeForce RTX 2080 Ti CUDA 13.35 -> 15.33 GH/s +14.8 percent Core i5-9600K OpenCL CPU 0.30 -> 0.33 GH/s +10.2 percent ``` Straight attacks are unchanged across the same devices, which is what the compiler already doing the work predicts. |
||
|---|---|---|
| .github | ||
| bridges/subs | ||
| charsets | ||
| deps | ||
| docker | ||
| docs | ||
| extra/tab_completion | ||
| feeds | ||
| include | ||
| masks | ||
| modules | ||
| obj | ||
| OpenCL | ||
| pcfg | ||
| Python | ||
| rules | ||
| Rust | ||
| src | ||
| tables | ||
| tools | ||
| tunings | ||
| .appveyor.yml.old | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| AGENTS.md | ||
| BUILD.md | ||
| BUILD_Android.md | ||
| BUILD_CYGWIN.md | ||
| BUILD_Docker.md | ||
| BUILD_macOS.md | ||
| BUILD_MSYS2.md | ||
| BUILD_WSL.md | ||
| CONTRIBUTING.md | ||
| example.dict | ||
| example0.cmd | ||
| example0.hash | ||
| example0.sh | ||
| example400.cmd | ||
| example400.hash | ||
| example400.sh | ||
| example500.cmd | ||
| example500.hash | ||
| example500.sh | ||
| hashcat.hcstat2 | ||
| Makefile | ||
| README.md | ||
| RUNTIME_Docker.md | ||
| SECURITY.md | ||
hashcat
hashcat is a highly optimized password recovery platform for GPUs, CPUs, and large distributed systems.
Features
- World's fastest password cracker
- World's first and only in-kernel rule engine
- Free and open source, under the MIT license
- Multi-OS: Linux, Windows and macOS
- Multi-backend: CUDA, HIP, Metal and OpenCL
- Multi-device: several devices, and mixed device types, in one system
- Multi-hash: cracks large numbers of hashes at once
- Over 590 hash modes, each written with performance in mind
- 10 attack modes: wordlist, combination, brute-force, PCFG, table, two hybrids, a mask that says where the word goes, generic plugin feeds and association
- Assimilation bridge: add a hash mode in C, Python or Rust, without writing a kernel
- Brain: skips candidates an earlier session already tried
- Distributed cracking networks, using an overlay
- Reads candidates from a wordlist, from stdin, or from another program
- Markov chain keyspace ordering, so the likely candidates come first
- Automatic performance tuning per device
- Interactive pause and resume
- Named sessions, and restore after an interruption
- Built-in benchmark
- Integrated thermal watchdog
- Hex salt and hex charset, for hashes and character sets that are not text
- Encrypted plains: crack a hash for someone else without being able to read the password
- Keyboard layout mapping, for full disk encryption passwords typed on a non-US keyboard
License
hashcat is licensed under the MIT license. See docs/license.txt.
Installation
Download the latest release and unpack it where you want it. Use 7z x when unpacking from the command line, so the full file paths stay intact.
Your platform may also provide packages.
Building
Building from source is optional. The release package is the same program, and a binary you build yourself will not crack any faster. Build it if you want a change of your own, a fix that is in master but not yet released, or a platform we do not ship a binary for.
See BUILD.md for how.
Tests:
| Build | BSD | Rust |
|---|---|---|
Usage and help
Start with --help, also kept in the tree as docs/hashcat-help.md. One example hash per mode is in docs/hashcat-example-hashes.md.
The wiki and the FAQ go further. The forum holds years of answered questions. If you still need help from a real human, come to Discord.
Documentation
The docs directory covers each feature. The ones people ask about most:
- Plugin development guide, for adding a hash mode
- Assimilation bridge, and its Python and Rust quickstarts
- Generic attack mode and PCFG
- Brain, slow candidates, encrypted plains
- Keyboard layout mapping
- Compression libraries, for reading gzip, xz and zstd files
- Release notes for v7.1.0, and the full changelog
Contributing
Contributions are welcome. CONTRIBUTING.md has the code style, what a pull request needs, and how to test a change before you send it.
Security
SECURITY.md has how to report a vulnerability, and what counts as one.