Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
hate_crack — أداة لأتمتة منهجيات التكسير عبر Hashcat من فريق TrustedSec. | Kitploit
أدوات/GitHubGitHub/trustedsec/hate_crack
كسر كلمات المرورهجمات كلمات المرورتحليل التجزئةاختبار الاختراق
GitHubtrustedsec/hate_crack

hate_crack

أداة لأتمتة منهجيات التكسير عبر Hashcat من فريق TrustedSec.

عرض المستودعالموقع الإلكتروني
1.9k2871منذ 20س 3دتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
root@kitploit:~
  ___ ___         __             _________                       __
 /   |   \_____ _/  |_  ____     \_   ___ \____________    ____ |  | __
/    ~    \__  \\   __\/ __ \    /    \  \/\_  __ \__  \ _/ ___\|  |/ /
\    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

root@kitploit:~
macOS (Homebrew):```bash
brew install hashcat

أو قم بتنزيل نسخة ثنائية مُجمَّعة مسبقًا من https://hashcat.net/hashcat/ وحدد hcatPath في config.json إلى موقعها.

2. تنزيل hate_crack

استنسخ مع الوحدات الفرعية (مطلوبة من أجل hashcat-utils وprinceprocessor وpcfg_cracker وCorporate_Masks، واختياريًا omen):```bash git clone --recurse-submodules https://github.com/trustedsec/hate_crack.git cd hate_crack

root@kitploit:~
إذا كنت قد استنسخت دون وحدات فرعية، فقم بتهيئتها:```bash
git submodule update --init --recursive

ثم خصّص الإعدادات إذا لزم الأمر. يستخدم hate_crack ملفي إعدادات، لكل منهما مجموعة إعدادات مميزة:

  • config.json — مسارات قوائم الكلمات، الأقنعة، القواعد، الضبط، ملف potfile، مسار hashcat، حدود المرشحين، مفاتيح تشغيل الإشعارات، الإعدادات الافتراضية لتفضيلات سطر الأوامر (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 دائم ومن الدرجة الأولى — لم يُهمل ولا يوجد جدول زمني لإزالته. فقط إعدادات التكامل هي التي انتقلت.

الترقية من config.json واحد؟ يقوم hate_crack بترحيله نيابةً عنك عند أول تشغيل: تُنسخ إعدادات التكامل إلى .env جديد بوضع 0600، ثم تُزال من config.json بحيث لا يدّعي الملفان كلاهما هذه الإعدادات. ويطبع أي المفاتيح انتقلت (وليس قيمها أبدًا)، ويحفظ نسختك الأصلية باسم config.json.pre-split.bak قبل تعديله. كل شيء آخر في config.json يبقى كما كان تمامًا، بما في ذلك ترتيب المفاتيح.

أول تشغيل: ينشئ hate_crack الملفين لك، فلا داعي لفعل أي شيء. لإعداد .env يدويًا بدلًا من ذلك، انسخ القالب المتتبَع:```bash cp .env.example .env chmod 600 .env

root@kitploit:~
`.env.example` مُدرَج في المستودع ويُوزَّع ومفاتيح الاعتماد فيه كلها فارغة. أما `.env` نفسه فيجب **أبدًا** عدم إدراجه في المستودع — فهو مستثنى عبر gitignore، إلى جانب تهجئاته الاحتياطية المعتادة، ويقوم hate_crack دائمًا بإنشائه بالوضع `0600` (قراءة/كتابة للمالك فقط). يُنشأ `.env.example` من المخطط؛ أعد إنشاءه بعد تعديل `hate_crack/config_schema.py` عبر `uv run python -m hate_crack.config_writer`.

### 3. تثبيت التبعيات و hate_crack

الطريقة الأسهل هي تشغيل `make` (أو `make install`)، الذي يكتشف نظام تشغيلك تلقائيًا ويقوم بتثبيت:
- التبعيات الخارجية (p7zip, transmission-daemon / transmission-remote)
- بناء الوحدات الفرعية (hashcat-utils, princeprocessor, pcfg_cracker، واختياريًا omen) وسحب مجموعة أقنعة Corporate_Masks الخاصة بالبيانات فقط
- تبعيات Python عبر uv وغلاف CLI في `~/.local/bin/hate_crack````bash
make

هذا الأمر idempotent - فهو يتخطى الأدوات المثبتة بالفعل. لفرض إعادة تثبيت نظيفة:```bash make reinstall

root@kitploit:~
**أو ثبّت التبعيات يدويًا:**

### التبعيات الخارجية
هذه مطلوبة لبعض عمليات التنزيل/الاستخراج:

- `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

root@kitploit:~
ثم قم بتثبيت تبعيات Python وCLI shim:```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: توليد مرشّحات LLM منظمة (JSON) عبر Atomic Agents.
  • hate_crack/menu.py: عارض قوائم مشترك، بما في ذلك التنقل الاختياري بمفاتيح الأسهم.
  • hate_crack/noninteractive.py: موزّع للأوامر الفرعية للهجمات النصية المكتوبة (scripted).
  • hate_crack/notify/: حزمة إشعارات (خلفية Pushover، ومتعقّب لكل اختراق).

يبقى الملف العلوي 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]

root@kitploit:~
بدلاً من ذلك، قم بتشغيله عبر `uv`:```bash
uv run hate_crack.py <hash_file> <hash_type>

التشغيل كأداة (موصى به)

قم بالتثبيت باستخدام make من جذر المستودع - وهذا يبني الوحدات الفرعية ويحزم الأصول:```bash cd /path/to/hate_crack make hate_crack

root@kitploit:~
أمر `make install` ينشئ واجهة bash (shim) في `~/.local/bin/hate_crack` تعمل من مجلد المستودع، بحيث يتم العثور دائمًا على الإعدادات والملفات المرافقة بغض النظر عن مجلد العمل الحالي.

