
hate_crack v2.14.3
TrustedSec टीम की ओर से Hashcat के माध्यम से क्रैकिंग पद्धतियों को स्वचालित करने के लिए एक उपकरण।
___ ___ __ _________ __
/ | \_____ _/ |_ ____ \_ ___ \____________ ____ | | __
/ ~ \__ \\ __\/ __ \ / \ \/\_ __ \__ \ _/ ___\| |/ /
\ Y // __ \| | \ ___/ \ \____| | \// __ \\ \___| <
\___|_ /(____ /__| \___ >____\______ /|__| (____ /\___ >__|_ \
\/ \/ \/_____/ \/ \/ \/ \/
स्थापना
स्रोत से स्थापित करना ही एकमात्र समर्थित मार्ग है। hate_crack को PyPI पर वितरित नहीं
किया गया है: pip install hate-crack एक 0.0.0 प्लेसहोल्डर पर हल होता है जो जानबूझकर विफल होता है और यहाँ वापस इंगित करता है। नाम केवल इसलिए रखा गया है ताकि कोई और इसके अंतर्गत एक समान दिखने वाला प्रकाशित न कर सके — देखें
packaging/pypi-placeholder/।
1. hashcat स्थापित करें
hashcat को आपके PATH में स्थापित और उपलब्ध होना चाहिए:
Ubuntu/Kali:```bash sudo apt-get install -y hashcat
macOS (Homebrew):```bash
brew install hashcat
या https://hashcat.net/hashcat/ से एक पूर्व-निर्मित बाइनरी डाउनलोड करें और config.json में hcatPath को उसके स्थान पर सेट करें।
2. hate_crack डाउनलोड करें
सबमॉड्यूल्स के साथ क्लोन करें (hashcat-utils, princeprocessor, pcfg_cracker, और वैकल्पिक रूप से omen के लिए आवश्यक):```bash git clone --recurse-submodules https://github.com/trustedsec/hate_crack.git cd hate_crack
यदि आपने सबमॉड्यूल्स के बिना क्लोन किया है, तो उन्हें इनिशियलाइज़ करें:```bash
git submodule update --init --recursive
फिर ज़रूरत पड़ने पर कॉन्फ़िगरेशन को अनुकूलित करें। hate_crack दो कॉन्फ़िग फ़ाइलों का उपयोग करता है, जिनमें से प्रत्येक के पास सेटिंग्स का एक अलग सेट होता है:
config.json— वर्डलिस्ट पथ, मास्क, नियम, ट्यूनिंग, पॉटफ़ाइल, हैशकैट पथ, उम्मीदवार सीमाएँ, सूचना टॉगल, CLI प्राथमिकता डिफॉल्ट (35 सेटिंग्स)।.env— केवल थर्ड-पार्टी इंटीग्रेशन सेटिंग्स: Hashview और Hashmob क्रेडेंशियल, Pushover क्रेडेंशियल, Ollama, और pipal (14 सेटिंग्स)। git द्वारा ट्रैक नहीं की जाती, मोड0600पर बनाई जाती है।
यह रेखा वहाँ एक कारण से गिरती है: .env वह फ़ाइल है जो रहस्य रख सकती है। थर्ड-पार्टी सेवाओं के क्रेडेंशियल और कॉन्फ़िगरेशन अट्रैक्ड 0600 फ़ाइल में जाते हैं; hate_crack जो कुछ भी स्थानीय रूप से करता है वह config.json में रहता है, जो साझा करने, diff करने और अपने नोट्स में चेक करने के लिए सुरक्षित है। यही कारण है कि Pushover क्रेडेंशियल .env में हैं जबकि Pushover ऑन/ऑफ टॉगल config.json में हैं — टॉगल स्थानीय प्राथमिकताएँ हैं, रहस्य नहीं।
हर कुंजी का ठीक एक घर होता है। दूसरी फ़ाइल में रखी गई कुंजी को अनदेखा किया जाता है, और hate_crack उस फ़ाइल का नाम बताते हुए चेतावनी प्रिंट करता है जिसमें वह होनी चाहिए। किसी भी कुंजी को एक बार चलाने के लिए उसके पर्यावरण चर को निर्यात करके फिर भी ओवरराइड किया जा सकता है। अधिकांश उपयोगकर्ता इस चरण को छोड़ सकते हैं क्योंकि डिफ़ॉल्ट पथ आउट-ऑफ-द-बॉक्स काम करते हैं।
config.json स्थायी और प्रथम श्रेणी है — यह deprecated नहीं है और इसके हटाने की कोई समय-सीमा नहीं है। केवल इंटीग्रेशन सेटिंग्स स्थानांतरित हुईं।
एकल config.json से अपग्रेड कर रहे हैं? hate_crack पहली बार चलने पर इसे आपके लिए माइग्रेट करता है: इंटीग्रेशन सेटिंग्स को एक नई 0600 .env में कॉपी किया जाता है, फिर config.json से हटा दिया जाता है ताकि दोनों फ़ाइलें उन्हें एक साथ दावा न करें। यह प्रिंट करता है कि कौन सी कुंजियाँ स्थानांतरित हुईं (कभी उनके मान नहीं), और आपकी मूल फ़ाइल को छूने से पहले config.json.pre-split.bak के रूप में सहेजता है। config.json में बाकी सब कुछ बिल्कुल वैसा ही छोड़ा जाता है, जिसमें कुंजी क्रम भी शामिल है।
पहली बार चलाना: hate_crack दोनों फ़ाइलें आपके लिए बनाता है, इसलिए करने के लिए कुछ नहीं है। इसके बजाय .env को हाथ से सेट करने के लिए, ट्रैक किया गया टेम्पलेट कॉपी करें:```bash
cp .env.example .env
chmod 600 .env
`.env.example` commit किया जाता है और हर credential key खाली रखकर शामिल किया जाता है। `.env` को स्वयं **कभी भी** commit नहीं करना चाहिए — यह अपनी सामान्य बैकअप spellings सहित gitignore किया गया है, और hate_crack इसे हमेशा `0600` मोड (केवल owner पढ़/लिख सकता है) पर बनाता है। `.env.example` schema से generate होता है; `hate_crack/config_schema.py` बदलने के बाद इसे `uv run python -m hate_crack.config_writer` से regenerate करें।
### 3. निर्भरताएँ और hate_crack इंस्टॉल करें
सबसे आसान तरीका है `make` (या `make install`) चलाना, जो आपके OS को स्वतः पहचानता है और इन्हें इंस्टॉल करता है:
- बाहरी निर्भरताएँ (p7zip, transmission-daemon / transmission-remote)
- सबमॉड्यूल बनाता है (hashcat-utils, princeprocessor, pcfg_cracker, और वैकल्पिक रूप से omen)
- uv के माध्यम से Python निर्भरताएँ और `~/.local/bin/hate_crack` पर एक CLI shim```bash
make
यह idempotent है - यह पहले से इंस्टॉल किए गए टूल्स को छोड़ देता है। क्लीन रीइंस्टॉल करने के लिए:```bash make reinstall
**या निर्भरताएँ मैन्युअल रूप से स्थापित करें:**
### बाहरी निर्भरताएँ
ये कुछ डाउनलोड/निष्कर्षण प्रवाहों के लिए आवश्यक हैं:
- `7z`/`7za` (p7zip) — `.7z` संग्रह निकालने के लिए उपयोग किया जाता है।
- `transmission-daemon` / `transmission-remote` — Weakpass टोरेंट डाउनलोड करने के लिए उपयोग किया जाता है।
मैन्युअल स्थापना कमांड:
Ubuntu/Kali:```bash
sudo apt-get update
sudo apt-get install -y p7zip-full transmission-daemon
macOS (Homebrew):```bash brew install p7zip transmission-cli # provides transmission-daemon and transmission-remote
फिर Python निर्भरताएँ और CLI शिम इंस्टॉल करें:```bash
uv sync
mkdir -p ~/.local/bin
printf '#!/usr/bin/env bash\nset -euo pipefail\nexec uv run --directory %s python -m hate_crack "$@"\n' "$(pwd)" > ~/.local/bin/hate_crack
chmod +x ~/.local/bin/hate_crack
प्रोजेक्ट संरचना
मुख्य तर्क अब hate_crack/ के अंतर्गत मॉड्यूलों में विभाजित है:
hate_crack/cli.py: argparse सहायक और कॉन्फ़िग ओवरराइड।hate_crack/api.py: Hashview, Weakpass और Hashmob एकीकरण (डाउनलोड/मेन्यू/सहायक)।hate_crack/attacks.py: मेन्यू आक्रमण हैंडलर।hate_crack/hashmob_wordlist.py: Hashmob वर्डलिस्ट उपयोगिताएँ (पतला रैपर; api.py को कॉल करता है)।hate_crack/corpus_stats.py: संपूर्ण-कॉर्पस पासवर्ड आँकड़े, जिनका उपयोग कॉर्पस को LLM को वर्णित करने के लिए किया जाता है।hate_crack/plaintext.py: कॉर्पस लाइन से पासवर्ड पुनर्प्राप्त करता है (हैश-उपसर्ग हटाना,$HEX[...]डिकोडिंग); LLM मोड, corpus_stats और rulegen द्वारा साझा किया जाता है।hate_crack/llm.py: Atomic Agents के माध्यम से संरचित (JSON) LLM उम्मीदवार उत्पादन।hate_crack/menu.py: साझा मेन्यू रेंडरर, जिसमें वैकल्पिक तीर-कुंजी नेविगेशन शामिल है।hate_crack/noninteractive.py: स्क्रिप्टेड आक्रमण उप-कमांडों के लिए डिस्पैचर।hate_crack/notify/: सूचना पैकेज (Pushover बैकएंड, प्रति-क्रैक tailer)।hate_crack/username_detect.py:username:hashइनपुट फ़ाइलों का पता लगाता है ताकि hashcat के--usernameका निर्णय किया जा सके।hate_crack/formatting.py,hate_crack/progress.py: आउटपुट स्वरूपण और प्रगति प्रदर्शन सहायक।hate_crack/main.py: मुख्य CLI कार्यान्वयन।
शीर्ष-स्तरीय hate_crack.py मुख्य प्रवेश बिंदु बना रहता है और इन मॉड्यूलों का समन्वय करता है।
संदर्भ और धन्यवाद
यह प्रोजेक्ट कई बाहरी प्रोजेक्टों और सेवाओं पर निर्भर है तथा उनसे प्रेरित है। धन्यवाद:
- Hashview (http://github.com/hashview/)
- Weakpass (https://weakpass.com)
- Hashmob (https://hashmob.net)
उपयोग
make के साथ इंस्टॉल करने के बाद, hate_crack को कहीं से भी चलाएँ:```bash
hate_crack
or with arguments:
hate_crack <hash_file> <hash_type> [options]
वैकल्पिक रूप से, `uv` के माध्यम से चलाएँ:```bash
uv run hate_crack.py <hash_file> <hash_type>
एक टूल के रूप में चलाएँ (अनुशंसित)
रिपॉज़िटरी रूट से make का उपयोग करके इंस्टॉल करें - यह सबमॉड्यूल बनाता है और एसेट्स को बंडल करता है:```bash
cd /path/to/hate_crack
make
hate_crack
`make install` कमांड `~/.local/bin/hate_crack` पर एक bash shim बनाता है जो रिपॉजिटरी निर्देशिका से चलता है, इसलिए आपकी वर्तमान कार्यशील निर्देशिका चाहे जो भी हो, config और assets हमेशा मिल जाते हैं।
Config इन स्थानों पर भी खोजा जाता है:
- रिपॉजिटरी रूट और पैकेज निर्देशिका
- `~/.hate_crack`
**नोट:** `config.json` में `hcatPath` केवल hashcat बाइनरी के स्थान के लिए है (यदि hashcat PATH में है तो वैकल्पिक है)। Hate_crack assets (hashcat-utils, princeprocessor, pcfg_cracker, omen) रिपॉजिटरी निर्देशिका से लोड होते हैं और `make install` द्वारा स्वचालित रूप से बंडल कर दिए जाते हैं।
### स्क्रिप्ट के रूप में चलाएँ
स्क्रिप्ट `uv` shebang का उपयोग करती है। इसे executable बनाएँ और चलाएँ:```bash
chmod +x hate_crack.py
./hate_crack.py
आप Python का उपयोग सीधे भी कर सकते हैं:```bash python hate_crack.py
### गैर-इंटरैक्टिव / स्क्रिप्टेड उपयोग
स्वचालन के लिए आप मेनू को बायपास करते हुए सीधे एक एकल आक्रमण चला सकते हैं। आक्रमण का नाम पहला तर्क है, उसके बाद हैश फ़ाइल और hashcat हैश प्रकार आते हैं। इस मोड में प्रीप्रोसेसिंग प्रॉम्प्ट (computer-account filtering, LM-first brute force, duplicate-account dedup) अपने डिफ़ॉल्ट स्वतः स्वीकार कर लेते हैं। प्रक्रिया सफलता पर `0` और त्रुटि पर गैर-शून्य (हैश फ़ाइल गायब, गैर-संख्यात्मक हैश प्रकार, वर्डलिस्ट गायब, या अज्ञात रूल फ़ाइल नाम) के साथ बाहर निकलती है।```bash
# Quick crack: one wordlist + optional rule(s) from the rules directory
hate_crack quick hashes.txt 1000 --wordlist rockyou.txt --rules best64.rule
# Chain two rules in a single run
hate_crack quick hashes.txt 1000 --wordlist rockyou.txt --rules best64.rule+d3ad0ne.rule
# Run two rules as two separate passes
hate_crack quick hashes.txt 1000 --wordlist rockyou.txt --rules best64.rule d3ad0ne.rule
# Canned dictionary methodology (uses your configured wordlists)
hate_crack dict hashes.txt 1000
# Brute force lengths 1-8
hate_crack brute hashes.txt 1000 --min 1 --max 8
# Top-mask attack targeting ~4 hours
hate_crack topmask hashes.txt 1000 --target-time 4
समस्या निवारण
त्रुटि: अपडेट करते समय "would clobber existing tag"
एक पुरानी क्लोन अपडेट करने से इनकार कर सकती है, इस प्रकार की लंबी सूची प्रिंट करते हुए:``` ! [rejected] v2.5.0 -> v2.5.0 (would clobber existing tag)
यह जुलाई 2026 से पहले बनाए गए क्लोनों को प्रभावित करता है। प्रकाशित इतिहास को तब फिर से लिखा गया था ताकि कुछ ऐसी फ़ाइलों को हटाया जा सके जिन्हें कभी कमिट नहीं किया जाना चाहिए था, जिससे हर कमिट को एक नया ID मिला; इसलिए किसी पुराने क्लोन के टैग उन ऑब्जेक्ट्स की ओर इशारा करते हैं जो इस रिपॉजिटरी में अब मौजूद नहीं हैं, और git उस टैग को स्थानांतरित करने से इनकार करता है जो उसके पास पहले से मौजूद है। आपके चेकआउट में कुछ भी गलत नहीं है और कोई क्रैकिंग डेटा जोखिम में नहीं है।
एक बार के रीसेट से पुनर्प्राप्त करें। यह चेकआउट में स्थानीय कमिट और संपादनों को त्याग देता है, इसलिए यदि आपने git द्वारा ट्रैक की गई कोई भी चीज़ अनुकूलित की है (`config.json` के विपरीत, जो ट्रैक नहीं है), तो पहले उसे एक ब्रांच पर कमिट करें:```bash
cd /path/to/hate_crack
git fetch --tags --force origin
git checkout -B main origin/main
make install
--force यहाँ केवल टैग अपडेट करता है; यह आपके कमिट को नहीं छू सकता। उसके बाद
बिल्ट-इन अपडेटर सामान्य रूप से काम करता है। 2.18 से पहले के संस्करण यह
पुनर्प्राप्ति स्वयं नहीं कर सकते थे, यही कारण है कि इसे एक बार हाथ से करना पड़ता है।
त्रुटि: बिल्ड निर्देशिका मौजूद नहीं है
यदि आपको ऐसी त्रुटि दिखे:``` Error: Build directory /opt/hashcat/hashcat-utils does not exist. Expected to find expander at /opt/hashcat/hashcat-utils/bin/expander.
इसका मतलब है कि hate_crack एसेट्स इंस्टॉल किए गए पैकेज में शामिल नहीं थे।
**पथों को समझना:**
- `config.json` में `hcatPath` → **hashcat बाइनरी स्थान** की ओर इशारा करता है (वैकल्पिक, PATH में हो सकता है)
- `hashcat-utils/` और `princeprocessor/` → `make install` द्वारा पैकेज में बंडल किए जाते हैं
**समाधान:**
Makefile का उपयोग करके पुनः इंस्टॉल करें, जो सबमॉड्यूल्स बनाता है और टूल को इंस्टॉल करता है:```bash
cd /path/to/hate_crack # the repository checkout
make install
डिफ़ॉल्ट कॉन्फ़िगरेशन (config.json.example):
अधिकांश उपयोगकर्ता बिना कस्टमाइज़ेशन के डिफ़ॉल्ट का उपयोग कर सकते हैं:
hcatWordlists:./wordlists(रीपो रूट या HOME/.hate_crack के सापेक्ष)hcatOptimizedWordlists:./optimized_wordlists(क्विक क्रैक द्वारा उपयोग की जाने वाली निर्देशिका; यदि नहीं मिलती है तोhcatWordlistsपर फ़ॉल बैक करती है)rules_directory:./hashcat/rules(सबमॉड्यूल नियम शामिल करता है)hcatTuning: `` (खाली स्ट्रिंग - कोई डिफ़ॉल्ट ट्यूनिंग फ़्लैग नहीं)
उदाहरण config.json कस्टमाइज़ेशन:```json { "hcatPath": "/usr/local/bin", # Location of hashcat binary (optional, auto-detected from PATH) "hcatBin": "hashcat", # Hashcat binary name "hcatWordlists": "./wordlists", # Dictionary wordlist directory (relative or absolute) "rules_directory": "./hashcat/rules", # Rules directory (relative or absolute) "hcatTuning": "", # Additional hashcat flags (empty by default) ... }
**कॉन्फ़िगरेशन लोडिंग:**
- प्रत्येक कुंजी के लिए प्राथमिकता: `os.environ` > उस कुंजी की अपनी होम फ़ाइल (`.env` या `config.json`) > बिल्ट-इन डिफ़ॉल्ट
- गायब कुंजियाँ बिल्ट-इन डिफ़ॉल्ट पर वापस आ जाती हैं; `config.json.example` हर `config.json` कुंजी का दस्तावेज़ीकरण करता है
- दोनों फ़ाइलें एक-दूसरे से स्वतंत्र रूप से, इस क्रम में खोजी जाती हैं: **repo root**, फिर **installed package directory**, फिर **`~/.hate_crack`**। पहला मिलान जीतता है; यह सामान्य है कि दोनों फ़ाइलें अलग-अलग डायरेक्टरी से आएँ।
- पहली बार चलाने पर, दोनों बनाई जाती हैं — `config.json` को `config.json.example` से, `.env` को बिल्ट-इन डिफ़ॉल्ट से। यदि पुराने `config.json` में अभी भी इंटीग्रेशन कुंजियाँ हैं, तो उन्हें नए `.env` में कॉपी किया जाता है और hate_crack आपको बताता है कि `config.json` से कौन-सी कुंजियाँ हटानी हैं; यह उस फ़ाइल को स्वयं कभी संपादित नहीं करता।
- हर बार चलाने पर, hate_crack उन दो फ़ाइलों को प्रिंट करता है जिन्हें उसने वास्तव में लोड किया था: ```
[*] config.json: /home/you/.hate_crack/config.json
[*] .env: /home/you/.hate_crack/.env
उन दो पंक्तियों को पढ़ें, इससे पहले कि आप किसी ऐसी सेटिंग को डीबग करें जो "प्रभाव नहीं ले रही है"। वे खोज क्रम में दो जालों की वजह से मौजूद हैं:
- एक चेकआउट आपकी होम निर्देशिका से ऊपर होता है। रेपो रूट को पहले खोजा जाता है, इसलिए किसी भी चेकआउट में रखा
.envयाconfig.jsonजिसे आप टूल चलाते समय उपयोग करते हैं,~/.hate_crackवाले पर जीत जाता है — और टूल को किसी चेकआउट से चलाना ही वह चीज़ है जो पहली बार में वहाँ उन फ़ाइलों को बनाती है। - वर्तमान कार्यशील निर्देशिका कभी खोजी नहीं जाती। जिस निर्देशिका में आप खड़े हैं, उसमें मौजूद
.envको जानबूझकर अनदेखा किया जाता है: एंगेजमेंट निर्देशिकाएँ उन फ़ाइलों से भरी होती हैं जिन्हें कोई भी कॉन्फ़िगरेशन के रूप में नहीं चाहता था। इसे रेपो रूट या~/.hate_crackमें रखें।
त्रुटि: 'refs/heads/master' के संदर्भ के साथ मर्ज करें लेकिन ऐसा कोई ref प्राप्त नहीं हुआ
यदि आप देखते हैं:``` Your configuration specifies to merge with the ref 'refs/heads/master' from the remote, but no such ref was fetched.
डिफ़ॉल्ट ब्रांच का नाम `master` से `main` में बदल दिया गया है। इसे ठीक करने के लिए:```bash
git remote set-head origin -a
git branch -m master main
git branch --set-upstream-to=origin/main main
git pull
Makefile लक्ष्य
डिफ़ॉल्ट (पूर्ण इंस्टॉलेशन) - सबमॉड्यूल बनाता है, निर्भरताएँ इंस्टॉल करता है, और टूल इंस्टॉल करता है:```bash make
or explicitly:
make install
यह idempotent है - यह पहले से स्थापित टूल्स को छोड़ देता है।
**क्लीन रीइंस्टॉल बलपूर्वक करें:**```bash
make reinstall
त्वरित अपडेट - सबमॉड्यूल्स को पुनर्निर्मित करता है और टूल को पुनः स्थापित करता है (बदलाव खींचने के बाद):```bash make update
**Uninstall** - OS निर्भरताओं और टूल को हटाता है:```bash
make uninstall
केवल hashcat-utils बनाएं:```bash make hashcat-utils
**परीक्षण चलाएँ** - आवश्यकता पड़ने पर HATE_CRACK_SKIP_INIT को स्वचालित रूप से संभालता है:```bash
make test
कवरेज रिपोर्ट:```bash make coverage
**बिल्ड/टेस्ट आर्टिफैक्ट्स साफ़ करें:**```bash
make clean
विकास
विकास वातावरण की स्थापना
वैकल्पिक डेव निर्भरताओं के साथ प्रोजेक्ट इंस्टॉल करें (लिंटर और परीक्षण उपकरण शामिल हैं):```bash make dev-install
### लिंटर और टाइप जाँच चलाना
परिवर्तन पुश करने से पहले, इन जाँचों को स्थानीय रूप से चलाएँ। सब कुछ के लिए `make lint` का उपयोग करें, या व्यक्तिगत जाँचें चलाएँ:
**Ruff (लिंटिंग और फ़ॉर्मेटिंग):**```bash
make ruff
# or manually:
uv run ruff check hate_crack tests tools packaging hate_crack.py
स्वतः-सुधार मुद्दे:```bash uv run ruff format hate_crack tests tools packaging hate_crack.py uv run ruff check --fix hate_crack tests tools packaging hate_crack.py
**ty (प्रकार जाँच):**```bash
make ty
# or manually:
uv run ty check hate_crack
सभी जाँचें एक साथ चलाएँ:```bash make lint
### परीक्षण चलाना
परीक्षण स्वतः पता लगाते हैं जब सबमॉड्यूल निर्मित नहीं होते और स्वचालित रूप से `HATE_CRACK_SKIP_INIT=1` सेट करते हैं।```bash
make test
या सीधे pytest चलाएँ:```bash uv run pytest -v
कवरेज के साथ:```bash
make coverage
या pytest के साथ:```bash uv run pytest --cov=hate_crack
### Git Hooks (prek)
Git hooks को [prek](https://github.com/j178/prek) (v0.3.3+) द्वारा प्रबंधित किया जाता है। इसके साथ हुक्स स्थापित करें:```bash
prek install --hook-type pre-push --hook-type pre-commit
यह prek.toml में परिभाषित हुक्स को pre-commit local-repo TOML स्कीमा का उपयोग करके स्थापित करता है:
- pre-push (स्थानीय हुक): ruff, ruff-format, ty, pytest, pytest-lima, bandit
- pre-commit (
pre-commit/pre-commit-hooksसे): trailing-whitespace, end-of-file-fixer, check-yaml, check-merge-conflict, check-added-large-files, detect-private-key
pre-commit ऑटो-फिक्सर फ़ाइलों को उनकी जगह पर फिर से लिखते हैं, इसलिए उनके चलने के बाद दोबारा stage करें और फिर से commit करें।
नोट: prek 0.3.3 शीर्ष स्तर पर repos = [...] की अपेक्षा करता है। पुराना [hooks.<stage>] commands = [...] प्रारूप समर्थित नहीं है।
एरो-की मेनू नेविगेशन
मेनू डिफ़ॉल्ट रूप से क्लासिक क्रमांकित print() + input() चयन का उपयोग करते हैं, जो पूर्ण बहु-अंकीय कुंजियाँ स्वीकार करता है।
simple-term-menu के माध्यम से एरो-की नेविगेशन सक्षम करने के लिए HATE_CRACK_ARROW_MENU=1 सेट करें। उस मोड में केवल एकल-अंकीय शॉर्टकट कुंजियाँ काम करती हैं; 10 और उससे ऊपर की संख्या वाले विकल्पों तक एरो कुंजियों से पहुँचा जाना चाहिए। एरो-की मोड के लिए TTY की भी आवश्यकता होती है, इसलिए जब आउटपुट pipe किया गया हो तो यह बंद रहता है।
डेव निर्भरताएँ
वैकल्पिक [dev] समूह में शामिल हैं:
- ty - स्टैटिक टाइप चेकर
- ruff - तेज़ Python लिंटर और फ़ॉर्मेटर
- pytest - टेस्टिंग फ्रेमवर्क
- pytest-cov - कवरेज रिपोर्टिंग
सामान्य विकल्प:
--download-hashview: क्रैकिंग से पहले Hashview से हैश डाउनलोड करें।--hashview: हैश, वर्डलिस्ट और जॉब प्रबंधित करने के लिए इंटरैक्टिव Hashview मेनू।--hashview --help: Hashview कमांड-लाइन विकल्प दिखाएँ।--weakpass: Weakpass से वर्डलिस्ट डाउनलोड करें।--hashmob: Hashmob.net से वर्डलिस्ट डाउनलोड करें।--download-torrent <FILENAME>: एक विशिष्ट Weakpass टोरेंट फ़ाइल डाउनलोड करें।--download-all-torrents: कैश से सभी उपलब्ध Weakpass टोरेंट डाउनलोड करें।--wordlists-dir <PATH>/--optimized-wordlists-dir <PATH>: वर्डलिस्ट निर्देशिकाओं को ओवरराइड करें।--pipal-path <PATH>: pipal पथ ओवरराइड करें।--restore-potfile: स्टार्टअप पर hashcat POT फ़ाइल से<hashfile>.outको पुनर्निर्मित करें, किसी भी मौजूदा सामग्री को बदलते हुए, फिर सामान्य मेनू में जारी रखें। इस फ़्लैग के बिना POT लुकअप केवल तभी चलता है जब.outपहले से मौजूद न हो। मेनू विकल्प 93 पुष्टिकरण संकेत के साथ मांग पर वही कार्य करता है।--maxruntime <SECONDS>: अधिकतम रनटाइम ओवरराइड करें।--bandrel-basewords <PATH>: bandrel बेसवर्ड फ़ाइल ओवरराइड करें।--update: नवीनतम रिलीज़ में अपडेट करें और पुनः स्थापित करें। यदि चेकआउट किसी अन्य ब्रांच पर है तो उसेmainपर स्विच करता है, क्योंकि रिलीज़ टैग वहाँ रहते हैं।--nightly: इसके बजायnightly-devब्रांच से नवीनतम नाइटली में अपडेट करें। नाइटली सीआई पास कर चुके हैं लेकिन कट रिलीज़ का हिस्सा नहीं हैं। इसे--update --nightlyके रूप में भी लिखा जा सकता है।--no-optimized-kernel(या--no-optimize): पूरे रन के लिए hashcat को-Oकभी न पास करें।config.jsonमेंoptimizedKernelAttacksको ओवरराइड करता है औरhcatTuningमें डाले गए किसी भी-Oको हटा देता है। कॉन्फ़िग में कुछ भी वापस नहीं लिखा जाता है, इसलिए यह केवल इसी रन पर लागू होता है। सबकमांड के साथ, इसे सबकमांड से पहले रखें:./hate_crack.py --no-optimize quick hashes.txt 1000 --wordlist words.txt.--debug: डीबग लॉगिंग सक्षम करें (stderr पर लिखता है)।
Hashview एकीकरण
hate_crack केंद्रीकृत हैश प्रबंधन और वितरित क्रैकिंग के लिए Hashview के साथ एकीकृत होता है।
इंटरैक्टिव मेनू
इंटरैक्टिव Hashview मेनू तक पहुँचें:```bash hate_crack.py --hashview
Menu options:
- **(1) क्रैक किए गए हैश अपलोड करें** - वर्तमान सत्र से क्रैक किए गए परिणाम Hashview में अपलोड करें
- **(2) वर्डलिस्ट अपलोड करें** - Hashview में वर्डलिस्ट फ़ाइल अपलोड करें
- **(3) वर्डलिस्ट डाउनलोड करें** - Hashview से वर्डलिस्ट डाउनलोड करें
- **नियम डाउनलोड करें** - Hashview से नियम फ़ाइल डाउनलोड करें (डीकंप्रेस करके प्लेनटेक्स्ट में, `hashcat -r` के लिए तैयार)
- **(4) शेष हैश डाउनलोड करें** - बचे हुए अक्रैक किए गए हैश डाउनलोड करें (क्रैकिंग के लिए स्विच करने का संकेत देता है)
- **(5) मिले हुए हैश डाउनलोड करें** - पहले से क्रैक किए गए हैश, साथ में cleartext पासवर्ड डाउनलोड करें (संदर्भ/विश्लेषण के लिए)
- **(6) हैशफ़ाइल अपलोड करें और जॉब बनाएं** - नई हैशफ़ाइल अपलोड करें और क्रैकिंग जॉब बनाएं
- **(99) मुख्य मेनू पर वापस जाएं** - मुख्य मेनू पर लौटें
**महत्वपूर्ण: मिले हुए हैश डाउनलोड करें बनाम शेष हैश डाउनलोड करें**
- **शेष हैश डाउनलोड करें (4)**: वे अक्रैक हैश डाउनलोड करता है जिन्हें क्रैक करने की आवश्यकता है। यदि उपलब्ध हों तो यह किसी भी मिले हैश के साथ स्वतः विलय कर देता है, और क्रैकिंग के लिए इस हैशफ़ाइल पर स्विच करने का संकेत देता है।
- **मिले हुए हैश डाउनलोड करें (5)**: पहले से क्रैक किए गए हैश को hash:cleartext प्रारूप में डाउनलोड करता है। ये संदर्भ के लिए हैं और इन्हें आगे क्रैक नहीं किया जा सकता। कोई स्विच संकेत नहीं दिखाया जाता।
#### कमांड-लाइन इंटरफ़ेस
Hashview के कार्यों को कमांड-लाइन के माध्यम से भी किया जा सकता है:
क्रैक किए गए हैश अपलोड करें:```bash
hate_crack.py --hashview upload-cracked --file <output_file>.out --hash-type 1000
वर्डलिस्ट अपलोड करें:```bash hate_crack.py --hashview upload-wordlist --file .txt --name "My Wordlist"
एक रूल फ़ाइल डाउनलोड करें (डीकंप्रेस्ड रूप में सहेजी गई, `hashcat -r` के लिए तैयार):```bash
hate_crack.py --hashview download-rules --rules-id 4 --output best64.rule
बचे हुए हैश डाउनलोड करें (क्रैकिंग के लिए अनक्रैक किए गए हैश):```bash hate_crack.py --hashview download-left --customer-id 1 --hashfile-id 123
पाए गए हैश डाउनलोड करें (क्लियरटेक्स्ट के साथ पहले से क्रैक किए गए हैश):```bash
hate_crack.py --hashview download-found --customer-id 1 --hashfile-id 123
hashfile अपलोड करें और job बनाएं:```bash
hate_crack.py --hashview upload-hashfile-job --file hashes.txt --customer-id 1
--hash-type 1000 --job-name "NTLM Crack Job" --hashfile-name "Domain Hashes"
#### विन्यास
`.env` में Hashview क्रेडेंशियल्स सेट करें (वे एकीकरण सेटिंग्स हैं, इसलिए वे `config.json` में नहीं रहते):```
HASHVIEW_URL=https://hashview.example.com
HASHVIEW_API_KEY=your-api-key-here
Ollama कॉन्फ़िगरेशन
LLM अटैक (विकल्प 12) पासवर्ड उम्मीदवार उत्पन्न करने के लिए Ollama का उपयोग करता है। मॉडल, संदर्भ विंडो और अनुरोध टाइमआउट को .env में कॉन्फ़िगर करें:```
OLLAMA_MODEL=qwen2.5:32b
OLLAMA_NUM_CTX=8192
OLLAMA_TIMEOUT=300
- **`OLLAMA_MODEL`** — उम्मीदवार निर्माण के लिए उपयोग किया जाने वाला Ollama मॉडल (डिफ़ॉल्ट: `qwen2.5:32b`)। LLM आक्रमण संरचित (JSON) आउटपुट का उपयोग करता है, इसलिए अच्छे टूल/JSON समर्थन वाला मॉडल चुनें।
- **`OLLAMA_NUM_CTX`** — मॉडल के लिए कॉन्टेक्स्ट विंडो का आकार (डिफ़ॉल्ट: `8192`)। कॉर्पस सांख्यिकी शुरू होने से पहले यह `2048` था, जो दिए जा रहे प्रॉम्प्ट को समेटने के लिए बहुत छोटा था: 500 नमूना प्लेनटेक्स्ट सिस्टम प्रॉम्प्ट और प्रतिक्रिया से पहले लगभग 2,000–3,500 टोकन चलते हैं, इसलिए Ollama ने उस नमूने का कुछ हिस्सा चुपचाप काट दिया जिसे सैंपलर ने ध्यान से फ़ाइल में फैलाया था।
- **`OLLAMA_TIMEOUT`** — हार मानने से पहले जनरेशन प्रतिक्रिया के लिए प्रतीक्षा करने हेतु सेकंड (डिफ़ॉल्ट: `300`)। इसे बढ़ाएँ यदि पहले अनुरोध पर कोई बड़ा मॉडल अभी भी VRAM में लोड हो रहा है, जो अन्यथा टाइमआउट से अधिक हो सकता है; hate_crack समय समाप्त होने पर व्यतीत टाइमआउट और इस सेटिंग का नाम प्रिंट करता है।
- **`OLLAMA_MAX_SAMPLE_LINES`** — वह सीमा जिसके नीचे LLM मोड शाब्दिक प्लेनटेक्स्ट को भी प्रॉम्प्ट में चिपकाते हैं (डिफ़ॉल्ट: `500`)। ≤ 0 वाले मानों को 500 माना जाता है।
कॉर्पस-व्युत्पन्न मोड (**Wordlist**, **Cracked passwords**, **Pattern rules**) हमेशा *पूरे* कॉर्पस का सांख्यिकीय रूप से वर्णन करते हैं — बेसवर्ड के हिस्से, मास्क, केसिंग, लंबाई, पीछे के अंक और प्रतीक, वर्ष — बजाय इसके कि उसका एक हिस्सा चिपकाया जाए। एकत्रीकरण सीमित है, इसलिए 120,000-पासवर्ड डंप की प्रॉम्प्ट जगह लगभग 500-पंक्ति वाले डंप जितनी ही होती है। जब पूरा कॉर्पस इस सीमा के अंतर्गत आता है, तो कच्चे प्लेनटेक्स्ट भी शामिल किए जाते हैं, क्योंकि एक छोटे कॉर्पस को मॉडल से छिपाने से कुछ भी हासिल नहीं होता।
यह पहले के व्यवहार को प्रतिस्थापित करता है जिसमें `ollamaMaxSampleLines` पासवर्ड तक का एक समान रूप से फैला हुआ नमूना चिपकाया जाता था। एक बड़े डंप का नमूना आवृत्ति की कोई जानकारी नहीं देता था: मॉडल संगठन के 8% द्वारा उपयोग किए जाने वाले बेसवर्ड और किसी एक व्यक्ति द्वारा उपयोग किए जाने वाले बेसवर्ड के बीच अंतर नहीं कर पाता था, जो वास्तव में वह संकेत है जो किसी अनुमान को चलाने योग्य बनाता है।
- **`OLLAMA_NO_CLOUD`** — जब `true` हो, तो किसी भी चीज़ को Ollama *क्लाउड* मॉडल को भेजने से मना करें। Ollama एक `-cloud`-टैग वाले मॉडल (`gpt-oss:120b-cloud`, `deepseek-v3.1:671b-cloud`) को उसी स्थानीय एंडपॉइंट के माध्यम से ollama.com पर प्रॉक्सी करता है जिसका उपयोग स्थानीय मॉडल करता है, इसलिए अनुरोध के बारे में कुछ भी अलग नहीं दिखता — लेकिन hate_crack के प्रॉम्प्ट पुनर्प्राप्त प्लेनटेक्स्ट, कॉर्पस सांख्यिकी, और ग्राहक का नाम, उद्योग और स्थान ले जाते हैं। इसे सेट करने पर, कोई भी अनुरोध बनने से पहले क्लाउड मॉडल का नाम अस्वीकार कर दिया जाता है। डिफ़ॉल्ट `false` है, इसलिए जानबूझकर कॉन्फ़िगर किया गया क्लाउड मॉडल काम करता रहता है; उन कार्यों के लिए इसे चालू करें जहाँ ग्राहक डेटा को होस्ट से बाहर नहीं जाना चाहिए।
- **`OLLAMA_AUTO_RESEARCH`** — जब `true` (डिफ़ॉल्ट) हो, तो **Target info** मोड कंपनी का नाम टाइप करते ही स्थानीय मॉडल से उद्योग और स्थान सुझाने को कहता है, और उन्हें संपादन योग्य प्रॉम्प्ट डिफ़ॉल्ट के रूप में प्रस्तुत करता है। हमेशा खाली प्रॉम्प्ट पाने के लिए `false` सेट करें (धीमे मॉडल के साथ उपयोगी, क्योंकि शोध से आक्रमण शुरू होने से पहले एक अतिरिक्त राउंड-ट्रिप का खर्च आता है)।
- **`OLLAMA_HOST`** — जहाँ Ollama सुन रहा है। यह एक साधारण `host:port` (`theplague.lan:11434`) या स्कीम वाला पूरा URL (`https://ollama.example.com`) स्वीकार करता है; किसी भी तरह, उपयोग से पहले बेस URL सामान्यीकृत किया जाता है। डिफ़ॉल्ट `localhost:11434` है। इसे `.env` में सेट करें, या एक रन के लिए उसे ओवरराइड करने हेतु इसे वास्तविक पर्यावरण चर के रूप में निर्यात करें — यह वही चर नाम है जिसे Ollama का अपना CLI पढ़ता है।
- Ensure Ollama is running and the model is pulled (`ollama pull qwen2.5:32b`) before using the LLM Attack — hate_crack no longer auto-pulls missing models.
यह आक्रमण तीन जनरेशन मोड प्रदान करता है:
1. **Target info** — कंपनी / उद्योग / स्थान; मॉडल उन विवरणों से उम्मीदवार निकालता है।
कंपनी का नाम टाइप करने के बाद, hate_crack उसी स्थानीय मॉडल से पूछता है कि वह उस संगठन के बारे में क्या जानता है और **Industry** और **Location** प्रॉम्प्ट को उत्तरों के साथ पहले से भर देता है, जो कोष्ठक में दिखाए जाते हैं: ```
Company name: Acme Rail Services
[!] The values in parentheses below are the local model's GUESSES, not verified OSINT.
Press Enter to accept, or type your own value to override.
Industry (freight rail maintenance):
Location (Omaha, Nebraska):
किसी सुझाव को स्वीकार करने के लिए Enter दबाएँ या उसके ऊपर टाइप करें। ये मान मॉडल की स्मृति हैं, OSINT नहीं — इन्हें शुरुआती बिंदु मानें, क्लाइंट के बारे में खुफिया जानकारी नहीं। लुकअप केवल स्थानीय Ollama सर्वर का उपयोग करता है, इसलिए क्लाइंट का नाम कभी भी होस्ट से बाहर नहीं जाता; कोई वेब या तृतीय-पक्ष API कॉल नहीं होती हैं। यदि मॉडल संगठन को नहीं पहचानता (छोटे क्लाइंटों के लिए सामान्य स्थिति), तो यह कुछ नहीं लौटाता और आपको साधारण खाली प्रॉम्प्ट मिलते हैं: ``` Company name: Acme Rail Services Industry: Location:
एक शोध विफलता — टाइमआउट, Ollama नहीं चल रहा, खाली उत्तर — हमले को कभी अवरुद्ध नहीं करती; यह केवल खाली प्रॉम्प्ट्स पर वापस आ जाती है। शोध को पूरी तरह से छोड़ने के लिए `ollamaAutoResearch` को `false` पर सेट करें।
2. **Wordlist** — नमूना wordlist से basewords प्राप्त करें।
3. **Cracked passwords** — इस सत्र में पहले से प्राप्त प्लेनटेक्स्ट (`<hashfile>.out`) को वापस मॉडल में फीड करें ताकि वह लक्षित संगठन की अपनी पासवर्ड परंपराओं (basewords, seasons, years, suffixes, leetspeak) का अनुमान लगा सके और उसी शैली में *नए* उम्मीदवार उत्पन्न कर सके। यह विकल्प केवल तब सूचीबद्ध किया जाता है जब कम से कम एक हैश क्रैक हो चुका हो; पूरी फ़ाइल का सांख्यिकीय रूप से बिल्कुल Wordlist मोड की तरह विश्लेषण किया जाता है (ऊपर `ollamaMaxSampleLines` देखें)।
#### PCFG कॉन्फ़िगरेशन
PCFG Attack (विकल्प 20) और PRINCE-LING Attack (विकल्प 21) `pcfg_cracker` सबमॉड्यूल का उपयोग करते हैं। उन्हें `config.json` में कॉन्फ़िगर करें:```json
{
"pcfgRuleset": "DEFAULT",
"pcfgMaxCandidates": 50000000,
"pcfgPrinceLingMaxCandidates": 10000000
}
pcfgRuleset— उपयोग किए जाने वाले प्रशिक्षित ग्रामर का नाम (डिफ़ॉल्ट:DEFAULT), जिसेpcfg_cracker/Rules/<name>/पर रिज़ॉल्व किया जाता है। pcfg_cracker केtrainer.pyके साथ अपना खुद का प्रशिक्षित करें और इसे रूलसेट नाम पर सेट करें।pcfgMaxCandidates— अधिकतम उम्मीदवार जोpcfg_guesser.pyPCFG हमले के लिए उत्पन्न करता है (डिफ़ॉल्ट:50000000)।pcfgPrinceLingMaxCandidates— अधिकतम बेस शब्द जोprince_ling.pyकैश्ड PRINCE बेस वर्डलिस्ट में लिखता है (डिफ़ॉल्ट:10000000)।
अनुकूलित कर्नेल (optimizedKernelAttacks)
hashcat का -O फ़्लैग अनुकूलित कर्नेल चुनता है, जो काफ़ी तेज़ होते हैं लेकिन उम्मीदवार की लंबाई सीमित करते हैं (लगभग 31 अक्षर, कुछ मोड के लिए कम) और इससे अधिक लंबी किसी भी चीज़ को चुपचाप छोड़ देते हैं। config.json में optimizedKernelAttacks उन हमलों की सूची देता है जो -O के साथ चलते हैं; किसी हमले को सूची से हटा दें ताकि वह पूर्ण-लंबाई वाले कर्नेल के साथ चले। config.json.example में दी गई सूची उस अंतर्निहित डिफ़ॉल्ट से मेल खाती है जो तब लागू होता है जब कोई config.json मौजूद नहीं होता।
चार हमले इस सेटिंग का सम्मान करते हैं लेकिन डिफ़ॉल्ट रूप से अनुकूलित नहीं हैं, क्योंकि वे ऐसे उम्मीदवारों को फ़ीड करते हैं जो -O की सीमा से अधिक हो सकते हैं — उन्हें सूची में जोड़कर ऑप्ट-इन करें:
hcatNgramX,hcatOllama,hcatOmen,hcatLMtoNT
कॉन्फ़िग संपादित किए बिना एक बार के रन के लिए हर जगह -O बंद करने हेतु, --no-optimized-kernel (छोटा रूप --no-optimize) पास करें। यह हर हमले के लिए सूची को ओवरराइड करता है और hcatTuning में लिखे गए -O को भी हटा देता है, जो अन्यथा सूची की परवाह किए बिना hashcat तक पहुँचता।
नामों का बिल्कुल सटीक मिलान किया जाता है, और एक अपरिचित प्रविष्टि को अनदेखा करने के बजाय स्टार्टअप पर सूचित किया जाता है। ध्यान दें कि जो हमले किसी अन्य हमले को सौंपते हैं, वे अपने नाम से नहीं बल्कि जिस हमले को सौंपे जाते हैं उसके द्वारा नियंत्रित होते हैं: PRINCE-LING hcatPrince का अनुसरण करता है, जबकि Spoonman, Rosetta और LLM पैटर्न-रूल मोड hcatQuickDictionary का अनुसरण करते हैं।
सूचनाएँ (मेनू विकल्प 82)
hate_crack हमलों के पूरा होने पर और, वैकल्पिक रूप से, व्यक्तिगत हैश क्रैक होने पर Pushover पुश सूचनाएँ भेज सकता है। सभी नियंत्रण मुख्य-मेनू विकल्प 82 — Notifications के अंतर्गत होते हैं:
- Pushover सूचनाएँ टॉगल करें [ON/OFF] — मास्टर स्विच।
config.jsonमेंnotify_enabledके रूप में सहेजा जाता है। - प्रति-क्रैक सूचनाएँ टॉगल करें [ON/OFF] — ON होने पर, एक बैकग्राउंड टेलर
.outफ़ाइल को देखता है और प्रति क्रैक एक सूचना भेजता है (प्रति-टिक बर्स्ट एकत्रीकरण के साथ)।config.jsonमेंnotify_per_crack_enabledके रूप में सहेजा जाता है। जब मास्टर स्विच OFF हो तो इसे सक्षम नहीं किया जा सकता — पहले विकल्प 1 सक्षम करें। - परीक्षण Pushover सूचना भेजें — एक तैयार पुश भेजता है ताकि आप पुष्टि कर सकें कि आपकी Pushover टोकन/यूज़र जोड़ी काम करती है। यह तब भी काम करता है जब मास्टर स्विच OFF हो।
क्रेडेंशियल .env में होते हैं; बाकी ट्यूनिंग नॉब्स केवल कॉन्फ़िग-फ़ाइल, config.json, में उपलब्ध हैं:
NOTIFY_PUSHOVER_TOKEN,NOTIFY_PUSHOVER_USER(.envमें) — किसी भी पुश को फायर करने के लिए आवश्यक हैं। मेनू में कोई भी चीज़ इन्हें नहीं लिखती;.envस्वयं संपादित करें।notify_attack_allowlist— उन हमलों के नाम जो[y/N/always]प्रॉम्प्ट के बिना स्वतः सहमति देते हैं। जब आपalwaysउत्तर देते हैं तो यह स्वतः भर जाता है।notify_suppress_in_orchestrators(डिफ़ॉल्टtrue) — Extensive Crack द्वारा श्रृंखलाबद्ध व्यक्तिगत हमलों को शांत करता है, जो इसके बजाय एक एकल सारांश भेजता है। प्रति श्रृंखलाबद्ध हमला सूचना पाने के लिएfalseसेट करें। अन्य मेनू प्रविष्टियाँ जो कई पास चलाती हैं (उदाहरण के लिए एकाधिक रूल चेन वाला Quick Crack) ऑर्केस्ट्रेटर नहीं हैं और हमेशा प्रति पास सूचना देती हैं।notify_max_cracks_per_burst(डिफ़ॉल्ट5),notify_poll_interval_seconds(डिफ़ॉल्ट5.0) — प्रति-क्रैक टेलर ट्यूनिंग। बर्स्ट एकत्रीकरण तर्क के लिएhate_crack/notify/tailer.pyदेखें।
वर्डलिस्ट टूल्स (मेनू विकल्प 80)
वर्डलिस्ट टूल्स सबमेनू hashcat-utils बाइनरीज़ पर आधारित वर्डलिस्ट प्रीप्रोसेसिंग उपयोगिताएँ, साथ ही Hashmob.net और Weakpass से वर्डलिस्ट डाउनलोड प्रदान करता है। मुख्य मेनू में विकल्प 80 के माध्यम से पहुँचें।
| विकल्प | बाइनरी | यह क्या करता है |
|---|---|---|
| 1 | len.bin | लंबाई के अनुसार फ़िल्टर करें - केवल न्यूनतम और अधिकतम लंबाई के बीच के शब्द रखें |
| 2 | req-include.bin | कैरेक्टर क्लास अनिवार्य करें - केवल ऐसे शब्द रखें जिनमें सभी आवश्यक कैरेक्टर प्रकार हों |
| 3 | req-exclude.bin | कैरेक्टर क्लास बाहर करें - ऐसे शब्द हटाएँ जिनमें कोई भी बहिष्कृत कैरेक्टर प्रकार हो |
| 4 | cutb.bin | सबस्ट्रिंग निकालें - प्रत्येक शब्द से बाइट रेंज काटें |
| 5 | splitlen.bin | लंबाई के अनुसार विभाजित करें - प्रत्येक शब्द लंबाई के लिए अलग-अलग फ़ाइलें बनाएँ (आउटपुट निर्देशिका में 01-64 नाम की फ़ाइलें) |
| 6 | rli.bin / rli2.bin | शब्द घटाएँ - ऐसी प्रविष्टियाँ हटाएँ जो एक या अधिक अन्य फ़ाइलों में दिखाई देती हैं |
| 7 | gate.bin | शार्ड - कई मशीनों पर वितरित क्रैकिंग के लिए हर N-वाँ शब्द निकालें |
| 8 | - | वर्डलिस्ट अनुकूलित करें - डीडुप करें और अनुकूलित वर्डलिस्ट निर्देशिका के अंतर्गत प्रति-लंबाई फ़ाइलों में विभाजित करें |
| 9 | - | Hashmob.net से वर्डलिस्ट डाउनलोड करें |
| 10 | - | Weakpass से वर्डलिस्ट डाउनलोड करें (BitTorrent के माध्यम से) |
कैरेक्टर क्लास मास्क बिट्स (विकल्प 2 और 3 द्वारा उपयोग): 1=लोअरकेस, 2=अपरकेस, 4=डिजिट, 8=सिंबल, 16=अन्य। मानों को जोड़ें: 7 = लोअरकेस+अपरकेस+डिजिट।
शार्डिंग का उपयोग कैसे किया जाना है: शार्डिंग एक वर्डलिस्ट को N बराबर, गैर-अतिव्यापी भागों में विभाजित करती है ताकि काम कई मशीनों या GPUs में फैलाया जा सके। प्रत्येक भाग इंटरलीव्ड होता है (हर N-वीं पंक्ति), इसलिए हर शार्ड पूरी सूची का एक प्रतिनिधि नमूना होता है, न कि एक सन्निहित आगे/पीछे का खंड — कोई भी एक नोड केवल कम-संभावना वाले टेल को क्रैक करने में नहीं फँसा रहता।
विकल्प 7 को एक बार चलाएँ, उसे एक इनपुट वर्डलिस्ट, एक आउटपुट बेस पथ और एक शार्ड गिनती (N) दें। यह सभी N भागों को एक ही पास में लिखता है, जिनका नाम शून्य-पैडेड भाग संख्याओं के साथ होता है (base.001, base.002, … से base.00N तक)। प्रत्येक नोड पर एक भाग कॉपी करें और उस नोड की hashcat रन को उसकी ओर इंगित करें। सिंगल-GPU सिस्टम पर शार्डिंग से कोई गति वृद्धि नहीं होती, लेकिन एक अकेला भाग पूरी सूची में जाने से पहले त्वरित ट्राइएज पास के लिए अभी भी एक तेज़, प्रतिनिधि नमूना है।
स्वचालित अपडेट जाँच
hate_crack स्टार्टअप पर GitHub पर नए रिलीज़ के लिए स्वचालित रूप से जाँच कर सकता है। यह सुविधा check_for_updates कॉन्फ़िग विकल्प द्वारा नियंत्रित होती है:```json
{
"check_for_updates": true
}
- **`check_for_updates`** — स्टार्टअप पर स्वचालित संस्करण जाँच सक्षम करें (डिफ़ॉल्ट: `true`)।
- सक्षम होने पर, hate_crack GitHub से नवीनतम रिलीज़ जानकारी प्राप्त करता है और यदि कोई अपडेट उपलब्ध हो तो एक सूचना प्रदर्शित करता है।
- यह जाँच एसिंक्रोनस रूप से चलती है और स्टार्टअप को ब्लॉक नहीं करती। नेटवर्क त्रुटियों को चुपचाप अनदेखा कर दिया जाता है।
##### अपडेट चैनल
| चैनल | फ़्लैग | स्रोत | आपको क्या मिलता है |
|---------|------|--------|--------------|
| रिलीज़ | `--update` | `main` | नवीनतम कट रिलीज़। यह डिफ़ॉल्ट है और स्टार्टअप जाँच यही प्रदान करती है। |
| नाइटली | `--nightly` | `nightly-dev` | वह कार्य जो CI पास कर चुका है लेकिन अभी तक रिलीज़ नहीं हुआ है। |
संस्करण सामान्य semver का पालन करते हैं, जिसमें बम्प उस सामग्री से निर्धारित होता है जो वास्तव में बैच में होती है।
दूसरा घटक **केवल सुविधाओं के लिए** बदलता है: किसी भी `feat` कमिट वाला चक्र
`X.(Y+1).0` की ओर अग्रसर होता है, और केवल फिक्स, दस्तावेज़ और रखरखाव-कार्यों वाला चक्र
`X.Y.(Z+1)` की ओर अग्रसर होता है।
`nightly-dev` उस किसी भी संस्करण के लिए रिलीज़ कैंडिडेट टैग करता है जिसकी ओर बैच अग्रसर है
— `v2.20.1rc1`, `v2.20.1rc2`, … — और `main` में मर्ज करने पर वही लक्ष्य
अपनी अंतिम रिलीज़ में प्रमोट हो जाता है। कैंडिडेट वास्तविक PEP 440 प्री-रिलीज़ होते हैं, इसलिए
वे दोनों छोरों पर सही क्रम में आते हैं:
2.20.0 < 2.20.1rc1 < 2.20.1rc2 < 2.20.1 < 2.21.0rc1 < 2.21.0
लक्ष्य चक्र के मध्य में बदल सकता है: पहला `feat` आते ही यह
`X.Y.(Z+1)` से `X.(Y+1).0` पर चला जाता है, और नए लक्ष्य के लिए कैंडिडेट क्रमांकन फिर से शुरू होता है।
यह संख्या हमेशा वही दर्शाती है जो बैच आज शिप होने पर होगा।
मेजर घटक कभी भी स्वचालित रूप से बम्प नहीं होता — एक `!` सब्जेक्ट या
`BREAKING CHANGE:` फुटर एक सुविधा के रूप में गिना जाता है, क्योंकि एक स्वचालित मेजर केवल एक
गलत सब्जेक्ट लाइन मात्र से अपरिवर्तनीय प्रकाशित रिलीज़ का कारण बन सकता है। मेजर एक
स्पष्ट मानवीय कार्य है: इसे हाथ से टैग और पुश करें।
यह नीति `tools/next_version.py` में स्थित है, जो दोनों टैगिंग वर्कफ़्लो द्वारा साझा की जाती है और
`tests/test_next_version.py` में इसका यूनिट-परीक्षण किया गया है।
स्टार्टअप जाँच हमेशा केवल रिलीज़ ही प्रदान करती है, क्योंकि नाइटली बिल्ड कोई
GitHub रिलीज़ प्रकाशित नहीं करते और यह जाँच GitHub के "latest release" एंडपॉइंट को पढ़ती है — इसलिए
`check_for_updates` सक्षम करने से आप कभी नाइटली पर नहीं जाएँगे। अब दो चीज़ें
चैनलों को अलग रखती हैं: वह, और यह तथ्य कि एक कैंडिडेट वास्तविक PEP 440
प्री-रिलीज़ होता है, इसलिए कच्चे संस्करण संख्याओं को रैंक करने वाला उपकरण भी इसे
उस रिलीज़ से पुराना मानता है जिसमें यह परिवर्तित होता है।
दोनों में से कोई भी फ़्लैग पहले आपके चेकआउट को संबंधित ब्रांच पर स्विच करता है (और
यदि आपके पास अनकमिटेड परिवर्तन हैं तो ऐसा करने से मना कर देता है)। यदि आप नाइटली चला रहे हैं
और रिलीज़ किए गए कोड पर वापस जाना चाहते हैं, तो `--update` आपको `main` पर वापस ले जाता है।
#### स्वचालित फाउंड हैश मर्जिंग (केवल लेफ्ट डाउनलोड करने पर)
लेफ्ट हैश (बिना क्रैक हुए हैश) डाउनलोड करते समय, hate_crack स्वचालित रूप से:
1. एक सहायक ऑपरेशन के रूप में Hashview से किसी भी फाउंड (क्रैक किए गए) हैश को डाउनलोड करने का प्रयास करता है
2. फाउंड हैश को स्थानीय `.out` फ़ाइलों के साथ मर्ज करता है (जैसे, pwdump प्रारूप के लिए `left_1_123.txt.out` या `left_1_123.nt.txt.out`)
3. डुप्लिकेट प्रविष्टियाँ हटाता है
4. मर्जिंग के बाद अस्थायी विभाजित फ़ाइलों को साफ़ करता है
यह सुनिश्चित करता है कि बिना क्रैक हुए हैश के साथ काम करते समय आपके स्थानीय क्रैकिंग परिणाम Hashview के केंद्रीकृत डेटाबेस के साथ सिंक्रनाइज़ रहें।
**नोट:** download-found विकल्प पहले से क्रैक किए गए हैश को संदर्भ प्रयोजनों के लिए अलग से डाउनलोड करता है और न तो कोई मर्जिंग करता है और न ही क्रैकिंग के लिए संकेत देता है।
<hash_type> को `hashcat --help` चलाकर प्राप्त किया जाता है
उदाहरण हैश: http://hashcat.net/wiki/doku.php?id=example_hashes```
$ hashcat --help |grep -i ntlm
5500 | NetNTLMv1 | Network protocols
5500 | NetNTLMv1 + ESS | Network protocols
5600 | NetNTLMv2 | Network protocols
1000 | NTLM | Operating-Systems
कोई इनपुट सामग्री प्रदान नहीं की गई। कृपया चंक 114 की वास्तविक सामग्री भेजें ताकि मैं उसका अनुवाद कर सकूँ।``` $ ./hate_crack.py 1000
/ | _____ / | ____ _ ___ ____________ ____ | | __
/ ~ __ \ / __ \ / \ /_ __ _ \ / | |/ /
\ Y // __ | | \ / \ _| | // __ \ _| <
___| /(__ /| _ >______ /|__| ( /___ >|_
/ / /___/ / / / /
Version 2.0
## परीक्षण
परीक्षण सूट अधिकतर ऑफ़लाइन है और मॉक्स/फिक्स्चर का उपयोग करता है। लाइव नेटवर्क जाँच और
सिस्टम निर्भरता जाँच पर्यावरण चर के माध्यम से ऑप्ट-इन हैं।
### स्थानीय रूप से परीक्षण चलाना```bash
# Run all tests
uv run pytest -v
# Run specific test
uv run pytest tests/test_hashview.py -v
आप पूरा सूट make test के साथ भी चला सकते हैं।
लाइव टेस्ट (ऑप्ट-इन)
लाइव जाँच सक्षम करने के लिए निम्न में से कोई भी सेट करें:
HASHMOB_TEST_REAL=1— लाइव Hashmob कनेक्टिविटी/CLI मेनू जाँचHASHVIEW_TEST_REAL=1— लाइव Hashview CLI मेनू जाँचWEAKPASS_TEST_REAL=1— लाइव Weakpass CLI मेनू जाँचHATE_CRACK_REQUIRE_DEPS=1— यदि7z,transmission-daemon, याtransmission-remoteगायब है तो विफल हो जाएँ
लाइव Hashview अपलोड टेस्ट
लाइव Hashview अपलोड टेस्ट डिफ़ॉल्ट रूप से छोड़ दिया जाता है। इसे चलाने के लिए,
पर्यावरण चर सेट करें और .env में मान्य क्रेडेंशियल प्रदान करें:```bash
HATE_CRACK_RUN_LIVE_TESTS=1 uv run pytest tests/test_upload_cracked_hashes.py -v
### स्थानीय Docker स्टैक के विरुद्ध लाइव Hashview परीक्षण
लाइव परीक्षणों को किसी दूरस्थ Hashview सर्वर की ओर इंगित करने के बजाय, आप
परीक्षण सूट से एक स्थानीय [Hashview](https://github.com/hashview/hashview)
Docker स्टैक तैयार करवा सकते हैं, उसे सीड कर सकते हैं, उसके विरुद्ध लाइव परीक्षण चला सकते हैं, और उसे टियर डाउन कर सकते हैं।
`HASHVIEW_TEST_LOCAL=1` सेट करें और `HASHVIEW_REPO` को Hashview चेकआउट की ओर इंगित करें:```bash
HASHVIEW_TEST_LOCAL=1 HASHVIEW_REPO=~/projects/hashview \
HATE_CRACK_SKIP_INIT=1 uv run pytest tests/test_hashview_cli_subcommands_subprocess.py -v
यह Hashview रेपो में docker compose चालू करता है, एक एडमिन API कुंजी,
एक ग्राहक, एक हैशफ़ाइल, और क्रैक किए गए "प्रभावी कार्य" डेटा को सीड करता है, फिर
परीक्षणों द्वारा पढ़े जाने वाले HASHVIEW_* env वेरिएबल्स को एक्सपोर्ट करता है। उपयोगी env वेरिएबल्स:
HASHVIEW_TEST_LOCAL=1— स्थानीय स्टैक सक्षम करें (अन्यथा नो-ऑप)HASHVIEW_REPO=<path>— Hashview चेकआउट (डिफ़ॉल्ट~/projects/hashview)HASHVIEW_KEEP=1— सत्र के बाद कंटेनरों को चालू छोड़ें (फिर से चलाने में तेज़ी)HASHVIEW_LOCAL_PORT=5000— होस्ट पोर्ट जिस पर ऐप प्रकाशित होता है
hate_crack CLI HASHVIEW_URL / HASHVIEW_API_KEY पर्यावरण वेरिएबल्स का सम्मान करता है
(उन .env को ओवरराइड करते हुए जिनमें ये दो कुंजियाँ रहती हैं), जिससे
टेस्ट सूट आपकी सहेजी गई कॉन्फ़िग को संपादित किए बिना CLI को स्थानीय स्टैक पर इंगित कर पाता है।
एंड-टू-एंड इंस्टॉल परीक्षण (स्थानीय + डॉकर)
स्थानीय uv टूल इंस्टॉल + स्क्रिप्ट निष्पादन (अस्थायी HOME का उपयोग करता है):```bash HATE_CRACK_RUN_E2E=1 uv run pytest tests/test_e2e_local_install.py -v
डॉकर-आधारित एंड-टू-एंड इंस्टॉल/रन (`Dockerfile.test` के माध्यम से कैश्ड):```bash
HATE_CRACK_RUN_DOCKER_TESTS=1 uv run pytest tests/test_docker_script_install.py -v
Docker E2E परीक्षण rockyou का एक छोटा सबसेट भी डाउनलोड करता है और बाहरी टूल एकीकरण को मान्य करने के लिए एक बुनियादी hashcat क्रैक चलाता है।
Lima VM एंड-टू-एंड परीक्षण (केवल macOS):
आवश्यक शर्तें: Lima और rsync स्थापित होना चाहिए।```bash
brew install lima
परीक्षण VM स्वचालित रूप से सभी Linux निर्भरताओं (hashcat, build-essential, curl, git, gzip, p7zip-full, transmission-daemon, ocl-icd-libopencl1, pocl-opencl-icd, uv) के साथ प्रावधानित होता है।```bash
HATE_CRACK_RUN_LIMA_TESTS=1 uv run pytest tests/test_lima_vm_install.py -v
यह परीक्षण macOS पर एक हल्के Linux VM के भीतर स्थापना और निष्पादन को मान्य करता है।
परीक्षण संरचना
- tests/test_hashview.py: HashviewAPI क्लास के लिए मॉक की गई API प्रतिक्रियाओं के साथ व्यापक परीक्षण सूट, जिसमें शामिल हैं:
- ग्राहक सूची और डेटा सत्यापन
- प्रमाणीकरण और प्राधिकरण परीक्षण
- हैशफ़ाइल अपलोड कार्यक्षमता
- संपूर्ण जॉब निर्माण कार्यप्रवाह
सभी परीक्षण मॉक की गई API कॉल का उपयोग करते हैं, इसलिए वे Hashview सर्वर से कनेक्टिविटी के बिना चल सकते हैं।
(1) त्वरित क्रैक (2) विस्तृत Pure_Hate कार्यप्रणाली क्रैक (3) ब्रूट फोर्स अटैक (4) टॉप मास्क अटैक (5) फ़िंगरप्रिंट अटैक (6) कॉम्बिनेटर अटैक (7) हाइब्रिड अटैक (8) Pathwell टॉप 100 मास्क ब्रूट फोर्स क्रैक (9) PRINCE अटैक (10) Bandrel कार्यप्रणाली (11) लूपबैक अटैक (12) LLM अटैक (13) OMEN अटैक (14) एड-हॉक मास्क अटैक (15) मार्कोव ब्रूट फोर्स अटैक (16) N-gram अटैक (17) क्रमपरिवर्तन अटैक (18) रैंडम नियम अटैक (19) Combipow पासफ़्रेज़ अटैक (20) PCFG अटैक (21) PRINCE-LING अटैक (22) Spoonman अटैक (23) Rosetta अटैक
(80) वर्डलिस्ट उपकरण (81) नियम फ़ाइल उपकरण (82) सूचनाएँ
(93) POT फ़ाइल से .out पुनर्जनित करें (94) Hashview API (95) Pipal से हैश का विश्लेषण करें (96) आउटपुट को Excel प्रारूप में निर्यात करें (97) क्रैक किए गए हैश प्रदर्शित करें (98) README प्रदर्शित करें (99) बाहर निकलें
कोई कार्य चुनें:```
Option 94 — Hashview API is only listed when HASHVIEW_API_KEY is set in .env.
The YOLO, Middle, and Thorough Combinator attacks were previously at keys 10-12. They now live in the Combinator Attacks submenu (option 6) along with Combinator3 and CombinatorX.
Quick Crack
Runs a dictionary attack against wordlists in your hcatOptimizedWordlists directory (falls back to hcatWordlists if not configured) and optionally applies rules. Multiple rules can be selected by comma-separated list, and chains can be created with the '+' symbol. Pressing Enter at the wordlist prompt uses the configured optimized wordlists directory as the default.
Which rule(s) would you like to run?
(1) best64.rule
(2) d3ad0ne.rule
(3) T0XlC.rule
(4) dive.rule
(99) YOLO...सभी नियम चलाएँ
Enter Comma separated list of rules you would like to run. To run rules chained use the + symbol.
उदाहरण के लिए 1+1 best64.rule को दो बार श्रृंखलित करके चलाएगा और 1,2 best64.rule तथा फिर d3ad0ne.rule को क्रमिक रूप से चलाएगा।
बुद्धिमानी से चुनें:```
#### Extensive Pure_Hate Methodology Crack
Runs several attack methods provided by Martin Bos (formerly known as pure_hate):
* Brute Force Attack (7 characters)
* Dictionary Attack
* All wordlists in `hcatWordlists` with `best64.rule`
* `rockyou.txt` with `d3ad0ne.rule`
* `rockyou.txt` with `T0XlC.rule`
* Top Mask Attack (Target Time = 4 Hours)
* Fingerprint Attack
* Combinator Attack
* Hybrid Attack
* Extra - Just For Good Measure
- Runs a dictionary attack using `rockyou.txt` with chained `combinator.rule` and `InsidePro-PasswordsPro.rule` rules
#### Brute Force Attack
Brute forces all characters with the choice of a minimum and maximum password length.
#### Top Mask Attack
Uses StatsGen and MaskGen from PACK (https://thesprawl.org/projects/pack/) to perform a top mask attack using passwords already cracked for the current session.
Presents the user a choice of target cracking time to spend (default 4 hours).
#### Fingerprint Attack
https://hashcat.net/wiki/doku.php?id=fingerprint_attack
Runs a fingerprint attack using passwords already cracked for the current session.
#### Combinator Attack
https://hashcat.net/wiki/doku.php?id=combinator_attack
Runs a combinator attack using the "rockyou.txt" wordlist.
#### Hybrid Attack
https://hashcat.net/wiki/doku.php?id=hybrid_attack
* Runs several hybrid attacks using the "rockyou.txt" wordlists.
- Hybrid Wordlist + Mask - ?s?d wordlists/rockyou.txt ?1?1
- Hybrid Wordlist + Mask - ?s?d wordlists/rockyou.txt ?1?1?1
- Hybrid Wordlist + Mask - ?s?d wordlists/rockyou.txt ?1?1?1?1
- Hybrid Mask + Wordlist - ?s?d ?1?1 wordlists/rockyou.txt
- Hybrid Mask + Wordlist - ?s?d ?1?1?1 wordlists/rockyou.txt
- Hybrid Mask + Wordlist - ?s?d ?1?1?1?1 wordlists/rockyou.txt
#### Pathwell Top 100 Mask Brute Force Crack
Runs a brute force attack using the top 100 masks from KoreLogic:
https://blog.korelogic.com/blog/2014/04/04/pathwell_topologies
#### PRINCE Attack
https://hashcat.net/events/p14-trondheim/prince-attack.pdf
Runs a PRINCE attack using wordlists/rockyou.txt
#### YOLO Combinator Attack
Runs a continuous combinator attack using random wordlists from the configured wordlists directory for the left and right sides.
#### Middle Combinator Attack
https://jeffh.net/2018/04/26/combinator_methods/
Runs a modified combinator attack adding a middle character mask:
wordlists/rockyou.txt + masks + worklists/rockyou.txt
Where the masks are some of the most commonly used separator characters:
2 4 <space> - _ , + . &
#### Thorough Combinator Attack
https://jeffh.net/2018/04/26/combinator_methods/
* Runs many rounds of different combinator attacks with the rockyou list.
- Standard Combinator attack: rockyou.txt + rockyou.txt
- Middle Combinator attack: rockyou.txt + ?n + rockyou.txt
- Middle Combinator attack: rockyou.txt + ?s + rockyou.txt
- End Combinator attack: rockyou.txt + rockyou.txt + ?n
- End Combinator attack: rockyou.txt + rockyou.txt + ?s
- Hybrid middle/end attack: rockyou.txt + ?n + rockyou.txt + ?n
- Hybrid middle/end attack: rockyou.txt + ?s + rockyou.txt + ?s
#### Bandrel Methodology
Prompts for comma-separated names and creates a pseudo hybrid attack by capitalizing the first letter and adding up to six additional characters at the end. Each word is limited to a total of five minutes.
- Built-in common words (seasons, months) included as a customizable `config.json` entry (`bandrel_common_basedwords`)
- The default five-minute time limit is customizable via `bandrelmaxruntime` in `config.json`
#### Loopback Attack
https://hashcat.net/wiki/doku.php?id=loopback_attack
Uses hashcat's loopback mode to feed cracked passwords from the current session back into the attack pipeline with rules applied. This generates new password candidates based on variations of already-cracked passwords, which is particularly effective for finding related passwords that follow similar patterns.
* Prompts for rule selection to apply to the loopback candidates
* Uses an empty wordlist with the --loopback flag to process previously cracked passwords
* Automatically downloads Hashmob rules if no rules are available locally
#### LLM Attack
Uses a local Ollama instance to generate password candidates for a capture-the-flag scenario. Prompts for the fake company name, industry, and location, then sends these details to the configured LLM model to produce likely password candidates using industry terms and company name permutations. The generated candidates are fed into a hashcat wordlist+rules attack.
* Requires a running Ollama instance (default: `http://localhost:11434`, override with `OLLAMA_HOST` in `.env` or the environment) with the model already pulled — hate_crack does not auto-pull
* Candidate generation uses structured (JSON) output via Atomic Agents, so pick a model with good schema adherence (default: `qwen2.5:32b`)
* Configurable model, context window, request timeout, and sample size via `.env` (see Ollama Configuration below)
* Prompts for target company name, industry, and location. The industry and location prompts are pre-filled with the local model's guesses about the named organization (editable, and clearly labelled as guesses rather than verified OSINT); disable with `ollamaAutoResearch: false`
* Alternatively derives basewords from a sample **wordlist**, or from the **cracked passwords** of the current session (`<hashfile>.out`) so the model mirrors the target organization's own password conventions and produces new candidates in that style (only offered once something has been cracked)
* A live spinner with an elapsed-seconds counter runs during generation, and requests are bounded by `ollamaTimeout` so a model stuck loading into VRAM reports a timeout instead of hanging
**Pattern rules mode** (option 4 in the LLM submenu) takes the same shape as the [Spoonman Attack](#spoonman-attack) — a baseword list run through a rule file, both derived from one corpus — but infers each side with the model instead of extracting it. Spoonman is exact and therefore bounded: its basewords all appear in the corpus and its rules only reproduce transformations the corpus already shows. This asks the model to generalize on both axes, so it can name the *word families* behind a sample (the company and its products, site names, local sports teams, seasons, mascots) and write decorations the corpus does not contain.
* Pattern source is either the current session's cracked passwords (offered first, and only once something has been cracked, since those reveal the target's real conventions) or a sample wordlist
* **You are not asked to pick a rule file.** The model writes one, from the same corpus statistics — a stock rule file encodes the internet's habits, and the point of spending a model round trip is to encode *this* organization's
* Basewords are normalized to lowercase letters only, discarding anything under 3 characters, so the generated rules supply case, digits, and punctuation exactly once
* Generated rules are validated before hashcat sees them, and anything using an op hashcat does not have, a position argument outside `0-9A-Z`, more than 31 functions, or a stray comment or non-ASCII character is discarded. hashcat drops an invalid rule *silently* when valid rules share the file, so an unscreened line would become missing coverage rather than an error. The op table was established by testing hashcat itself, not from its rule documentation, which lists ops hashcat will not actually run
* Local-model yield varies a lot run to run, so a thin answer is asked again once and the two rounds are merged — a handful of rules would waste the pass they are spent on
* If no rule survives validation the basewords still run, unmutated, rather than throwing away the expensive half of the run
* Output lands in `<hashfile>.llm_patterns/` as `basewords.txt` and `rules.rule` — per-run scratch, laid out like `.spoonman/` and removed on exit
#### OMEN Attack
Uses the Ordered Markov ENumerator (OMEN) to train a statistical password model from a wordlist and generate password candidates. This attack learns patterns from known passwords and generates new candidates based on those patterns.
* Requires OMEN binaries (createNG and enumNG) to be built from the omen submodule
* Interactive menu: use existing model, train new model, or cancel
* Training wordlist picker shows available wordlists from configured directory or accepts a custom path
* Validates all 5 required model files (createConfig, CP/IP/EP/LN.level) before running
* Captures and reports enumNG errors instead of failing silently
* Generates up to a specified number of password candidates (configurable via `omenMaxCandidates`)
* Pipes generated candidates directly into hashcat for cracking
* Model files and metadata are stored in `~/.hate_crack/omen/` for persistence across sessions
#### Combinator Attacks Submenu
Opens an interactive submenu with six combinator attack variants (formerly at menu keys 10-12). Consolidates related attacks for cleaner menu organization:
- Combinator Attack - combines two wordlists
- YOLO Combinator Attack - combines all permutations of multiple wordlists
- Middle Combinator Attack - combines wordlists with an extra word in the middle
- Thorough Combinator Attack - comprehensive combination of wordlists with rules
- Combinator3 Attack - combines exactly 3 wordlists using `combinator3.bin`, generating all `word1+word2+word3` combinations piped to hashcat
- CombinatorX Attack - combines 2-8 wordlists using `combinatorX.bin` with optional `--sepFill` separator character between word segments
#### Ad-hoc Mask Attack
Runs hashcat mask attack (mode 3) with a user-specified custom mask string. Allows fine-grained control over character-set brute forcing.
* Opens with a choice between typing a mask and selecting a mask file
* Prompts for a hashcat mask (e.g., `?u?l?l?l?d?d` for uppercase + lowercase + lowercase + lowercase + digit + digit)
* Supports custom character sets (`-1`, `-2`, `-3`, `-4`) for specialized character combinations
* Interactive charset entry with early exit on blank input
* Mask files (`.hcmask`) can be selected with tab completion, defaulting to the bundled `masks/` directory; hashcat runs every mask in the file in order. Because a mask file defines its own charsets inline, the `-1` through `-4` prompts are skipped when one is chosen
* Useful for targeted brute forcing when you know password structure patterns
#### Markov Brute Force Attack
Generates password candidates using Markov chain statistical models. Similar to OMEN but simpler and faster.
* Checks for existing `.hcstat2` Markov table from previous sessions (with option to reuse, regenerate, or cancel)
* Generates table from training source if needed:
- Can use cracked passwords from current session (`.out` file) as training data
- Or select any wordlist from configured directory or custom path
* Interactive menu: choose minimum and maximum password length
* Uses `--increment` flag to test lengths in sequence
* Markov table persists with hash file (filename.out.hcstat2) for fast subsequent runs
* Faster than OMEN for general-purpose brute forcing
#### N-gram Attack
Generates n-gram candidates from a corpus file using `ngramX.bin` from hashcat-utils and pipes them into hashcat.
* Prompts for a corpus file with tab completion, defaulting to the configured wordlist directory
* Prompts for an n-gram group size (default 3)
* Gzip-compressed corpus files are auto-detected and decompressed on the fly
* Useful when you have target-relevant prose (scraped site copy, leaked documents, internal wiki exports) rather than a password list
#### Permutation Attack
Generates all character permutations of each word in a targeted wordlist and pipes them to hashcat via `permute.bin` from hashcat-utils.
* Prompts for a single wordlist file (not a directory)
* Effective against short targeted wordlists where the character set is known but the order is not (company abbreviations, name fragments, known tokens)
* WARNING: Scales as N! per word - an 8-character word produces 40,320 permutations. Only practical for words up to ~8 characters.
* Uses `permute.bin < wordlist | hashcat` pipeline pattern
#### Random Rules Attack
Generates a set of random hashcat mutation rules using `generate-rules.bin`, writes them to a temporary file, then runs hashcat against a chosen wordlist with those rules.
* Prompts for rule count (default 65536)
* Prompts for wordlist path with tab-completion and numbered selection
* Temporary rules file is cleaned up after the run regardless of outcome
* Useful when known rule sets are exhausted - explores random rule-space for additional cracks
#### Combipow Passphrase Attack
Generates all unique non-empty subset combinations from a short wordlist using `combipow.bin` and pipes them into hashcat. Designed for passphrase cracking when you know the pool of words a password was built from.
* Prompts for a wordlist file (max 63 lines - combipow generates up to 2^n-1 combinations)
* Optional space separator (`-s` flag) to insert spaces between words in each combination
* Warns if the wordlist exceeds 20 lines (output volume may be large)
* Aborts with a clear message if the wordlist exceeds 63 lines (hard limit)
* Candidates are piped directly to hashcat stdin
#### PCFG Attack
Uses [pcfg_cracker](https://github.com/lakiw/pcfg_cracker) to generate candidates from a Probabilistic Context-Free Grammar, piping `pcfg_guesser.py` output directly into hashcat's stdin mode. A PCFG models password *structure* (baseword + digits + symbol, capitalization habits, keyboard walks) with learned probabilities, so candidates come out roughly in descending likelihood order.
* Requires the `pcfg_cracker` submodule. Presence is checked at startup and reported non-fatally: if it is missing, the PCFG attacks are simply unavailable. Run `make` to fetch it.
* Uses the trained grammar named by `pcfgRuleset` in `config.json` (default `DEFAULT`), read from `pcfg_cracker/Rules/<name>/`
* Candidate count is capped by `pcfgMaxCandidates` (default 50,000,000)
* hate_crack does not wrap grammar training. To build a grammar from a target-specific password set, run pcfg_cracker's own `trainer.py` and point `pcfgRuleset` at the resulting ruleset name
#### PRINCE-LING Attack
Uses pcfg_cracker's `prince_ling.py` to derive an optimized PRINCE base wordlist from a trained grammar, then hands it to the existing PRINCE attack. PRINCE-LING picks base words the grammar says are actually productive, so the PRINCE combination space is far less wasteful than pointing PRINCE at a generic wordlist.
* Requires the `pcfg_cracker` submodule and a trained ruleset directory, same as the PCFG attack
* The generated wordlist is cached at `<hcatOptimizedWordlists>/pcfg_prince_ling_<ruleset>.txt` and reused across sessions
* Regenerates only when the ruleset directory is newer than the cached wordlist, so retraining a grammar invalidates the cache automatically
* Generation is written to a temporary file and atomically moved into place; a failed or interrupted run cleans up its partial file and leaves any existing cache intact
* Base wordlist size is capped by `pcfgPrinceLingMaxCandidates` (default 10,000,000)
#### Spoonman Attack
Derives a baseword list and a hashcat rule file from a corpus of known plaintext passwords — a previous engagement's cracked output, a leak dump, or any password list — such that the baseword x rule cross product reconstructs the corpus exactly (see the memory bound below for the one case where it does not). Contributed as issue #169 by @Spoonman1091.
Each password is split into its letters-only lowercased core (the baseword) plus a rule that rebuilds the original from it, using `l`/`u`/`c` for casing, `T{p}` toggles, `${x}`/`^{x}` for trailing and leading characters, and `i{p}{x}` for interior ones.
* When the current session already has cracked plaintexts (`<hash file>.out` exists and is non-empty), a picker offers those as the corpus ahead of a free-form path — the target's own recovered passwords derive rules describing that target's actual conventions, which is exactly what you want to fire back at the remaining uncracked hashes. Deriving from `.out` and then cracking the same hash file appends new plaintexts to that same file, growing the corpus for the next run; that is the intended feedback loop, not corruption. Sessions with no cracked output yet see no picker at all — just today's path prompt
* Prompts for the corpus, then for how much of the rule file to run: top 50% coverage (listed first and recommended), top 75%, top 95%, top 99%, or the full set
* Rules are sorted by how many passwords each one rebuilds, so a truncated file keeps the most productive rules. Coverage is extremely long-tailed: on a 98.2M-password sample, 50% coverage needed 4,120 rules while 95% needed 16,119,661 and 100% needed 21,029,696 — the last few percent typically costs orders of magnitude more rules than the first half, which is why the smallest tier is listed first and is usually the right choice
* Output is written beside the hash file in `<hash file>.spoonman/`, alongside the other ephemeral wordlists: `basewords.txt`, `rules.full.rule`, the capped rule files, and `coverage.txt` with per-milestone rule counts. Derivation is skipped on later runs of the same hash file unless the corpus has been modified since, and the directory is removed on exit by the temp-file cleanup
* Derivation is bounded in memory. Both counters would otherwise grow for the whole read with nothing written until the end, so a corpus large enough to exhaust RAM lost the entire pass to an OOM kill and produced no output; a measured run against a 31 GB corpus reached 14.1 GB resident at 11% of the file and was still accelerating. Each counter is now capped at 20 million distinct keys (about 1.6 GB apiece), and the lowest-frequency keys are discarded once it is exceeded. If that happens, the run says so on the console and in `coverage.txt`, the output reconstructs the retained keys rather than 100% of the corpus, and the coverage percentages are relative to those. Corpora below the cap are unaffected
* Passwords that cannot be expressed as a rule are written verbatim as their own baseword with a `:` no-op, so coverage stays complete. This covers two hashcat limits: rule positions cannot address past index 35, and hashcat rejects any rule with more than 31 functions — silently, when valid rules share the file
* The derivation self-checks every password by reconstructing it in-process, and reports any failures rather than reporting success
* Corpus lines may carry a hash in front of the password, as cracked output does. A leading field is dropped only when it has the shape of a hash (a hex digest at a known length, or a crypt-style `$id$` string), so `hash:salt:plain` is handled while a plaintext or wordlist entry containing a colon survives intact. `$HEX[...]` plaintexts are decoded. If most lines look like an uncracked dump rather than cracked output, `coverage.txt` records the count and the attack warns — the derived basewords and rules would otherwise be meaningless without any error being raised
#### Rosetta Attack
Mines hashcat `--debug-mode 5` logs for the basewords and rules that already cracked something, then runs their full cross product. Powered by [HashcatRosetta](https://github.com/bandrel/HashcatRosetta), the same library behind [Analyze Hashcat Rules](#analyze-hashcat-rules-rule-file-tools-option-5).
No setup is needed to feed it: `_add_debug_mode_for_rules` appends `--debug-mode 5 --debug-file` to every rule-based hashcat invocation hate_crack makes, so the logs accumulate in `hcatDebugLogPath` (`~/.hate_crack/hashcat_debug` by default, one file per session) as a side effect of normal use. A mode 5 log records only candidates that cracked a hash, in the form `baseword:rule:candidate:wordlist`, which is what makes both halves known-productive against this target population; the trailing wordlist field also shows which list is earning its keep on a multi-wordlist run. HashcatRosetta parses mode 4 and mode 5 alike, so logs written before the switch are still read.
The value is in the cross product rather than the recorded pairs. A pair present in a log has already cracked its hash and will not crack another, but a rule that worked on one baseword has usually never been tried against the others — so N basewords and M rules yield close to N x M untried candidates.
The menu first asks how to rank rules — choices 1-3 below, plus a fourth, unrelated mode:
* Rules can be ranked by application frequency, by how many distinct basewords each one worked on, or by how many unique candidates each one generated. Frequency is the default; baseword spread is the better choice when the goal is a rule set that generalizes past the specific words it was learned from
* Only after one of those three is picked does hate_crack list the logs found in `hcatDebugLogPath` newest-first with their sizes; pick one, pick all of them (up to 20), or type a path to a log from elsewhere
* Prompts for how many top rules to keep (default 100) and how many top basewords (default all). Zero means unlimited for either. The keyspace is the product of the two and is printed before hashcat starts
* Output is written beside the hash file in `<hash file>.rosetta/` as `basewords.txt` and `rules.rule`, alongside the other ephemeral wordlists, and the directory is removed on exit by the temp-file cleanup
* Reading stops at 1,000,000 debug lines, since the analyzer needs the whole batch in memory at once. Truncation is reported on the console rather than assumed harmless — logs from a long run routinely exceed this, in which case the newest log is the one worth selecting
* **LLM Mask Attack** (4) - a different mode entirely, and the only one that needs no debug logs. Prompts for a natural-language description of the passwords you expect (length, character patterns, symbols, etc.), sends it to the locally configured Ollama model, writes the returned masks to `<hash file>.hcmask`, and runs a `-a 3` hashcat mask attack against them
#### Wordlist Tools (option 80)
A submenu of wordlist preprocessing utilities using hashcat-utils binaries. All tools read from and write to files on disk. All file and directory path prompts support tab completion.
| Key | Tool | Description |
|-----|------|-------------|
| 1 | Filter by Length | Keep only words between a min and max length (`len.bin`) |
| 2 | Require Char Classes | Keep words that include all char classes in mask (`req-include.bin`). Mask: 1=lower, 2=upper, 4=digit, 8=symbol (additive) |
| 3 | Exclude Char Classes | Remove words containing any char class in mask (`req-exclude.bin`). Same mask encoding |
| 4 | Extract Substring | Cut bytes from each word at a given offset and optional length (`cutb.bin`) |
| 5 | Split by Length | Create per-length files in an output directory (`splitlen.bin`) |
| 6 | Subtract Wordlist | Remove lines from a wordlist that appear in one or more remove files. Mode 1 uses `rli2.bin` (single file); mode 2 uses `rli.bin` (multiple files) |
| 7 | Shard Wordlist | Split a wordlist into N equal, interleaved parts in one run, written as `base.001`…`base.00N` for distributed cracking (`gate.bin`) |
| 8 | Optimize Wordlists | Dedupe and split the selected wordlists into per-length files under an output directory |
| 9 | Download from Hashmob.net | Browse and download wordlists from Hashmob.net into the configured wordlist directory |
| 10 | Download from Weakpass | Browse and download Weakpass wordlist torrents, with automatic extraction |
All binaries are in `hate_crack/hashcat-utils/bin/`.
#### Rule File Tools (option 81)
Preprocesses hashcat rule files using `cleanup-rules.bin` and `rules_optimize.bin` from hashcat-utils, and downloads rule files from Hashmob.net.
* **Clean** (1) - removes invalid syntax and duplicate rules using `cleanup-rules.bin`. Useful after combining rule files or downloading rules from external sources.
* **Optimize** (2) - consolidates redundant operations using `rules_optimize.bin`. Reduces rule file size and improves cracking speed.
* **Clean and optimize** (3) - runs both operations in sequence via a temporary file, then writes the final result.
* **Download rules from Hashmob.net** (4) - fetches rule files into the configured `rulesDirectory`.
* **Analyze Hashcat rules** (5) - opcode frequency analysis of a rule file, powered by HashcatRosetta.
The three preprocessing operations read from an input file and write to a separate output file (original is never modified).
#### Download Rules from Hashmob.net (Rule File Tools option 4)
Downloads the latest rule files from Hashmob.net's rule repository. These rules are curated and optimized for password cracking and can be used with the Quick Crack and Loopback Attack modes.
* Downloads rule sets in parallel using a thread pool (up to 4 concurrent downloads)
* Skips rules already downloaded locally
* Reports download summary with success/failure counts
* Stores rules in the configured rules directory
#### Analyze Hashcat Rules (Rule File Tools option 5)
Powered by HashcatRosetta (https://github.com/bandrel/HashcatRosetta), this feature analyzes hashcat rule files to provide detailed insights into rule composition and complexity.
* Prompts for a rule file path
* Displays frequency analysis of rule opcodes (operations)
* Helps understand what transformations a rule set performs
* Useful for rule debugging and optimization
#### Download Wordlists from Hashmob.net (Wordlist Tools option 9)
Downloads wordlists from Hashmob.net's collection of cracked passwords and commonly used wordlists.
* Interactive menu for browsing available wordlists
* Progress tracking for large downloads
* Stores wordlists in configured wordlist directory
#### Weakpass Wordlist Menu (Wordlist Tools option 10)
Interactive menu for downloading and managing wordlists from Weakpass.com via BitTorrent.
* Browse available Weakpass wordlist torrents
* Download specific wordlists or entire collections
* Automatic extraction of compressed archives
* Progress tracking for torrent downloads
-------------------------------------------------------------------
### Version History
The full, per-release changelog now lives in [CHANGELOG.md](https://github.com/trustedsec/hate_crack/blob/HEAD/CHANGELOG.md).