1
0
mirror of https://github.com/hashcat/hashcat.git synced 2025-07-04 13:52:40 +00:00
hashcat/docs/hashcat-python-plugin-quickstart.md
Jens Steube ac2ed9f402 - Remove old iconv patches (replaced by cmake)
- Replace Queues in hcmp/hcsp and make code more pythonic
- Synchronize python thread in hcmp count with detected cores
- Move setting PYTHON_GIL to shared.c
- Fix allocating and freeing aligned memory
- Update BUILD guides for WSL and macOS
- Fix python plugin documentation for macOS
2025-06-05 06:56:38 +02:00

88 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Hashcat Python Plugin Quickstart
## Introduction
Hashcat v7 introduces a `Python plugin bridge` that allows you to write and integrate custom hash-matching algorithms directly in Python. This plugin system fits into the regular cracking workflow by replacing or extending internal kernel routines.
When enabled, Hashcat uses the plugins `calc_hash()` function to compute hash candidates for verification, making it easy to experiment with new or obscure algorithms without modifying core C code or writing OpenCL/CUDA kernels.
This guide demonstrates how to quickly customize such an algorithm using pure Python. Whether you're prototyping a new hash mode, supporting a proprietary format, or simply prefer high-level development, Python plugins make the process fast and straightforward.
No C required. No recompilation. Just write your logic in Python using `calc_hash()`, and you're ready to crack.
You can use any Python modules you like.
## Quick Start
A benchmark is a good way to verify that your setup is working correctly.
Hashcat mode `73000` is preconfigured to load a generic Python plugin from the source file `Python/generic_hash_mp.py`:
```
hashcat -m 73000 -b
```
If you encounter issues with your Python installation, refer to `hashcat-python-plugin-requirements.md`.
To learn how to modify the plugin source, see `hashcat-python-plugin-development-guide.md`.
## Yescrypt in One Line
### Generate a Yescrypt Test Hash
```
echo password | mkpasswd -s -m yescrypt
```
Example output:
```
$y$j9T$uxVFACnNnGBakt9MLrpFf0$SmbSZAge5oa1BfHPBxYGq3mITgHeO/iG2Mdfgo93UN0
```
### Prepare the Hash Line for Hashcat
```
$y$j9T$uxVFACnNnGBakt9MLrpFf0$SmbSZAge5oa1BfHPBxYGq3mITgHeO/iG2Mdfgo93UN0*$y$j9T$uxVFACnNnGBakt9MLrpFf0$
```
(Use the full hash before the `*` and the salt portion after the `*`.)
Hashcat modes `73000` and `72000` are generic modes that do not parse the hash, which can lead to redundancy.
Refer to `hashcat-python-plugin-development-guide.md` to learn how to develop plugins for the generic hash mode.
### Plugin Code
Install the required module:
```
pip install pyescrypt
```
Then in your plugin (either `generic_hash_mp.py` for `-m 73000` or `generic_hash_sp.py` for `-m 72000`):
**Note for Windows and MacOS users:** Mode `73000` automatically switches to `generic_hash_sp.py`, so be sure to edit that file.
```python
from pyescrypt import Yescrypt, Mode
# Self-test pair
ST_HASH = "$y$j9T$uxVFACnNnGBakt9MLrpFf0$SmbSZAge5oa1BfHPBxYGq3mITgHeO/iG2Mdfgo93UN0*$y$j9T$uxVFACnNnGBakt9MLrpFf0$"
ST_PASS = "password"
def calc_hash(password: bytes, salt: dict) -> str:
return Yescrypt(n=4096, r=32, p=1, mode=Mode.MCF).digest(
password=password,
settings=hcshared.get_salt_buf(salt)
).decode("utf-8")
```
Thats it.
### Run Regularly
```
hashcat -m 73000 yescrypt.hash wordlist.txt
```