يتم البحث أيضًا عن الإعدادات في:
- مجلد المستودع ومجلد الحزمة
- `~/.hate_crack`

**ملاحظة:** `hcatPath` في `config.json` يخص فقط موقع ثنائي hashcat (اختياري إذا كان hashcat في PATH). يتم تحميل ملفات Hate_crack (hashcat-utils, princeprocessor, pcfg_cracker, Corporate_Masks, omen) من مجلد المستودع ويتم تضمينها تلقائيًا بواسطة `make install`.

### التشغيل كسكربت
يستخدم السكربت سطر shebang خاصًا بـ `uv`. اجعله قابلاً للتنفيذ وقم بتشغيله:```bash
chmod +x hate_crack.py
./hate_crack.py

يمكنك أيضًا استخدام Python مباشرة:```bash python hate_crack.py

root@kitploit:~
### الاستخدام غير التفاعلي / عبر السكربتات

لأتمتة العمليات، يمكنك إطلاق هجوم واحد مباشرةً، متجاوزًا القائمة. اسم الهجوم هو الوسيط الأول، يليه ملف الهاش ونوع هاش hashcat. تقبل مطالبات المعالجة المسبقة (تصفية حسابات الكمبيوتر، القوة العمياء القائمة على LM أولاً، إزالة تكرار الحسابات) قيمها الافتراضية تلقائيًا في هذا الوضع. تنتهي العملية بالرمز `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)

root@kitploit:~
يؤثر هذا على المستنسخات التي أُنشئت قبل يوليو 2026. أُعيدت كتابة السجل المنشور
بعد ذلك لإزالة بعض الملفات التي كان ينبغي ألا تُرسل أبدًا، مما أعطى
كل commit معرّفًا جديدًا؛ لذلك فإن وسوم المستنسخ الأقدم تشير إلى كائنات
لم يعد هذا المستودع يحتويها، وgit يرفض تحريك وسم يمتلكه بالفعل.
لا يوجد خطأ في نسختك المحلية ولا توجد أي بيانات تكسير معرّضة للخطر.

استعد عبر إعادة تعيين لمرة واحدة. يؤدي هذا إلى تجاهل الالتزامات المحلية والتعديلات في
نسخة العمل، لذا إذا كنت قد خصصت أي شيء يتتبعه git (بخلاف
`config.json`، الذي لا يتم تعقبه)، فقم بتنفيذ commit له على فرع أولاً:```bash
cd /path/to/hate_crack
git fetch --tags --force origin
git checkout -B main origin/main
make install

--force هنا يحدّث الـ tags فقط؛ ولا يمكنه لمس الـ commits الخاصة بك. بعد ذلك يعمل المحدّث المدمج بشكل طبيعي. الإصدارات قبل 2.18 لم تكن قادرة على تنفيذ هذا الاسترداد بنفسها، ولهذا يجب القيام به يدويًا مرة واحدة.

خطأ: دليل البناء غير موجود

إذا رأيت خطأً مثل:``` Error: Build directory /opt/hashcat/hashcat-utils does not exist. Expected to find expander at /opt/hashcat/hashcat-utils/bin/expander.

root@kitploit:~
هذا يعني أن أصول hate_crack لم يتم تضمينها في الحزمة المثبّتة.

**فهم المسارات:**
- `hcatPath` في config.json → يشير إلى **موقع ثنائي 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 (دليل يُستخدم بواسطة Quick Crack؛ يتراجع إلى 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) ... }

root@kitploit:~
**تحميل الإعدادات:**
- الأولوية لكل مفتاح: `os.environ` > ملفّه الخاص (`.env` أو `config.json`) > القيمة الافتراضية المضمنة
- المفاتيح المفقودة تعود إلى القيم الافتراضية المضمنة؛ يوثّق `config.json.example` كل مفتاح في `config.json`
- يتم البحث في كلا الملفين، بشكل مستقل عن بعضهما البعض، بهذا الترتيب: **جذر المستودع**، ثم **دليل الحزمة المثبّتة**، ثم **`~/.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

اقرأ هذين السطرين قبل تصحيح إعداد "لا يسري مفعوله". إنهما موجودان بسبب مصيدتين في ترتيب البحث:

  • النسخة المستخرجة (checkout) تتفوق على مجلدك الرئيسي. يتم البحث في جذر المستودع أولاً، لذا فإن ملف .env أو config.json الموجود في أي نسخة مستخرجة تشغّل الأداة منها يتغلب على الملف الموجود في ~/.hate_crack — وتشغيل الأداة من النسخة المستخرجة هو بالضبط ما ينشئ تلك الملفات هناك في المقام الأول. إذا قام هذا بحجب إعداد حقيقي في ~/.hate_crack، فإن hate_crack يخبرك الآن بذلك عبر سطر [!] ثالث يذكر المسارين معًا — تعامل مع هذا السطر على أنه "الملف أدناه يتم تجاهله"، وليس كإعداد ثانٍ صالح بنفس القدر.
  • لا يتم البحث أبدًا في دليل العمل الحالي. يتم تجاهل ملف .env الموجود في الدليل الذي تتواجد فيه عن قصد: فمجلدات المهام مليئة بملفات لم يقصد أحدٌ أنها إعدادات. ضعه في جذر المستودع أو في ~/.hate_crack.

Error: merge with ref 'refs/heads/master' but no such ref was fetched

إذا رأيت:``` Your configuration specifies to merge with the ref 'refs/heads/master' from the remote, but no such ref was fetched.

root@kitploit:~
تمت إعادة تسمية الفرع الافتراضي من `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

root@kitploit:~
هذا الأمر تكافؤي - يتخطى الأدوات المثبتة بالفعل.

