# Password Cracking — ZIP & PDF

<p class="callout danger">**Nur gegen eigene Dateien oder mit schriftlicher Erlaubnis verwenden.** Knacken fremder Archive ist in DE nach §202c StGB strafbar.</p>

---

## Setup (BlackArch / Arch)

```bash
sudo pacman -S zip john hashcat fcrackzip pdfcrack qpdf wordlists
```

Wordlist-Standard: `/usr/share/wordlists/seclists/Passwords/Leaked-Databases/rockyou.txt`

---

## Workflow

```
[file.zip | file.pdf]
        │
        ▼
   zip2john / pdf2john   →   hash-Datei
        │
        ▼
   john (CPU)  ─oder─  hashcat (GPU)
        │
        ▼
    Klartext-Passwort
```

---

## ZIP cracken

### 1. Hash extrahieren

```bash
zip2john secret.zip > secret.hash
```

### 2a. John (CPU)

```bash
john --wordlist=/usr/share/wordlists/seclists/Passwords/Leaked-Databases/rockyou.txt secret.hash
john --show secret.hash
```

### 2b. Hashcat (GPU)

Hashcat will nur den Hash-Teil — Filename-Prefix mit `cut` entfernen:

```bash
cut -d: -f2- secret.hash > secret.hccap
```

<table id="bkmrk-mode-format-17200-pk"><thead><tr><th>Mode</th><th>Format</th></tr></thead><tbody><tr><td>`17200`</td><td>PKZIP Deflated (komprimiert)</td></tr><tr><td>`17210`</td><td>PKZIP Stored (unkomprimiert)</td></tr><tr><td>`17220`</td><td>PKZIP (mehrere komprimierte Dateien)</td></tr><tr><td>`13600`</td><td>WinZip AES</td></tr></tbody></table>

```bash
hashcat -m 17210 -a 0 secret.hccap /usr/share/wordlists/seclists/Passwords/Leaked-Databases/rockyou.txt
hashcat -m 17210 secret.hccap --show
```

### 2c. fcrackzip

```bash
fcrackzip -u -D -p ./rockyou.txt secret.zip    # Dictionary
fcrackzip -u -c a -l 1-6 secret.zip            # Brute-Force, 1–6 Zeichen lowercase
```

> **Hinweis:** Aktuelle fcrackzip-Version hat Buffer-Overflow bei langen Wordlist-Pfaden. Wordlist immer lokal kopieren.

---

## PDF cracken

### 1. Hash extrahieren

```bash
pdf2john locked.pdf > locked.hash
```

### 2a. John

```bash
john --wordlist=/usr/share/wordlists/seclists/Passwords/Leaked-Databases/rockyou.txt locked.hash
john --show --format=PDF locked.hash
```

### 2b. Hashcat

<table id="bkmrk-mode-pdf-version-ver"><thead><tr><th>Mode</th><th>PDF-Version</th><th>Verschlüsselung</th></tr></thead><tbody><tr><td>`10400`</td><td>PDF 1.1 – 1.3</td><td>RC4 40 bit</td></tr><tr><td>`10500`</td><td>PDF 1.4 – 1.6</td><td>RC4 128 bit</td></tr><tr><td>`10600`</td><td>PDF 1.7 Level 3</td><td>AES 128 bit</td></tr><tr><td>`10700`</td><td>PDF 1.7 Level 8</td><td>AES 256 bit</td></tr></tbody></table>

```bash
cut -d: -f2- locked.hash > locked.hccap
hashcat -m 10700 -a 0 locked.hccap /usr/share/wordlists/seclists/Passwords/Leaked-Databases/rockyou.txt
```

### 2c. pdfcrack

```bash
pdfcrack -f locked.pdf -w wordlist.txt
pdfcrack -f locked.pdf -n 4 -m 8 -c abcdefghijklmnopqrstuvwxyz
```

---

## Attack Modes (Hashcat Cheatsheet)

