1. Grundkonzepte: Rules, Masks & Hybrid
GovCracker unterstützt alle Hashcat-Angriffsmodi über eine geführte Oberfläche ohne Kommandozeile. Die drei zentralen Angriffsprinzipien unterscheiden sich stark in Einsatzgebiet, Keyspace und Laufzeit – die richtige Wahl entscheidet über Erfolg oder Misserfolg.
Rule-Based Attack (-a 0)
Wendet Transformationsregeln auf eine Wordlist an. Aus sommer wird z. B. Sommer2024!. Ideal wenn eine gute Ausgangswortliste vorhanden ist (bekannte Passwörter, Firmenname, Personendaten).
In GovCracker: Angriffsmodus „Wordlist" → Rule-Datei(en) per Dateiauswahl laden.
Mask Attack (-a 3)
Generiert Kandidaten rein positionsbasiert. Jede Position hat einen Zeichensatz. Kein Wörterbuch nötig. Ideal für bekannte Muster (Vorname + Jahreszahl + Sonderzeichen).
In GovCracker: Angriffsmodus „Masken-Angriff" → Mask-Feld, Custom Charsets, Increment-Optionen und Markov-Toggle direkt konfigurierbar.
Hybrid-Angriff (-a 6 / -a 7)
Kombiniert Wordlist mit einer Mask. Modus -a 6: Wort vorne, Mask hinten. Modus -a 7: Mask vorne, Wort hinten. Sehr effektiv für Muster wie sommer2024!.
In GovCracker: Angriffsmodus „Hybrid-Angriff" mit Richtungsauswahl und Mask-Eingabefeld.
Weitere Angriffsmodi
Kombinator-Angriff (-a 1)
Verknüpft je ein Wort aus zwei Wortlisten zu einem Kandidaten. Aus police und 2024 wird police2024. Optionale Inline-Rules mit -j/-k für beide Seiten. In GovCracker über den Kombinator-Modus verfügbar.
Reiner Wordlist-Angriff (-a 0)
Wörterbuch-Angriff ohne Rules – schnellste Methode, trifft direkt bekannte oder geleakte Passwörter. Immer als erster Schritt empfohlen. In GovCracker: Wordlist-Modus ohne Rule-Datei.
Empfohlene Angriffs-Reihenfolge
- Wordlist (rockyou, projektspezifisch)
- Wordlist + best64.rule
- Wordlist + rockyou-30000.rule
- Hybrid: Wordlist +
?d?d?d?d - Mask: typische Muster / .hcmask
- Brute-Force (nur kurze Längen)
2. Masks & Built-in Charsets
Eine Mask ist eine Zeichenschablone. Jeder Platzhalter legt fest, welche Zeichen an der jeweiligen Position ausprobiert werden. Feste Zeichen können direkt eingebettet werden. Die Länge der Mask bestimmt die Kandidatenlänge (bei deaktiviertem Increment).
Built-in Charsets
| Platzhalter | Name | Enthaltene Zeichen | Anzahl | Typischer Einsatz |
|---|---|---|---|---|
?l | Lowercase | abcdefghijklmnopqrstuvwxyz | 26 | Namen, normale Wörter |
?u | Uppercase | ABCDEFGHIJKLMNOPQRSTUVWXYZ | 26 | Erster Buchstabe, Abkürzungen |
?d | Digits | 0123456789 | 10 | Ziffern, PIN, Jahreszahlen |
?h | Hex lowercase | 0123456789abcdef | 16 | MD5-ähnliche Passwörter, Hashes als PW |
?H | Hex uppercase | 0123456789ABCDEF | 16 | Wie ?h, aber Großbuchstaben |
?s | Special | !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ | 33 | Sonderzeichen, Passwortrichtlinien |
?a | All printable | ?l + ?u + ?d + ?s | 95 | Vollständige Brute-Force (langsam!) |
?b | All bytes | 0x00–0xff | 256 | Binär-Kontexte, Encoding-Probleme |
?? | Literal ? | Das Zeichen ? selbst | 1 | Wenn ? im Passwort vorkommt |
Mask-Beispiele mit festen Zeichen
Feste Zeichen werden einfach direkt in die Mask geschrieben – nur Platzhalter beginnen mit ?.
| Muster | Mask | Erläuterung | Beispiele |
|---|---|---|---|
| Vorname + 4 Ziffern | ?u?l?l?l?l?d?d?d?d | Großbuchstabe, vier Kleinbuchstaben, vier Ziffern | Maria1985, Klaus2019 |
| Firmenname fest + Zahl | Firma?d?d?d?d! | Festes Präfix, vier Ziffern, festes ! | Firma2024! |
| PIN 4-stellig | ?d?d?d?d | Alle 10.000 Kombinationen | 0000–9999 |
| PIN 6-stellig | ?d?d?d?d?d?d | Alle 1.000.000 Kombinationen | 000000–999999 |
| Wort + Sonderzeichen | ?l?l?l?l?l?l?s | Sechs Kleinbuchstaben + Sonderzeichen | sommer!, winter? |
| Kennzeichen-ähnlich | ?u?u?u?d?d?d?d | Drei Großbuchstaben, vier Ziffern | ABC1234 |
| Datum | ?d?d.?d?d.?d?d?d?d | Europäisches Datumsformat | 01.01.1985 |
| Komplex 8 Zeichen | ?u?l?l?l?d?d?d?s | Typische Passwortrichtlinie | Haus1985! |
3. Custom Charsets (-1 bis -4)
Hashcat erlaubt bis zu vier benutzerdefinierte Zeichensätze. Sie werden mit -1–-4 (bzw. --custom-charset1 bis --custom-charset4) definiert und in der Mask als ?1–?4 verwendet. Built-in Charsets können kombiniert werden.
| Parameter | Langform | Platzhalter | Charset-Definition | Beispiel |
|---|---|---|---|---|
-1 CS | --custom-charset1=CS | ?1 | Zeichenkette oder kombinierte Built-ins | -1 ?l?d ?1?1?1?1?1?1 |
-2 CS | --custom-charset2=CS | ?2 | Zeichenkette oder kombinierte Built-ins | -2 ABCDEF ?2?2?d?d |
-3 CS | --custom-charset3=CS | ?3 | Zeichenkette oder kombinierte Built-ins | -3 !?_$ ?l?l?3 |
-4 CS | --custom-charset4=CS | ?4 | Zeichenkette oder kombinierte Built-ins | -4 äöüß ?l?l?4?4 |
-1 ?l?d definiert alle Kleinbuchstaben und Ziffern. Eine direkte Zeichenkette wie -1 aeiou ist ebenfalls möglich und eignet sich gut für vokalbasierte Analysen.
?l?d oder !@#$). GovCracker übernimmt die korrekte Übergabe als -1–-4-Parameter automatisch an die Engine.
4. Mask-Optionen & Increment-Modus
Neben der Mask selbst steuern verschiedene Optionen das Verhalten des Mask-Angriffs – insbesondere den Increment-Modus für variable Passwortlängen.
| Option | Bedeutung | Standardwert | Beispiel |
|---|---|---|---|
-a 3 | Aktiviert den Mask-Angriff / Brute-Force-Modus | – | hashcat -a 3 -m 1000 hashes.txt ?l?l?l?d |
--increment | Probiert alle Längen von 1 (oder --increment-min) bis zur Mask-Länge | aus | ?l?l?l?l?l?l --increment → probiert 1–6 Zeichen |
--increment-min=N | Startlänge für Increment-Modus | 1 | --increment-min=6 |
--increment-max=N | Maximallänge; darf Mask-Länge nicht überschreiten | Mask-Länge | --increment-max=10 |
--hex-charset | Interpretiert Custom Charsets als Hex-Bytes | aus | --hex-charset -1 c3a4c3b6 |
-s N | Skip: überspringt die ersten N Kandidaten (für Checkpointing) | 0 | -s 5000000000 |
-l N | Limit: stoppt nach N Kandidaten | kein Limit | -l 1000000000 |
--keyspace | Gibt den Keyspace (Anzahl Kandidaten) für die Mask aus, ohne zu cracken | – | hashcat -a 3 ?u?l?l?l?d?d?d?d --keyspace |
.hcmask-Dateien steht eine Dateiauswahl bereit – GovCracker verarbeitet die Zeilen sequenziell und zeigt den Fortschritt je Mask-Zeile.
5. Hashcat Mask-Dateien: .hcmask
Eine .hcmask-Datei enthält mehrere Masks, optional mit eigenen Custom Charsets pro Zeile. Hashcat arbeitet die Zeilen sequenziell ab. Durch Sortierung nach Wahrscheinlichkeit oder erwarteter Laufzeit kann die Effizienz erheblich gesteigert werden.
Format einer .hcmask-Zeile
[?1,][?2,][?3,][?4,]mask
| Element | Bedeutung | Pflicht? |
|---|---|---|
?1, | Custom Charset 1 für diese Zeile (überschreibt globales -1) | optional |
?2, | Custom Charset 2 für diese Zeile | optional |
?3, | Custom Charset 3 für diese Zeile | optional |
?4, | Custom Charset 4 für diese Zeile | optional |
| mask | Die eigentliche Mask (Pflichtfeld) | ja |
Vollständiges Beispiel: forensik_de.hcmask
# Kommentarzeilen beginnen mit #
# Zeile 1: Vorname (6 Zeichen) + Jahr → häufigstes Muster
?u?l?l?l?l?l?d?d?d?d
# Zeile 2: Kleinbuchstaben + Ziffer am Ende
?l?l?l?l?l?l?l?d
?l?l?l?l?l?l?d?d
# Zeile 3: Firmenname-Muster
Company?d?d?d?d!
Firma?d?d?d?d!
# Zeile 4: Custom Charset (lower + digit) an jeder Position
?l?d,?1?1?1?1?1?1?1?1
# Zeile 5: mit Sonderzeichen am Ende
?u?l?l?l?l?l?d?d?s
# Zeile 6: PIN-Muster (4–6 Ziffern)
?d?d?d?d
?d?d?d?d?d?d
# Zeile 7: Datum-Muster
?d?d?d?d?d?d?d?d
hashcat -m 1000 -a 3 hashes.txt forensik_de.hcmask
.hcmask-Dateien:
- Ein literales
?-Zeichen:?? - Ein Komma innerhalb eines Charset-Felds:
\, - Kommentare: Zeilen, die mit
#beginnen
6. Keyspace & Laufzeitabschätzung
Der Keyspace ist die Gesamtzahl der Kandidaten einer Mask. Er ergibt sich als Produkt der Zeichensatzgrößen aller Positionen.
$$\text{Keyspace} = \prod_{i=1}^{n} |\text{Charset}_i|$$
Laufzeitformel
$$t = \frac{\text{Keyspace}}{\text{Hashrate (H/s)}}$$
Beispiel: ?u?l?l?l?d?d?d?d mit NTLM (~100 GH/s auf RTX 4090): ca. 0,12 Sekunden. Mit MD5-crypt (-m 500, ~1 MH/s): über 130 Stunden.
--keyspace-Option im integrierten Terminal zur Vorabprüfung.
7. Markov-Ketten & intelligente Masks
GovCracker unterstützt Markov-Ketten-basierte Zeichenfolgen-Wahrscheinlichkeiten über .hcstat2-Dateien. Damit werden wahrscheinlichere Zeichenkombinationen zuerst ausprobiert – ideal für größere Keyspaces. Im Masken-Angriff-Dialog ist die Markov-Funktion per Toggle aktivierbar; der Threshold und eine eigene .hcstat2-Datei können dort direkt konfiguriert werden.
| Option | Bedeutung | Beispiel |
|---|---|---|
--markov-hcstat2=FILE | Markov-Statistikdatei verwenden | --markov-hcstat2=hashcat.hcstat2 |
--markov-threshold=N | Nur Übergänge mit Wahrscheinlichkeit ≥ N verwenden (0 = alle) | --markov-threshold=50 |
--markov-classic | Klassischer Markov-Modus (Hashcat v5-Kompatibilität) | – |
--markov-disable | Markov deaktivieren (reiner Brute-Force) | – |
8. Rules-Grundlagen
Rule-Sonderoptionen
| Option | Bedeutung | Beispiel |
|---|---|---|
-r file.rule | Rule-Datei laden (bis zu 4× kombinierbar) | -r rules/best64.rule |
-j RULE | Single-Rule links (wird vor der -r-Rule angewendet) | -j c |
-k RULE | Single-Rule rechts (wird nach der -r-Rule angewendet) | -k $! |
--stdout | Kandidaten ausgeben ohne zu cracken | hashcat words.txt -r test.rule --stdout |
--debug-mode=1 | Protokolliert, welche Rule jeden gefundenen Hash geknackt hat | --debug-mode=1 --debug-file=out.rule |
--debug-mode=2 | Wie 1, aber auch Originalwort protokollieren | --debug-mode=2 |
--debug-mode=3 | Wie 2, aber zusätzlich transformiertes Wort | --debug-mode=3 |
--debug-mode=4 | Wie 3, aber zusätzlich den Hash | --debug-mode=4 |
--debug-file=FILE | Ausgabedatei für Debug-Informationen | --debug-file=matched.txt |
--generate-rules=N | N zufällige Rules erzeugen und anwenden | --generate-rules=10000 |
--generate-rules-func-min=N | Minimale Anzahl Funktionen pro Zufallsregel | --generate-rules-func-min=1 |
--generate-rules-func-max=N | Maximale Anzahl Funktionen pro Zufallsregel | --generate-rules-func-max=5 |
--generate-rules-func-sel=LISTE | Erlaubte Funktionen für Zufallsregeln | --generate-rules-func-sel=lcuoTt |
--generate-rules-seed=N | Reproduzierbarer Zufalls-Seed | --generate-rules-seed=42 |
0. Nach 9 gilt: A = 10, B = 11, ..., Z = 35. Position * steht in manchen Funktionen für das letzte Zeichen.
9. Alle Rule-Funktionen (Standardfunktionen)
Alle folgenden Funktionen sind mit John the Ripper kompatibel. Das Testwort für die Spalte „Ausgabe" ist p@ssW0rd (8 Zeichen).
Case & Reihenfolge
| Name | Syntax | Beschreibung | Ausgabe (p@ssW0rd) |
|---|---|---|---|
| Nothing (Passthrough) | : | Wort unverändert durchreichen | p@ssW0rd |
| Lowercase all | l | Alles klein schreiben | p@ssw0rd |
| Uppercase all | u | Alles groß schreiben | P@SSW0RD |
| Capitalize | c | Erstes Zeichen groß, Rest klein | P@ssw0rd |
| Invert Capitalize | C | Erstes Zeichen klein, Rest groß | p@SSW0RD |
| Toggle Case (alle) | t | Groß/Klein aller Buchstaben umkehren | P@SSw0RD |
| Toggle @ Position N | TN | Nur Position N umkehren | T3 → p@sSW0rd |
Rotation & Duplikation
| Name | Syntax | Beschreibung | Ausgabe (p@ssW0rd) |
|---|---|---|---|
| Reverse | r | Wort umkehren | dr0Wss@p |
| Duplicate | d | Wort verdoppeln | p@ssW0rdp@ssW0rd |
| Duplicate N times | pN | Wort N-mal zusätzlich anhängen | p2 → 3× das Wort |
| Reflect | f | Wort + umgekehrtes Wort | p@ssW0rddr0Wss@p |
| Rotate Left | { | Erstes Zeichen nach hinten rotieren | @ssW0rdp |
| Rotate Right | } | Letztes Zeichen nach vorne rotieren | dp@ssW0r |
| Duplicate first N chars | zN | Erstes Zeichen N-mal vorne duplizieren | z2 → ppp@ssW0rd |
| Duplicate last N chars | ZN | Letztes Zeichen N-mal hinten duplizieren | Z2 → p@ssW0rddd |
| Duplicate all chars | q | Jedes Zeichen duplizieren | pp@@ssssWW00rrdd |
Anfügen & Einfügen
| Name | Syntax | Beschreibung | Ausgabe (p@ssW0rd) |
|---|---|---|---|
| Append Char | $X | Zeichen X hinten anhängen | $1$! → p@ssW0rd1! |
| Prepend Char | ^X | Zeichen X vorne einfügen | ^2^1 → 12p@ssW0rd |
| Insert @ N | iNX | Zeichen X an Position N einfügen | i4! → p@ss!W0rd |
Löschen & Extrahieren
| Name | Syntax | Beschreibung | Ausgabe (p@ssW0rd) |
|---|---|---|---|
| Truncate Left | [ | Erstes Zeichen löschen | @ssW0rd |
| Truncate Right | ] | Letztes Zeichen löschen | p@ssW0r |
| Delete @ N | DN | Zeichen an Position N löschen | D3 → p@sW0rd |
| Extract Range | xNM | M Zeichen ab Position N extrahieren | x04 → p@ss |
| Omit Range | ONM | M Zeichen ab Position N löschen | O12 → psW0rd |
| Truncate @ N | 'N | Alles ab Position N abschneiden | '6 → p@ssW0 |
Ersetzen & Überschreiben
| Name | Syntax | Beschreibung | Ausgabe (p@ssW0rd) |
|---|---|---|---|
| Overwrite @ N | oNX | Zeichen an Position N mit X überschreiben | o3$ → p@s$W0rd |
| Replace all X with Y | sXY | Alle Vorkommen von X durch Y ersetzen | ss$ → p@$$W0rd |
| Purge X | @X | Alle Vorkommen von X entfernen | @s → p@W0rd |
10. Hashcat-spezifische Funktionen
Diese Funktionen sind Hashcat-spezifisch und nicht mit John the Ripper kompatibel. Das Testwort für die Spalte „Ausgabe" ist p@ssW0rd.
Swap & Shift
| Name | Syntax | Beschreibung | Ausgabe (p@ssW0rd) |
|---|---|---|---|
| Swap Front | k | Erste zwei Zeichen tauschen | @pssW0rd |
| Swap Back | K | Letzte zwei Zeichen tauschen | p@ssW0dr |
| Swap @ N,M | *NM | Zeichen an Position N und M tauschen | *34 → p@sWs0rd |
| Bitwise Shift Left | LN | ASCII-Wert an Position N × 2 (bitweise links) | L2 → Zeichenwert verdoppelt |
| Bitwise Shift Right | RN | ASCII-Wert an Position N ÷ 2 (bitweise rechts) | R2 → Zeichenwert halbiert |
| ASCII Increment | +N | ASCII-Wert an Position N um 1 erhöhen | +2 → p@tsW0rd (s→t) |
| ASCII Decrement | -N | ASCII-Wert an Position N um 1 senken | -1 → p?ssW0rd (@→?) |
Block-Duplikation & Title-Case
| Name | Syntax | Beschreibung | Ausgabe (hello world) |
|---|---|---|---|
| Replace N with N+1 | .N | Zeichen an N durch Zeichen an N+1 ersetzen | .1 → p@ssW0rd → psssW0rd |
| Replace N with N–1 | ,N | Zeichen an N durch Zeichen an N–1 ersetzen | ,1 → ppssW0rd |
| Duplicate Block Front | yN | Erste N Zeichen vorne duplizieren | y3 → p@sp@ssW0rd |
| Duplicate Block Back | YN | Letzte N Zeichen hinten duplizieren | Y3 → p@ssW0rdOrd |
| Title Case | E | Alles klein, nach Leerzeichen Großbuchstabe | Hello World |
| Title mit Separator X | eX | Wie E, aber nach Separator X | e- → Hello-World |
| Toggle nach N-tem Sep. | 3NX | Case des Zeichens nach dem N-ten Separator X toggeln | 30- → Hello-world→Hello-World |
11. Memory-Operationen (M, 4, 6, X)
Memory-Operationen ermöglichen das temporäre Speichern und Wiederverwenden von Zwischenzuständen innerhalb einer Rule-Zeile. Das Konzept ist mächtig, aber fehleranfällig – immer mit --stdout testen.
| Name | Syntax | Beschreibung | Beispiel & Ausgabe |
|---|---|---|---|
| Memorize | M | Speichert den aktuellen Wortzustand im Memory-Register. Memory wird am Anfang der Rule-Ausführung gesetzt. | M → aktueller Stand gespeichert |
| Append Memory | 4 | Hängt den gespeicherten Memory-Inhalt ans aktuelle Wort an | uM l4 → p@ssW0rd + uppercase gespeichert, dann lowercase + Memory: p@ssw0rdP@SSW0RD |
| Prepend Memory | 6 | Stellt den gespeicherten Memory-Inhalt voran | rMr6 → reverse, speichern, reverse zurück, Memory vorne: dr0Wss@pp@ssW0rd |
| Extract Memory | XNMI | Fügt M Zeichen ab Position N aus dem Memory an Position I des aktuellen Worts ein | lMX428 → komplex, Memory-basiert |
Memory-Anwendungsbeispiele
# Originalwort + Großbuchstabenversion
# sommer → sommerSOMMER
M u4
# Originalwort + Rückwärts-Version
# sommer → sommerremmos
M r4
# Wort "gespiegelt" + Leerzeichen dazwischen
# hello → hello olleh
M $ r4
# Duplicate unterdrücken (Q-Reject nach Memory-Vergleich)
# Verwirft wenn Wort == Memory (also wenn Rule nichts geändert hat)
r M r Q
M-Aufruf wird der dann aktuelle Zustand gespeichert.
12. Reject-Regeln
Reject-Regeln verwerfen Kandidaten anhand von Bedingungen. In Rule-Dateien können sie genutzt werden, um unerwünschte Kandidaten früh auszuschließen. Bei -j/-k (Single-Rules) sind Rejects besonders effektiv, da sie den Keyspace reduzieren.
| Name | Syntax | Bedingung (wird verworfen, wenn…) | Beispiel | Typische Verwendung |
|---|---|---|---|---|
| Reject less | <N | Wortlänge ≥ N (verwirft lange Wörter) | <8 | Nur kurze Passwörter behalten |
| Reject greater | >N | Wortlänge ≤ N (verwirft kurze Wörter) | >5 | Nur Wörter mit mind. 6 Zeichen |
| Reject equal length | _N | Länge ≠ N | _8 | Nur exakt 8-stellige Kandidaten |
| Reject contains | !X | Zeichen X ist enthalten | !z | Kein z erlaubt |
| Reject not contains | /X | Zeichen X ist nicht enthalten | /1 | Muss eine 1 enthalten |
| Reject equal first | (X | Beginnt nicht mit X | (p | Nur Wörter die mit p beginnen |
| Reject equal last | )X | Endet nicht mit X | )d | Nur Wörter die auf d enden |
| Reject equal @ N | =NX | Zeichen an Position N ist nicht X | =0A | Position 0 muss A sein |
| Reject contains count | %NX | X kommt weniger als N-mal vor | %2a | Mindestens 2× 'a' erforderlich |
| Reject memory match | Q | Aktuelles Wort == Memory-Inhalt | rMrQ | Palindrome / unveränderte Wörter verwerfen |
13. Hex-Bytes in Rules
Nicht druckbare Zeichen oder Sonderzeichen können in Rules als Hex-Escape-Sequenz \xNN angegeben werden. Das ist nützlich für Encoding-spezifische Passwörter, Null-Bytes oder Zeichen außerhalb des ASCII-Bereichs.
# Buchstaben 'd' (0x64) anhängen
hashcat words.txt -j '$\x64' --stdout
# penguin → penguind
# Null-Byte anhängen (forensischer Sonderfall)
$\x00
# Umlaut ä (UTF-8: c3 a4) anhängen
$\xc3$\xa4
# Replace: 'a' durch ä (UTF-8)
sa\xc3\xa4
ä = \xc3\xa4. Die Zeichensatz-Datei (.hcchr) kann genutzt werden, um vollständige Zeichensätze für bestimmte Codepages zu definieren. Für Windows-Codepage-851: --encoding=cp1252.
14. Bekannte Rule-Sets & Empfehlungen
Hashcat liefert mehrere hochwertige Rule-Dateien mit. Die Wahl hängt vom Ziel-Szenario ab.
| Rule-Datei | Regeln | Einsatz | Stärke |
|---|---|---|---|
best64.rule | 64 | Erster Schritt, schnell, deckt häufigste Muster | Empfohlen |
rockyou-30000.rule | 30.000 | Starke Abdeckung typischer Passwortmuster | Stark |
dive.rule | 99.950 | Maximale Transformation; langsam aber umfassend | Sehr umfangreich |
T0XlC.rule | 8.478 | Leet-Speak, Sonderzeichen-Substitutionen | Spezialisiert |
InsidePro-HashManager.rule | 17.238 | Hashing-Patterns, Nummern, Anhänge | Umfangreich |
unix-ninja-leetspeak.rule | 2.306 | Leet-Speak-Substitutionen | Spezialisiert |
hob064.rule | 64 | Ähnlich best64, alternative Auswahl | Schnell |
OneRuleToRuleThemAll.rule | 52.000+ | Community-basiert, breite Abdeckung | Sehr umfangreich |
Die wichtigsten Regeln aus best64.rule
# Unverändert
:
# Lowercase
l
# Capitalize
c
# Rückwärts
r
# Ziffer 1 anhängen
$1
# Ausrufezeichen
$!
# Kapitalisiert + 1
c$1
# Jahr 2022
$2$0$2$2
# Doppelt
d
# Letztes Zeichen löschen
]
# Erstes Zeichen löschen
[
# Alle s durch $ ersetzen
ss$
# Alle o durch 0 ersetzen
so0
15. Hashcat Brain – intelligente Deduplizierung
Hashcat Brain ist ein optionales Server-Client-System zur Deduplizierung von Kandidaten. Ein Brain-Server speichert, welche Kandidaten bereits ausprobiert wurden – verbundene Clients überspringen diese automatisch. Das verhindert doppelte Arbeit bei mehreren parallelen Sitzungen mit gleichen Wordlists oder Rules.
Komponenten
| Komponente | Rolle | Beispiel-Befehl |
|---|---|---|
| Brain-Server | Zentraler Deduplizierungs-Dienst; merkt sich alle getesteten Kandidaten in einer schnellen In-Memory-Struktur | hashcat --brain-server --brain-server-timer=5 |
| Brain-Client | Cracking-Instanz (z. B. GovCracker), die den Server vor jedem Kandidaten-Block abfragt und doppelte Blöcke überspringt | hashcat ... --brain-client --brain-client-features=3 |
Brain-Feature-Level
| Wert | Bedeutung | Empfehlung |
|---|---|---|
1 | Deduplizierung nach Hash-Wert des Kandidaten (Inhalt) | Basis-Deduplizierung |
2 | Deduplizierung nach Angriffs-Position (Skip/Limit-basiert, für verteilte Angriffe) | Cluster-Nutzung |
3 | Beides kombiniert (Feature 1 + 2) | Empfohlen |
Wann Brain sinnvoll ist – und wann nicht
Die Entscheidung hängt vollständig von der GPU-Hashrate des Ziel-Algorithmus ab. Brain ist nur dann nützlich, wenn die Cracking-Rate so niedrig ist, dass der Netzwerk-Overhead des Brain-Servers nicht zum Flaschenhals wird.
NTLM – Brain ist kontraproduktiv
NTLM erreicht auf einer RTX 4090 rund 300 Milliarden Hashes pro Sekunde. Die GPU testet Kandidaten so schnell, dass jede Netzwerkkommunikation mit dem Brain-Server sofort zum Engpass wird. Die GPU liegt dabei fast vollständig brach und wartet auf den Server.
Brain-Durchsatz (realistisch): ~200–500 MH/s
Effektive Leistung mit Brain: < 0,2 % der GPU-Kapazität
→ Brain bei NTLM niemals aktivieren.
VeraCrypt – Brain ist ideal
VeraCrypt mit AES-Kaskade (-m 13711) erreicht auf einer RTX 4090 nur rund 500–1.000 Hashes pro Sekunde. Der Brain-Server hat mehr als genug Kapazität, jeden Kandidaten zu deduplizieren, ohne die GPU auszubremsen.
Laufen mehrere GovCracker-Instanzen (z. B. GovCluster) mit derselben Wordlist, verhindert Brain, dass der gleiche Kandidat mehrfach gegen den teuren Hash geprüft wird.
Brain-Overhead: vernachlässigbar
Nutzen bei 3 Instanzen + gleiche Wordlist: bis zu 3× schnellere Gesamtabdeckung
→ Brain bei VeraCrypt, KeePass, bcrypt unbedingt nutzen.
Brain-Faustregel nach Algorithmus
| Algorithmus | Hashrate (RTX 4090) | Brain? | Begründung |
|---|---|---|---|
NTLM (-m 1000) | ~300 GH/s | Nein | GPU übertrifft Brain-Kapazität um Faktor ~600 |
MD5 (-m 0) | ~160 GH/s | Nein | Gleicher Grund wie NTLM |
SHA-256 (-m 1400) | ~22 GH/s | Nein | Immer noch zu schnell für Brain |
WPA2 (-m 22000) | ~2 MH/s | Bedingt | Nur bei vielen parallelen Clients sinnvoll |
bcrypt cost 5 (-m 3200) | ~200 kH/s | Ja | Brain-Overhead gering, Deduplizierung nützlich |
VeraCrypt AES (-m 13711) | ~500 H/s | Ja | GPU so langsam, Brain verursacht keine Verluste |
KeePass AES (-m 13400) | ~1 kH/s | Ja | Gleicher Grund wie VeraCrypt |
BitLocker (-m 22100) | ~500 kH/s | Ja | Sinnvoll bei mehreren parallelen Sitzungen |
16. Typische Fehler & Best Practices
Häufige Fehler
| Problem | Ursache | Lösung |
|---|---|---|
| Keyspace explodiert / Laufzeit unrealistisch | ?a auf zu vielen Positionen | Muster einschränken: ?u?l?l?l?l?d?d?d?d statt ?a×9. Immer erst --keyspace prüfen. |
| Kürzere Passwörter werden nicht gefunden | Mask ist fixe Länge | --increment mit --increment-min und --increment-max nutzen. |
Custom Charset ?1 führt zu Fehler | -1 fehlt im Befehl oder in der .hcmask-Zeile | Charset vor der Mask definieren: -1 ?l?d oder in .hcmask-Zeile integrieren. |
| Fragezeichen wird als Platzhalter interpretiert | ? leitet Platzhalter ein | Literal-Fragezeichen als ?? schreiben. |
Komma in .hcmask stört Parsing | Komma ist Trennzeichen zwischen Charset und Mask | Komma mit \, escapen wenn es Teil des Charsets ist. |
| Rules erzeugen unerwartete Kandidaten | Mehrere Rule-Files multiplizieren sich | Erst mit --stdout | head testen; Rule-Dateien einzeln prüfen. |
| Falscher Hash-Modus | -m stimmt nicht mit Hashformat überein | Hashcat --example-hashes nutzen; Format mit Beispielhash vergleichen. In GovCracker: automatische Hash-Erkennung. |
| Umlaute / Nicht-ASCII funktionieren nicht | Encoding-Problem zwischen Wordlist und Hashcat | --encoding setzen, .hcchr-Datei nutzen, oder --hex-charset mit Hex-kodierten Zeichen verwenden. |
| Memory-Rule verhält sich unerwartet | Memory-Initialisierung falsch verstanden | Memory wird mit Originalwort vorbelegt; explizit M aufrufen um Zwischenstand zu speichern. Mit --stdout debuggen. |
| GPU thermisch gedrosselt / Cracking stoppt | Temperatur zu hoch, keine Kühlung | --gpu-temp-abort setzen; Gehäuse-Kühlung verbessern; bei Clusterbetrieb GovCluster-Agent auf dedizierten Maschinen nutzen. |
Empfohlene Arbeitsweise
- 1Hashes korrekt identifizieren: Immer zuerst den richtigen
-m-Modus bestimmen. In GovCracker übernimmt die automatische Hash-Erkennung diesen Schritt. Falscher Modus = keine Treffer, auch wenn das Passwort in der Wordlist ist. - 2Projektspezifische Wordlist erstellen: Namen, Orte, Firmenbegriffe, bekannte Passwörter aus dem Kontext sammeln. Ein einziges spezifisches Wort kann entscheidend sein.
- 3Rules klein starten: Erst
best64.rule, dann bei Bedarf umfangreichere Sets. Nicht sofort mitdive.rulebeginnen – das kostet enorm Zeit. - 4Hybrid vor Brute-Force: Wordlist +
?d?d?d?doder +?d?d?d?d?sdeckt einen Großteil realer Passwörter ab und ist deutlich schneller als blinder Brute-Force. - 5Masks realistisch halten: Muster aus dem Kontext ableiten (Passwortrichtlinien der Organisation, bekannte Passwort-Häufigkeiten). Keyspace vorab mit
--keyspaceprüfen. - 6Kandidaten vorab validieren: Jede neue Rule oder Mask immer erst mit
--stdout | headprüfen bevor GPU-Zeit investiert wird. - 7Sitzungen mit
--sessionsichern: Lange Angriffe immer mit einem Sitzungsnamen starten. Bei Unterbrechung mit--restoreweitermachen. - 8Ergebnisse dokumentieren: Mit
--outfileund--debug-filealle Treffer und erfolgreiche Rules protokollieren. In GovCracker werden Ergebnisse automatisch gespeichert und können exportiert werden. - 9Rechtlichen Rahmen einhalten: Angriffe nur auf rechtmäßig sichergestellte Beweismittel oder freigegebene Systeme. Hashcat-Aktionen dokumentieren und im Bericht festhalten.