**فرض إعادة تثبيت نظيفة:**```bash
make reinstall

تحديث سريع - يعيد بناء الوحدات الفرعية ويعيد تثبيت الأداة (بعد سحب التغييرات):```bash make update

root@kitploit:~
**Uninstall** - يزيل تبعيات نظام التشغيل والأداة:```bash
make uninstall

بناء hashcat-utils فقط:```bash make hashcat-utils

root@kitploit:~
**تشغيل الاختبارات** - يعالج تلقائيًا HATE_CRACK_SKIP_INIT عند الحاجة:```bash
make test

تقرير التغطية:```bash make coverage

root@kitploit:~
**نظّف مخرجات البناء/الاختبار:**```bash
make clean

التطوير

إعداد بيئة التطوير

ثبّت المشروع مع التبعيات التطويرية الاختيارية (تشمل أدوات الفحص والاختبار):```bash make dev-install

root@kitploit:~
### تشغيل أدوات الفحص والتحقق من الأنواع

قبل دفع التغييرات، قم بتشغيل هذه الفحوصات محليًا. استخدم `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

root@kitploit:~
**ty (التحقق من الأنواع):**```bash
make ty
# or manually:
uv run ty check hate_crack

تشغيل جميع الفحوصات معًا:```bash make lint

root@kitploit:~
### تشغيل الاختبارات

تكتشف الاختبارات تلقائيًا عندما لا تكون الوحدات الفرعية مبنية، وتضبط `HATE_CRACK_SKIP_INIT=1` تلقائيًا.```bash
make test

أو قم بتشغيل pytest مباشرة:```bash uv run pytest -v

root@kitploit:~
مع التغطية:```bash
make coverage

أو باستخدام pytest:```bash uv run pytest --cov=hate_crack

root@kitploit:~
### خطافات Git (prek)

يتم إدارة خطافات Git بواسطة [prek](https://github.com/j178/prek) (v0.3.3+). ثبّت الخطافات باستخدام:```bash
prek install --hook-type pre-push --hook-type pre-commit

يؤدي هذا إلى تثبيت الخطافات المعرّفة في prek.toml باستخدام مخطط TOML للمستودع المحلي في pre-commit:

  • 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 كتابة الملفات في مكانها، لذا أعد إضافة الملفات إلى منطقة الترحيل ثم نفّذ الإيداع (commit) مرة أخرى بعد تشغيلها.

ملاحظة: يتوقع prek 0.3.3 وجود repos = [...] في المستوى الأعلى. الصيغة القديمة [hooks.<stage>] commands = [...] غير مدعومة.

التنقل في القائمة بمفاتيح الأسهم

تستخدم القوائم افتراضيًا التحديد الكلاسيكي المرقّم عبر print() + input()، والذي يقبل المفاتيح متعددة الأرقام الكاملة.

لتفعيل التنقل بمفاتيح الأسهم عبر simple-term-menu، اضبط HATE_CRACK_ARROW_MENU=1. في هذا الوضع تعمل فقط مفاتيح الاختصار ذات الرقم الواحد؛ ويجب الوصول إلى الخيارات المرقّمة 10 فأعلى باستخدام مفاتيح الأسهم. يتطلب وضع مفاتيح الأسهم أيضًا طرفية (TTY)، لذا يبقى معطلًا عند توجيه الإخراج عبر أنبوب.

التبعيات التطويرية

تتضمن مجموعة [dev] الاختيارية:

  • ty - مدقق الأنواع الثابتة
  • ruff - أداة فحص وتنسيق Python السريعة
  • pytest - إطار اختبارات
  • pytest-cov - تقارير التغطية

الخيارات الشائعة:

  • --download-hashview: نزّل التجزئات (hashes) من 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: أعد بناء <hashfile>.out من ملف POT الخاص بـ hashcat عند بدء التشغيل، مع استبدال أي محتويات موجودة، ثم تابع إلى القائمة العادية. بدون هذا العلم، يعمل البحث في POT فقط عندما لا يكون موجودًا بالفعل. يقوم خيار القائمة 93 بالشيء نفسه عند الطلب، مع رسالة تأكيد.

تكامل Hashview

يتكامل hate_crack مع Hashview لإدارة التجزئات مركزيًا وكسرها موزّعًا.

القائمة التفاعلية

الوصول إلى قائمة Hashview التفاعلية:```bash hate_crack.py --hashview

root@kitploit:~
Menu options:
- **(1) رفع الهاشات المكسورة** - رفع النتائج المكسورة من الجلسة الحالية إلى Hashview
- **(2) رفع قائمة الكلمات** - رفع ملف قائمة كلمات إلى Hashview
- **(3) تنزيل قائمة الكلمات** - تنزيل قائمة كلمات من Hashview
- **تنزيل القاعدة** - تنزيل ملف قواعد من Hashview (مفكوك الضغط إلى نص عادي، جاهز للاستخدام مع `hashcat -r`)
- **(4) تنزيل الهاشات المتبقية** - تنزيل الهاشات غير المكسورة المتبقية (يطلب التبديل للكسر)
- **(5) تنزيل الهاشات التي تم العثور عليها** - تنزيل الهاشات المكسورة بالفعل مع كلمات المرور بالنص الصريح (للرجوع إليها/التحليل)
- **(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"

root@kitploit:~
قم بتنزيل ملف القواعد (محفوظ بدون ضغط، جاهز للاستخدام مع `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

root@kitploit:~
تحميل الهاشات التي تم العثور عليها (هاشات تم كسرها بالفعل مع النص الصريح):```bash
hate_crack.py --hashview download-found --customer-id 1 --hashfile-id 123

ارفع ملف الهاش وأنشئ مهمة:```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"

root@kitploit:~
#### الإعداد