<table id="bkmrk-mode-bedeutung-beisp"><thead><tr><th>Mode</th><th>Bedeutung</th><th>Beispiel</th></tr></thead><tbody><tr><td>`-a 0`</td><td>Dictionary</td><td>`hashcat -m 17210 -a 0 h rockyou.txt`</td></tr><tr><td>`-a 1`</td><td>Combinator</td><td>`hashcat -m 17210 -a 1 h dict1 dict2`</td></tr><tr><td>`-a 3`</td><td>Brute-Force / Mask</td><td>`hashcat -m 17210 -a 3 h '?l?l?l?l?d?d'`</td></tr><tr><td>`-a 6`</td><td>Hybrid Wordlist+Mask</td><td>`hashcat -m 17210 -a 6 h dict.txt '?d?d'`</td></tr><tr><td>`-a 9`</td><td>Association</td><td>für targeted Hints</td></tr></tbody></table>

### Mask-Charsets

<table id="bkmrk-charset-bedeutung-%3Fl"><thead><tr><th>Charset</th><th>Bedeutung</th></tr></thead><tbody><tr><td>`?l`</td><td>a-z</td></tr><tr><td>`?u`</td><td>A-Z</td></tr><tr><td>`?d`</td><td>0-9</td></tr><tr><td>`?s`</td><td>Symbole</td></tr><tr><td>`?a`</td><td>`?l?u?d?s` (alles)</td></tr><tr><td>`?h`</td><td>0-9 a-f (hex lower)</td></tr><tr><td>`?H`</td><td>0-9 A-F (hex upper)</td></tr></tbody></table>

### Eigene Charsets

```bash
hashcat -1 ?l?u?d -m 17210 -a 3 h '?1?1?1?1?1?1?1?1'
```

### Inkrementell (unbekannte Länge)

```bash
hashcat -m 17210 -a 3 h '?a?a?a?a?a?a?a?a' --increment --increment-min=4 --increment-max=10
```

---

## GPU vs. CPU (gemessen auf RX 7900 XTX)

<table id="bkmrk-hash-typ-speed-brute"><thead><tr><th>Hash-Typ</th><th>Speed</th><th>Brute-Force 8x lowercase (26⁸)</th></tr></thead><tbody><tr><td>PKZIP (17210)</td><td>33,8 GH/s</td><td>~6 Sekunden</td></tr><tr><td>PDF AES-256 (10700)</td><td>17 kH/s</td><td>~388 Jahre</td></tr></tbody></table>

PDFs mit AES-256 sind ~2 Millionen mal langsamer zu cracken als PKZIP — durch bewusstes Key-Stretching (SHA-256 + Iterationen) im PDF 1.7 Standard.

---

## Best Practices (Pentest-Workflow)

1. **Quick wins zuerst** — Dictionary mit rockyou.txt, dann SecLists Top-Passwords.
2. **Rules anwenden** — `john --rules=Jumbo` oder `hashcat -r /usr/share/hashcat/rules/best64.rule` mutiert PWs (Leetspeak, Suffixe, …).
3. **Hybrid-Attacks** — `wordlist + ?d?d?d?d` deckt typische `pw + Jahr/PIN`-Muster ab.
4. **Mask Brute-Force** — strukturiert nach Wahrscheinlichkeit (`?u?l?l?l?l?d?d?s` ist häufiger als `?a?a?a?a?a?a?a?a`).
5. **Inkrementell** — bei unbekannter Länge `--increment --increment-min=4 --increment-max=10`.
6. **Sessions speichern** — `--session=run1` + `--restore` für lange Läufe.
7. **Potfile checken** — Hashcat speichert Hits in `~/.local/share/hashcat/hashcat.potfile` → `--show`.
8. **GPU-Backend prüfen** — `hashcat -I` listet erkannte Devices. Auf AMD: `hashcat -d 1` zwingt GPU-only.
9. **Benchmark vor Brute-Force** — `hashcat -b -m <mode>` zeigt realistische Zeiten: `Cracking-Time = Keyspace / Speed`.
10. **Optimized Kernel** — `-O` aktiviert schnellere Kernel (PW-Länge ≤ 32).