قم بتعيين بيانات اعتماد Hashview في `.env` (هذه إعدادات تكامل، لذا لا توجد في `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

root@kitploit:~
- **`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`، ارفض إرسال أي شيء خارج هذا المضيف، لأيٍّ من الواجهات الخلفية الثلاث لنماذج LLM (Ollama أو vLLM أو خادم متوافق مع OpenAI). هناك فحصان مرتبطان بهذا الإعداد الواحد: يقوم Ollama بتوجيه نموذج يحمل وسم `-cloud` (`gpt-oss:120b-cloud`، `deepseek-v3.1:671b-cloud`) إلى ollama.com عبر نفس نقطة النهاية المحلية التي يستخدمها النموذج المحلي، لذا لا شيء في الطلب يبدو مختلفًا — وهذا يُرفض حسب اسم النموذج. كما يتم فحص عنوان URL للواجهة الخلفية المكوَّنة: أي وجهة ليست loopback أو خاصة أو link-local (وليست `localhost` أو اسم `.local`/`.internal`/`.lan`/`.localdomain`) تُرفض حسب الوجهة، وأي اسم مضيف لا يمكن لهذا الفحص حله يُرفض أيضًا، مع الإغلاق عند الفشل، بدلاً من السماح بوجهة غير قابلة للتحقق. تحمل مطالبات 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 نفسه.
- تأكد من أن Ollama يعمل وأن النموذج مسحوب (`ollama pull qwen2.5:32b`) قبل استخدام هجوم LLM — لم يعد hate_crack يسحب النماذج المفقودة تلقائيًا.

يقدم الهجوم ثلاثة أوضاع للتوليد:

1. **Target info** — الشركة / الصناعة / الموقع / الشركة الأم؛ يستمد النموذج المرشحين من هذه التفاصيل.

   بعد كتابة اسم الشركة، يسأل hate_crack نفس النموذج المحلي عن معرفته بهذه المنظمة ويملأ مسبقًا مطالبات **الصناعة** و**الموقع** و**الشركة الأم** بالإجابات، معروضة بين قوسين:   ```
   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):
   Parent company / acquired by:

اضغط Enter لقبول اقتراح أو اكتب فوقه. هذه القيم هي ما يتذكره النموذج، ليست OSINT — تعامل معها كنقطة بداية، وليست معلومات استخباراتية عن العميل. يستخدم البحث خادم Ollama المحلي فقط، لذا لا يغادر اسم العميل الجهاز المضيف أبدًا؛ ولا توجد أي استدعاءات ويب أو API تابعة لجهات خارجية. إذا لم يتعرف النموذج على المؤسسة (وهي الحالة الشائعة للعملاء الصغار)، فإنه لا يُرجع شيئًا وتحصل على مطالبات فارغة بسيطة: ``` Company name: Acme Rail Services Industry: Location: Parent company / acquired by:

root@kitploit:~
فشل البحث — انتهت المهلة، أو Ollama لا يعمل، أو إجابة فارغة — لا يوقف الهجوم أبدًا؛ بل يتراجع ببساطة إلى مطالبات فارغة. اضبط `ollamaAutoResearch` إلى `false` لتخطي البحث تمامًا.
2. **قائمة الكلمات** — اشتقاق الكلمات الأساسية من قائمة كلمات نموذجية.
3. **كلمات المرور المكسورة** — أعد تغذية النصوص الصريحة التي تم استردادها في هذه الجلسة (`<hashfile>.out`) إلى النموذج ليتمكن من استنتاج اصطلاحات كلمات المرور الخاصة بالمؤسسة المستهدفة (الكلمات الأساسية، الفصول، السنوات، اللواحق، لغة الليتسبيك) وتوليد مرشحات *جديدة* بنفس الأسلوب. يُدرج هذا الخيار فقط بعد كسر تجزئة واحدة على الأقل؛ يُحلل الملف بأكمله إحصائيًا تمامًا مثل وضع قائمة الكلمات (انظر `ollamaMaxSampleLines` أعلاه).

#### تكوين PCFG

يستخدم هجوم PCFG (الخيار 20) وهجوم PRINCE-LING (الخيار 21) الوحدة الفرعية `pcfg_cracker`. قم بتكوينهما في `config.json`:```json
{
"pcfgRuleset": "DEFAULT",
"pcfgMaxCandidates": 50000000,
"pcfgPrinceLingMaxCandidates": 10000000
}
  • pcfgRuleset — اسم القواعد المدربة لاستخدامها (الافتراضي: DEFAULT)، ويُحل إلى pcfg_cracker/Rules/<name>/. درّب قواعدك الخاصة باستخدام trainer.py من pcfg_cracker واضبط هذا على اسم مجموعة القواعد.
  • pcfgMaxCandidates — الحد الأقصى للمرشحين الذين يصدرهم pcfg_guesser.py لهجوم PCFG (الافتراضي: 50000000).
  • pcfgPrinceLingMaxCandidates — الحد الأقصى للكلمات الأساسية التي يكتبها prince_ling.py في قائمة كلمات PRINCE الأساسية المخزنة مؤقتًا (الافتراضي: 10000000).

النوى المحسّنة (optimizedKernelAttacks)

علم -O في hashcat يختار النوى المحسّنة، وهي أسرع بشكل ملحوظ لكنها تضع سقفًا لطول المرشحات (حوالي 31 حرفًا، وأقل في بعض الأوضاع) وتتخطى بصمت أي شيء أطول من ذلك. يعدد optimizedKernelAttacks في config.json الهجمات التي تعمل مع -O؛ احذف هجومًا من القائمة لتشغيله بنوى كاملة الطول. القائمة في config.json.example تطابق الافتراضي المدمج الذي يُطبَّق عندما لا يوجد config.json.

أربعة هجمات تحترم هذا الإعداد لكنها ليست محسّنة افتراضيًا، لأنها تغذي مرشحات قد تتجاوز سقف -O — أضفها إلى القائمة للاشتراك في التحسين:

  • hcatNgramX, hcatOllama, hcatOmen, hcatLMtoNT

لإيقاف -O في كل مكان لتشغيل واحد دون تعديل الإعدادات، مرّر --no-optimized-kernel (الصيغة المختصرة --no-optimize). وهو يتجاوز القائمة لكل هجوم ويزيل أيضًا أي -O مكتوب داخل hcatTuning، والذي كان سيصل إلى hashcat بخلاف ذلك بغض النظر عن القائمة.

تتم مطابقة الأسماء بدقة، ويُبلَغ عن أي إدخال غير معروف عند بدء التشغيل بدلاً من تجاهله. لاحظ أن الهجمات التي تفوّض إلى هجوم آخر تتحكم فيها الهجوم الذي تفوّض إليه، وليس اسمها الخاص: PRINCE-LING يتبع hcatPrince، بينما Spoonman وRosetta وأوضاع LLM pattern-rule تتبع hcatQuickDictionary.

تتبع تغطية الهجمات (coverage_enabled)

عبر حملة طويلة، يتعرض نفس ملف التجزئة لهجمات في جلسات عديدة مع مجموعة متغيرة من قوائم الكلمات وملفات القواعد وقوائم الأقنعة، ومن السهل حرق ساعات في إعادة تشغيل مناطق قمت بتغطيتها بالفعل — خاصة وأن سطر القاعدة نفسه موجود في أكثر من ملف قواعد. يسجّل hate_crack ما شغّله بالفعل ضد كل ملف تجزئة ويعرض تخطي التداخل.

يتم تسجيل التغطية لكل إدخال، وليس لكل ملف: أسطر القواعد الفردية و أسطر .hcmask الفردية، كل منها مقترن بقائمة الكلمات التي شُغّل ضدها. هذا هو ما يسمح له بإدراك أن ملف قواعد مخصص تشغّله اليوم يكرر 40 من القواعد التي غطّاها best64.rule الأسبوع الماضي، وهو أيضًا سبب أن القاعدة تكون "مغطاة" فقط لقائمة الكلمات المحددة التي جُرّبت معها — نفس القواعد على مجموعة مختلفة تنتج مرشحين مختلفين تمامًا.

يتم تحديد ملف التجزئة عبر sha256 لمحتوياته، لذا تبقى التغطية صالحة حتى عند إعادة تسمية الملف أو نقله بين الجلسات. تُحدَّد قوائم الكلمات بنفس الطريقة، مع تخزين الملخص (digest) مؤقتًا مقابل الحجم ووقت التعديل بحيث يتم تجزئة مجموعة ضخمة (multi-gigabyte) مرة واحدة بدلاً من كل هجوم.

لا يُطلب منك سوى عندما يكون هناك شيء يستحق التخطي بالفعل:``` [*] Coverage: 40 of 45 rules in this Dictionary have already been run against this hash file. [?] Skip them and run only the 5 new rules? [Y/n]:

root@kitploit:~
أجب بـ `Y` وسيقوم hate_crack ببناء ملف قواعد مؤقت يحتوي فقط على الإدخالات غير المجرّبة؛ وأجب بـ `n` لتشغيل كل شيء على أي حال. إذا كانت *كل* الإدخالات مكررة، فسيُطلب منك ما إذا كنت تريد تخطي الهجوم تمامًا، لذا فإن إعادة تشغيل ما تم تغطيته عمدًا لا تتطلب أبدًا إعادة تشغيل الأداة.

الهجمات التي لا تتم تصفيتها أبدًا تُسجَّل مع ذلك على أنها شُغِّلت، وهذا ما يتيح لك الإجابة على السؤال "هل شغّلت PRINCE بالفعل ضد هذا الهدف؟".

ثلاثة قيود مقصودة:

- **يتم تسجيل التغطية فقط عندما يستنفد hashcat مساحة المفاتيح** (الخروج 1). إن الضغط على ctrl-C أو حدوث خطأ لا يسجّل شيئًا، وكذلك الخروج 0 — فهذا يعني أن كل تجزئة تم كسرها، وهو ما يبلغ عنه hashcat *دون* إنهاء مساحة المفاتيح، وفي الحالة الحدّية "كل التجزئات وُجدت كمدخلات في ملف potfile" دون تجربة مرشح واحد. التسجيل الناقص لا يكلّف سوى تشغيل زائد لاحقًا.
- **لا تتم تصفية مولّدات المرشحات الديناميكية أبدًا.** لا تمتلك PRINCE وPCFG وOMEN والقوة العمياء من نوع Markov ووضعيات LLM مجموعة ثابتة للمقارنة، لذا تُسجَّل على أنها شُغِّلت وتُترك وشأنها. يتم تتبّع ملفات القواعد المتسلسلة (`-r a -r b`) كوحدة واحدة بدلاً من تتبّع كل إدخال على حدة، لأن hashcat يطبّق *الجداء الديكارتي* للملفين، وإسقاط سطر فردي سيزيل بصمت كل تركيبة شارك فيها.
- **يتم تسجيل عمليات تشغيل `--loopback` ولكن لا يتم تصفيتها أبدًا.** يعيد hashcat إدخال النصوص العادية المكسورة حديثًا كمرشحات *إضافية*، لذا فإن مثل هذا التشغيل يجرب قائمة الكلمات الكاملة ومجموعة القواعد بالإضافة إلى ما تصل إليه تلك النصوص العادية المعاد تدويرها. وهذا يجعل الاتجاهين غير متماثلين: تسجيله أمر سليم، لذا يتم التعرف على تشغيل عادي لاحق لنفس قائمة الكلمات والقواعد بشكل صحيح كتكرار، لكن تشغيل loopback ثانٍ لديه المزيد من التجزئات المكسورة لإعادة تدويرها ولا يتم تخطيه أبدًا.

عيّن `coverage_enabled` إلى `false` في `config.json` لتعطيل هذا، أو مرّر `--no-coverage` لتشغيل واحد — وهو لا يطّلع على المخزن ولا يحدّثه.

#### فحص التغطية وإعادة تعيينها

خيار القائمة الرئيسية **85 — Attack Coverage** يعرض ما تم تشغيله ضد ملف التجزئة المحمّل، وسجل تشغيله، ويمكنه مسحه. نفس الإجراءات الثلاثة قابلة للبرمجة النصية:```bash
# What has already been run against this hash file?
hate_crack coverage status --hashfile hashes.txt

# Every attack that has run against it, oldest first
hate_crack coverage history --hashfile hashes.txt

# Start over for this hash file only (prompts unless --yes)
hate_crack coverage forget --hashfile hashes.txt --yes

يتم تحديد ملف الهاش حسب المحتوى، لذلك تعمل هذه بغض النظر عن المكان الذي نُقل إليه منذ ذلك الحين. forget يؤثر فقط على ذلك الهدف الواحد — المخزن موجود في ~/.hate_crack/coverage/attack_coverage.sqlite3، وحذف الملف يعيد تعيين التغطية لـكل هدف.

التشغيل عبر السكربتات

هجوم نصي تتخطاه التغطية بالكامل لا يزال يخرج برمز 0 افتراضيًا، لذلك لن يؤدي تفعيل التغطية إلى إفشال بيئة اختبار قائمة. مرر --exit-code-on-skip للحصول على رمز الخروج 3 بدلاً من ذلك عندما لا يتم تشغيل أي شيء:```bash hate_crack --exit-code-on-skip hashes.txt dict

0 = ran, 1 = bad input, 2 = unknown command, 3 = everything was already covered

root@kitploit:~
رمز الخروج 3 يعني أن *لا شيء* تم تشغيله. المرور الذي تمت تصفيته جزئيًا — بعض الإدخالات
تم تخطيها وبعضها تمت محاولته — لا يزال يخرج برمز `0`، لأن الهجوم أنجز عملًا بالفعل.

### الإشعارات (خيار القائمة 82)

يمكن لـ hate_crack إرسال إشعارات دفع عبر Pushover عند اكتمال الهجمات،
وبشكل اختياري، عند كسر هاشات فردية. توجد جميع عناصر التحكم تحت
خيار القائمة الرئيسية `82 — Notifications`:

1. **تبديل إشعارات Pushover [ON/OFF]** — المفتاح الرئيسي. يُحفظ في `config.json` باسم `notify_enabled`.
2. **تبديل الإشعارات لكل كسر [ON/OFF]** — عندما يكون ON، تقوم أداة مراقبة خلفية بمراقبة ملف `.out` وترسل إشعارًا لكل كسر (مع تجميع الدفعات لكل دورة). يُحفظ في `config.json` باسم `notify_per_crack_enabled`. لا يمكن تفعيله بينما المفتاح الرئيسي في وضع OFF — فعّل الخيار 1 أولًا.
3. **إرسال إشعار 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 من الأجزاء المتساوية غير المتداخلة بحيث يمكن توزيع العمل عبر أجهزة أو وحدات معالجة رسومية متعددة. كل جزء *متشابك* (كل سطر من مضاعفات N)، لذا فإن كل جزء هو عيّنة ممثلة للقائمة الكاملة بدلًا من كتلة متصلة من الأمام/الخلف — لا تعلق أي عقدة واحدة في كسر الجزء الخلفي منخفض الاحتمال فقط.

شغّل الخيار 7 مرة واحدة، وأعطه قائمة كلمات إدخال، ومسار أساسي للإخراج، وعدد أجزاء (N). يكتب جميع أجزاء N في مرور واحد، مع تسمية بأرقام أجزاء معبأة بالأصفار (`base.001`، `base.002`، … حتى `base.00N`). انسخ جزءًا واحدًا إلى كل عقدة ووجّه تشغيل hashcat في تلك العقدة إليه. على نظام بوحدة معالجة رسومية واحدة، لا يمنح التجزئة أي تسريع، لكن الجزء الواحد يظل عيّنة سريعة وتمثيلية لمرور فرز أولي سريع قبل الالتزام بالقائمة الكاملة.

#### فحوصات التحديث التلقائية

يمكن لـ hate_crack التحقق تلقائيًا من GitHub عن إصدارات أحدث عند بدء التشغيل. يتحكم خيار الإعداد `check_for_updates` في هذه الميزة:```json
{
  "check_for_updates": true
}
  • check_for_updates — تفعيل فحص الإصدارات تلقائيًا عند بدء التشغيل (الافتراضي: true).
  • عند التفعيل، يجلب hate_crack أحدث معلومات الإصدار من GitHub ويعرض إشعارًا إذا كان هناك تحديث متاح.
  • يتم الفحص بشكل غير متزامن ولا يمنع بدء التشغيل. يتم تجاهل أخطاء الشبكة بصمت.
قنوات التحديث
القناةالعلامةالمصدرما تحصل عليه
إصدار مستقر--update

تتبع الإصدارات semver العادي، مع اشتقاق الزيادة مما هو موجود فعليًا في الدفعة. يتحرك المكوّن الثاني فقط للميزات: دورة تحتوي على أي commit من نوع feat تتجه نحو X.(Y+1).0، ودورة لا تحتوي إلا على إصلاحات ووثائق ومهام روتينية تتجه نحو X.Y.(Z+1).

nightly-dev يضع وسومًا لمرشحات الإصدار لأي نسخة تتجه إليها الدفعة — v2.20.1rc1, v2.20.1rc2, … — والدمج نحو main يرقّي نفس الهدف إلى إصداره النهائي. المرشحات هي إصدارات ما قبل الإصدار حقيقية وفق PEP 440، لذا تُرتَّب بشكل صحيح من كلا الطرفين:

root@kitploit:~
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 — لذا تفعيل check_for_updates لن يجذبك أبدًا إلى بنية ليلية. أمران يبقيان القناتين منفصلتين الآن: ذلك، وحقيقة أن المرشح هو إصدار ما قبل الإصدار حقيقي وفق PEP 440، لذا فإن أي أداة ترتّب أرقام الإصدارات الخام تعامله أيضًا على أنه أقدم من الإصدار الذي يصبحه.

أي من العلامتين يبدّل مستودعك إلى الفرع المقابل أولاً (ويرفض القيام بذلك إذا كانت لديك تغييرات غير مثبتة). إذا كنت تشغّل بنية ليلية وتريد العودة إلى الكود المطلق، فإن --update يعيدك إلى main.

الدمج التلقائي للهاشات المُكتشفة (تنزيل الجزء الأيسر فقط)

عند تنزيل هاشات الجزء الأيسر (الهاشات غير المُكسورة)، يقوم hate_crack تلقائيًا:

  1. بمحاولة تنزيل أي هاشات مُكتشفة (مكسورة) من Hashview كعملية مساعدة
  2. بدمج الهاشات المكتشفة مع ملفات .out المحلية (مثل left_1_123.txt.out أو left_1_123.nt.txt.out لتنسيق pwdump)
  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

root@kitploit:~
لم يتم تقديم أي نص مصدر للترجمة.```
$ ./hate_crack.py <hash file> 1000

  ___ ___         __             _________                       __
 /   |   \_____ _/  |_  ____     \_   ___ \____________    ____ |  | __
/    ~    \__  \\   __\/ __ \    /    \  \/\_  __ \__  \ _/ ___\|  |/ /
\    Y    // __ \|  | \  ___/    \     \____|  | \// __ \\  \___|    <
 \___|_  /(____  /__|  \___  >____\______  /|__|  (____  /\___  >__|_ \
       \/      \/          \/_____/      \/            \/     \/     \/
                          Version 2.0

اختبارات

مجموعة الاختبارات تعمل في معظمها دون اتصال بالشبكة وتستخدم نماذج محاكاة/بيانات اختبار جاهزة. فحوصات الشبكة المباشرة و فحوصات تبعيات النظام اختيارية عبر متغيرات البيئة.

تشغيل الاختبارات محليًا```bash

Run all tests

uv run pytest -v

Run specific test

uv run pytest tests/test_hashview.py -v

root@kitploit:~
يمكنك أيضًا تشغيل المجموعة الكاملة باستخدام `make test`.

### الاختبارات الحية (اشتراك اختياري)

قم بتعيين أي مما يلي لتفعيل الفحوصات الحية:

- `HASHMOB_TEST_REAL=1` — فحص اتصال Hashmob وقائمة CLI الحية
- `HASHVIEW_TEST_REAL=1` — فحص قائمة CLI الحية لـ Hashview
- `WEAKPASS_TEST_REAL=1` — فحص قائمة CLI الحية لـ Weakpass
- `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

اختبارات Hashview المباشرة ضد حزمة Docker محلية

بدلاً من توجيه الاختبارات الحية إلى خادم 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

root@kitploit:~
يؤدي هذا إلى تشغيل `docker compose` في مستودع Hashview، ويزرع مفتاح API للمشرف،
وعميلاً، وملف تجزئات، وبيانات "المهمة الفعّالة" المكسورة، ثم يقوم بتصدير
متغيرات البيئة `HASHVIEW_*` التي تقرأها الاختبارات. متغيرات البيئة المفيدة:

- `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 إلى البنية المحلية دون تعديل إعداداتك المحفوظة.

### اختبارات التثبيت الشاملة (محلي + Docker)

تثبيت أداة uv محليًا + تنفيذ السكربت (يستخدم HOME مؤقتًا):```bash
HATE_CRACK_RUN_E2E=1 uv run pytest tests/test_e2e_local_install.py -v

التثبيت/التشغيل الكامل القائم على Docker (مخزَّن مؤقتًا عبر Dockerfile.test):```bash HATE_CRACK_RUN_DOCKER_TESTS=1 uv run pytest tests/test_docker_script_install.py -v

root@kitploit:~
اختبار Docker E2E يقوم أيضًا بتنزيل مجموعة فرعية صغيرة من rockyou وتشغيل عملية crack أساسية باستخدام hashcat للتحقق من تكامل الأدوات الخارجية.

اختبار Lima VM من البداية إلى النهاية (لنظام macOS فقط):

المتطلبات الأساسية: يجب تثبيت [Lima](https://lima-vm.io/) و `rsync`.```bash
brew install lima

يتم تجهيز الجهاز الافتراضي للاختبار تلقائيًا بجميع تبعيات 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

root@kitploit:~
يتحقق هذا الاختبار من التثبيت والتنفيذ داخل جهاز افتراضي خفيف بنظام Linux على macOS.

### بنية الاختبار

- **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
  (24) القوة الغاشمة لأقنعة الشركات
  (25) هجوم القناع الذكي

  (80) أدوات قوائم الكلمات
  (81) أدوات ملفات القواعد
  (82) الإشعارات

  (93) إعادة توليد .out من ملف POT
  (94) واجهة برمجة تطبيقات Hashview
  (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.

أي قاعدة (قواعد) تود تشغيلها؟ (1) best64.rule (2) d3ad0ne.rule (3) T0XlC.rule (4) dive.rule (99) YOLO...تشغيل جميع القواعد أدخل قائمة مفصولة بفواصل للقواعد التي تود تشغيلها. لتشغيل قواعد متسلسلة استخدم الرمز +. على سبيل المثال، 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
  • Smart Mask 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. Expander substring length escalates automatically (7, 14, 21, ... up to the chosen ceiling), and an optional wordlist can be combined against the expanded fragments in addition to self-combination. Set hcatFingerprintWordlist in config.json to a default wordlist path so the prompt offers it instead of asking for a path every time; leave it as "" to always ask (or skip).

Smart Mask Attack

Looks for literal "skeleton" patterns shared by 3+ already-cracked passwords for the current session -- e.g. a fixed stem like CrawlingHorse followed by a run of digits, or ChangeMe2day followed by digits and symbols drawn from a consistent charset. For each pattern found, runs a targeted -a 3 mask attack (using the exact observed literal text and an inferred charset for the varying part) against the full remaining hash list, so other accounts sharing that stem get swept up even though brute-forcing the stem itself was never tried. Prompts once, before the attack starts, for an optional candidate-count guardrail (default 50,000,000,000; 0 disables it).

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 - _ , + . &

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, location, and parent company / acquisition history, 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, location, and parent company / acquisition history. The industry, location, and parent company 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 — 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 for specialized character combinations: -1 through -4 on any hashcat, plus -5 through -8 on hashcat 7 and newer. A mask using ?5–?8 against an older hashcat is flagged before the run rather than failing inside it; if the version cannot be read, the mask is passed through and hashcat decides
  • Only prompts for the custom slots the mask actually references — ?1?3?d asks about -1 and -3 and nothing else, and a mask with no custom tokens is never asked at all. Detection is token-aware, so the escaped ??1 is a literal ?1 and prompts for nothing. A slot left blank is still skipped, with a warning that hashcat will reject a mask whose charset is undefined

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 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 , 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

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, the same library behind Analyze Hashcat Rules.

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 and how many top basewords. Both default to all — a blank answer keeps every winning rule the logs contain, and zero means the same thing. Enter a number to cap 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

Corporate Masks Brute Force

Statistical masks (8-14 characters) derived from analysis of 3.2M NTLM hashes cracked on real engagements. Powered by Corporate_Masks, these masks encode realistic password patterns from successful penetration tests.

  • Prompts for minimum and maximum mask length (default 8-10)
  • Longer lengths cost exponentially more keyspace—start with 8-10 for speed, or 8-12 for thoroughness
  • Each mask file is run as a separate hashcat invocation in ascending length order
  • Gracefully handles missing mask files (skips them) and absent submodule (prints warning and returns)
  • Supports optimized kernels (-O flag) for faster cracking
  • Ctrl-C during one length aborts remaining lengths

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.

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.

تنزيل الأداة
  • hate_crack/username_detect.py: يكتشف ملفات الإدخال بصيغة username:hash لتقرير استخدام خيار --username الخاص بـ hashcat.
  • hate_crack/formatting.py, hate_crack/progress.py: أدوات مساعدة لتنسيق المخرجات وعرض التقدم.
  • hate_crack/main.py: تنفيذ واجهة الأوامر الرئيسية (CLI).
  • .out
  • --maxruntime <SECONDS>: تجاوز الحد الأقصى لوقت التشغيل.
  • --bandrel-basewords <PATH>: تجاوز ملف الكلمات الأساسية لـ bandrel.
  • --update: حدّث إلى أحدث إصدار وأعد التثبيت. يحوّل الفرع المعتمد إلى main إذا كان على فرع آخر، لأن وسوم الإصدارات موجودة هناك.
  • --nightly: حدّث إلى أحدث إصدار ليلي (nightly) بدلًا من ذلك، من فرع nightly-dev. لقد اجتازت الإصدارات الليلية CI لكنها ليست جزءًا من إصدار معلن. يمكن أيضًا كتابتها كـ --update --nightly.
  • --no-optimized-kernel (أو --no-optimize): لا تمرر -O إلى hashcat أبدًا طوال التشغيل. يتجاوز optimizedKernelAttacks في config.json ويزيل أي -O تضعه في hcatTuning. لا يُكتب أي شيء مرة أخرى إلى الإعدادات، لذا ينطبق هذا على هذا التشغيل فقط. مع أمر فرعي، ضعه قبل الأمر الفرعي: ./hate_crack.py --no-optimize quick hashes.txt 1000 --wordlist words.txt.
  • --debug: فعّل تسجيل التصحيح (يكتب إلى stderr).
  • main
    أحدث إصدار مقطوع. هذا هو الافتراضي وما يقدمه فحص بدء التشغيل.
    ليلي--nightlynightly-devالعمل الذي اجتاز CI لكن لم يُطرح بعد.
  • 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
  • Optionally runs the mask incrementally (--increment), trying shorter lengths before the full mask. Answering yes prompts for an increment minimum and maximum; either can be left blank, and leaving both blank increments over the mask's full keyspace with hashcat choosing the bounds. Offered for typed masks and mask files alike
  • Useful for targeted brute forcing when you know password structure patterns
  • coverage.txt
  • 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
  • KeyToolDescription
    1Filter by LengthKeep only words between a min and max length (len.bin)
    2Require Char ClassesKeep words that include all char classes in mask (req-include.bin). Mask: 1=lower, 2=upper, 4=digit, 8=symbol (additive)
    3Exclude Char ClassesRemove words containing any char class in mask (req-exclude.bin). Same mask encoding
    4Extract SubstringCut bytes from each word at a given offset and optional length (cutb.bin)
    5Split by LengthCreate per-length files in an output directory (splitlen.bin)
    6Subtract WordlistRemove 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)
    7Shard WordlistSplit a wordlist into N equal, interleaved parts in one run, written as base.001…base.00N for distributed cracking (gate.bin)
    8Optimize WordlistsDedupe and split the selected wordlists into per-length files under an output directory
    9Download from Hashmob.netBrowse and download wordlists from Hashmob.net into the configured wordlist directory
    10Download from WeakpassBrowse and download Weakpass wordlist torrents, with automatic extraction