Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
vuke — Forschungswerkzeug zur Untersuchung angreifbarer kryptografischer Schlüsselerzeugung (brainwallet, PRNG, milksad, LCG, xorshift) | Kitploit
Tools/GitHubGitHub/oritwoen/vuke
Passwort-CrackingSchwachstellenanalyseExploitationForensikKryptographiePapers & ForschungLernen & Bildung
GitHuboritwoen/vuke

vuke

Forschungswerkzeug zur Untersuchung angreifbarer kryptografischer Schlüsselerzeugung (brainwallet, PRNG, milksad, LCG, xorshift)

Repository anzeigen
185vor 4 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

vuke

Crates.io Downloads License Ask DeepWiki

Forschungswerkzeug zur Analyse und Reproduktion angreifbarer Bitcoin-Schlüsselerzeugung.

Funktionen

  • Modulare Architektur – steckbare Quellen und Transformationen
  • Mehrere Eingabequellen
    • Zahlenbereiche (schwache Seeds testen)
    • Wortlisten (Brainwallet-Analyse)
    • Zeitstempel (zeitbasierte PRNG-Ausnutzung)
    • Stdin-Streaming (Pipeline-Integration)
  • Historische Schwachstellen-Transformationen
    • Direkt (Rohbytes als Schlüssel)
    • SHA256 (klassisches Brainwallet)
    • Double SHA256 (Bitcoin-ähnliches Hashing)
    • MD5 (veraltetes schwaches Hashing)
    • SHA256-Kette (iterierte/indexierte deterministische Ableitung)
    • Milksad (MT19937 PRNG – CVE-2023-39910)
    • MultiBit HD (Seed-als-Entropie-Fehler)
    • Electrum pre-BIP39 (deterministische Ableitung 2011–2014)
    • Armory (Legacy-HD-Ableitung)
  • Schlüsselherkunftsanalyse – Rückwärtserkennung angreifbarer Erzeugungsmethoden
  • Parallele Verarbeitung via Rayon
  • Adressabgleich zum Scannen bekannter Ziele
  • Dateiausgabe zum Speichern von Ergebnissen
  • Cloud-Speicher – asynchroner Upload zu S3/R2/MinIO
  • Reine Rust-Implementierung

Warum dieses Projekt?

Dieses Werkzeug ist für die Sicherheitsforschung konzipiert – das Verständnis, wie in der Vergangenheit angreifbare Schlüssel erzeugt wurden, hilft, die moderne Wallet-Sicherheit zu verbessern.

Historische Schwachstellen, die mit diesem Werkzeug reproduziert werden können:

Installation

Cargo```bash

cargo install vuke

root@kitploit:~
### Von der Quelle```bash
git clone https://github.com/oritwoen/vuke
cd vuke
cargo build --release

Verwendung

Einzelnen Schlüssel aus Passphrase generieren```bash

vuke single "correct horse battery staple" --transform sha256

root@kitploit:~
Ausgabe:```
Passphrase: "correct horse battery staple"
Transform: sha256
Source: correct horse battery staple
---
Private Key (hex):     c4bbcb1fbec99d65bf59d85c8cb62ee2db963f0fe106f483d9afa73bd4e39a8a
WIF (compressed):      L3p8oAcQTtuokSCRHQ7i4MhjWc9zornvpJLfmg62sYpLRJF9woSu
---
P2PKH (compressed):   1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T
P2WPKH:               bc1qfnpg7ceg02y64qrskgz0drwp3y6hma3q6wvnzr

Wortliste nach bekannten Adressen durchsuchen```bash

vuke scan --transform=sha256 --targets known_addresses.txt wordlist --file passwords.txt

root@kitploit:~
### Datenanbieter

Anstelle von Dateipfaden verwenden Sie Provider-Referenzen für das dynamische Laden von Zielen:```bash
# Scan all unsolved b1000 puzzles
vuke scan --transform=milksad --targets boha:b1000:unsolved range --start 1 --end 1000000

# Scan specific collection with filter
vuke scan --transform=sha256 --targets boha:b1000:with-pubkey wordlist --file words.txt

# Available filters: all, unsolved, solved, with-pubkey
vuke scan --targets boha:hash_collision:unsolved wordlist --file words.txt

Provider syntax: provider:collection:filter oder provider:collection:id

Verfügbare Sammlungen (boha-Anbieter):

  • b1000 - Bitcoin-Puzzle 1000 (256 Rätsel, 1-256 Bit)
  • gsmg - GSMG-Rätsel
  • bitaps - Bitaps-Rätsel
  • hash_collision - Hash-Kollisions-Rätsel
  • zden - Zden-Rätsel
  • bitimage - Bitimage-Rätsel

Numerischen Bereich testen (schwache Seeds)```bash

vuke generate --transform=milksad range --start 1 --end 1000000

root@kitploit:~
### Test LCG-basierte Schlüssel```bash
# Generate keys using glibc rand() (default big-endian)
vuke generate --transform=lcg:glibc range --start 1 --end 1000000

# Use MINSTD variant with big-endian byte order
vuke generate --transform=lcg:minstd:be range --start 1 --end 1000

# Test all LCG variants at once
vuke generate --transform=lcg range --start 1 --end 100

Test xorshift-basierter Schlüssel```bash

Generate keys using all xorshift variants (requires cascade filter for analysis)

vuke generate --transform=xorshift range --start 1 --end 1000000

Use specific variant

vuke generate --transform=xorshift:64 range --start 1 --end 1000 vuke generate --transform=xorshift:128 range --start 1 --end 1000 vuke generate --transform=xorshift:128plus range --start 1 --end 1000 vuke generate --transform=xorshift:xoroshiro range --start 1 --end 1000

root@kitploit:~
### Testen von zeitstempelbasierten Schlüsseln```bash
vuke scan --transform=sha256 --targets addresses.txt timestamps --start 2015-01-01 --end 2015-01-31

Schlüssel aus Dateien ableiten (Bitimage)```bash

Generate key from a single file

vuke generate --transform=bitimage files --file image.jpg

Scan directory recursively

vuke generate --transform=bitimage files --dir ./images/

With custom derivation path and passphrase

vuke generate --transform=bitimage --bitimage-path "m/44'/0'/0'/0/0" --bitimage-passphrase "secret" files --file photo.png

Derive multiple addresses per file

vuke generate --transform=bitimage --bitimage-derive-count 10 files --dir ./data/

Brute-force passphrases from wordlist

vuke scan --transform=bitimage --bitimage-passphrase-wordlist passphrases.txt --targets addresses.txt files --dir ./images/

root@kitploit:~
### Mehrere Transformationen```bash
vuke scan --transform=sha256 --transform=double_sha256 --transform=md5 --targets addresses.txt wordlist --file words.txt

Einlesen von stdin```bash

cat passwords.txt | vuke generate --transform=sha256 stdin

root@kitploit:~
### Ergebnisse in Datei speichern```bash
vuke generate --output results.csv range --start 1 --end 1000000
vuke generate --output results.txt --verbose range --start 1 --end 1000
vuke scan --output hits.txt --targets addresses.txt wordlist --file passwords.txt

Dauerhafte Speicherung (Parquet)

Ergebnisse im Parquet-Format für Analysen im TB-Maßstab speichern (erfordert das storage-Feature):```bash

Build with storage support

cargo build --release --features storage

Store generated keys to Parquet

vuke generate --storage ./results --transform milksad range --start 1 --end 1000000

Configure chunk rotation

vuke generate --storage ./results --chunk-records 500000 --chunk-bytes 50M range --start 1 --end 10000000

Configure compression (default: zstd level 3)

vuke generate --storage ./results --compression zstd --compression-level 9 range --start 1 --end 1000000

No compression (fastest writes)

vuke generate --storage ./results --compression none range --start 1 --end 1000000

Available algorithms: none, snappy, gzip, lz4, zstd

root@kitploit:~
### Abfrage gespeicherter Ergebnisse (SQL)

Abfragen gespeicherter Parquet-Dateien mit SQL (erfordert die Funktion `storage-query`):```bash
# Build with query support
cargo build --release --features storage-query

# Count results by transform
vuke query ./results "SELECT transform, COUNT(*) FROM results GROUP BY transform"

# Find matches
vuke query ./results "SELECT * FROM results WHERE matched_target IS NOT NULL LIMIT 10"

# Export to JSON
vuke query ./results --format json "SELECT source, wif_compressed FROM results LIMIT 100"

# Export to CSV
vuke query ./results --format csv "SELECT address_p2pkh_compressed, wif_compressed FROM results" > export.csv

# Show schema
vuke query ./results --schema

Output formats: table (default), json, csv

Cloud-Upload (S3-kompatibel)

Laden Sie Parquet-Ergebnisse auf S3-kompatiblen Speicher hoch (erfordert storage-cloud-Funktion):```bash

Build with cloud upload support

cargo build --release --features storage-cloud

Set credentials (AWS S3)

export AWS_ACCESS_KEY_ID=your_key export AWS_SECRET_ACCESS_KEY=your_secret

Upload to AWS S3

vuke generate --storage ./results --cloud-upload --cloud-bucket my-bucket
--transform milksad range --start 1 --end 1000000

Upload to Cloudflare R2

vuke generate --storage ./results --cloud-upload
--cloud-endpoint https://account.r2.cloudflarestorage.com
--cloud-bucket my-r2-bucket
--transform milksad range --start 1 --end 1000000

Upload to MinIO (self-hosted)

vuke generate --storage ./results --cloud-upload
--cloud-endpoint http://localhost:9000
--cloud-bucket vuke-results
--transform milksad range --start 1 --end 1000000

Delete local files after successful upload

vuke generate --storage ./results --cloud-upload --cloud-bucket my-bucket
--cloud-delete-local
--transform milksad range --start 1 --end 1000000

Fail fast on upload errors (default: continue on failures)

vuke generate --storage ./results --cloud-upload --cloud-bucket my-bucket
--cloud-fail-fast
--transform milksad range --start 1 --end 1000000

root@kitploit:~
Cloud-Upload-Funktionen:
- Streaming-Multipart-Upload (speichereffizient für große Dateien)
- Automatische Wiederholung mit exponentiellem Backoff (5 Wiederholungen, 100ms→30s)
- Gleichzeitige Uploads mit konfigurierbarer Parallelität
- Löscht nur lokale Dateien, die erfolgreich hochgeladen wurden

### Iceberg-Katalogregistrierung

Registrieren Sie hochgeladene Parquet-Dateien in einem Apache-Iceberg-Katalog für SQL-Abfragen (erfordert das `storage-iceberg`-Feature):```bash
# Build with Iceberg support
cargo build --release --features storage-iceberg

# Set credentials
export CLOUD_ACCESS_KEY_ID=your_key
export CLOUD_SECRET_ACCESS_KEY=your_secret

# Generate, upload, and register in Iceberg catalog
vuke generate --storage ./results --cloud-upload --cloud-bucket my-bucket \
  --iceberg-catalog http://localhost:8181 \
  --transform milksad range --start 1 --end 1000000

# With custom namespace and table name
vuke generate --storage ./results --cloud-upload --cloud-bucket my-bucket \
  --iceberg-catalog http://localhost:8181 \
  --iceberg-namespace my_namespace \
  --iceberg-table my_results \
  --transform milksad range --start 1 --end 1000000

# Using environment variables
export ICEBERG_CATALOG=http://localhost:8181
export ICEBERG_NAMESPACE=vuke
export ICEBERG_TABLE=results
vuke generate --storage ./results --cloud-upload --cloud-bucket my-bucket \
  --transform milksad range --start 1 --end 1000000

Iceberg-Katalog-Funktionen:

  • REST-Katalog-Protokoll (kompatibel mit Apache Polaris, Nessie, Tabular usw.)
  • Automatische Tabellenerstellung mit Schema und Partitionsspezifikation
  • Partitioniert nach transform (identity) und timestamp (day)
  • Anmeldedaten mit Cloud-Upload geteilt (CLOUD_/AWS_ Umgebungsvariablen)

Benchmark-Transformationen```bash

vuke bench --transform milksad

root@kitploit:~
### Ursprung des privaten Schlüssels analysieren

Prüfen, ob ein privater Schlüssel mit einer anfälligen Methode generiert wurde:```bash
vuke analyze c4bbcb1fbec99d65bf59d85c8cb62ee2db963f0fe106f483d9afa73bd4e39a8a

Ausgabe:``` Private Key: c4bbcb1fbec99d65bf59d85c8cb62ee2db963f0fe106f483d9afa73bd4e39a8a Bit Length: 256 Hamming Weight: 144

Analysis: ✗ milksad: NOT_FOUND (checked 4294967296 seeds) ✗ direct: NOT_FOUND (no direct patterns detected) ? heuristic: UNKNOWN (entropy=5.00, hamming=144)

root@kitploit:~
Schnellmodus (Brute-Force überspringen):```bash
vuke analyze --fast L3p8oAcQTtuokSCRHQ7i4MhjWc9zornvpJLfmg62sYpLRJF9woSu

JSON-Ausgabe:```bash vuke analyze --fast --json c4bbcb1f...

root@kitploit:~
Spezifischer Analysator:```bash
vuke analyze --analyzer milksad c4bbcb1f...

LCG analyzer

Überprüft, ob ein Schlüssel mit einem linearen Kongruenzgenerator erzeugt wurde:```bash

Check all LCG variants

vuke analyze --analyzer lcg

Check specific variant and endianness

vuke analyze --analyzer lcg:glibc:le

With masking for puzzle analysis

vuke analyze --analyzer lcg:glibc --mask 5 0x15

root@kitploit:~
### Analyse maskierter Schlüssel (BTC1000-ähnliche Rätsel)

Einige Bitcoin-Rätsel verwenden ein Maskierungsschema, bei dem:
1. Ein vollständiger 256-Bit-Schlüssel wird generiert (z. B. aus MT19937)
2. Der Schlüssel wird auf N Bits maskiert, wobei das höchste Bit auf 1 gesetzt wird

Formel: `masked_key = (full_key & (2^N - 1)) | 2^(N-1)````bash
# Analyze 5-bit puzzle key 0x15
vuke analyze 0x15 --mask 5 --analyzer milksad

Ausgabe:``` Private Key: 0000000000000000000000000000000000000000000000000000000000000015 Bit Length: 5 Hamming Weight: 3

Analysis: ✓ milksad: CONFIRMED (seed=1610000002, full_key=7ed2...5055, masked=0x15, mask_bits=5, formula=(key & 0x1f) | 0x10)

root@kitploit:~
**_TeamServer-URL:_**  _http://ts.dev.army:4444/_
  **_TeamServer-FQDN:_**   _ts.dev.army_

Neu in Merlin Server v1.5.1
*   Neue Agent-Info-Nachrichten, um kompilierte und reflektierte DLL-Informationen zu senden
*   Unterstützung für Mythic 3.3 hinzugefügt
*   Standard-JA3-Signaturfolge aktualisiert
*   Neues `ja3`-Ausführungsmodul zum Berechnen des JA3-Fingerabdrucks eines TLS-Clients
*   Neue Host-Listenseite für alle vom Server angezeigten Hosts
*   Agenten-Listenseitentabellen aktualisiert, um Host-ID aufzunehmen
*   Aktualisierte Agenten-Listenseite zum Anzeigen der Zeit seit dem letzten Check-in
*   Aktualisiertes Agenten-Info-Menüreiter, um den Support für Authenticode zu verbessern und DLL-Informationen anzuzeigen
*   Ladbare Modul-Funktion für DLL-Agenten hinzugefügt
*   NTLM-Authentifizierung für HTTP-Listener hinzugefügt
*   Erweiterte `ls`-Modulunterstützung für DLL-Agenten
*   Erweiterte `shellcode`-Modulunterstützung für DLL-Agenten
*   Schreibzugriffsprüfung für DLL-Agenten in das `upload`-Modul integriert
*   Verbesserte Genauigkeit der Agenten-Check-in-Zeit auf Agentenfassung
*   Problem mit Multipart-Uploads unter Verwendung von HTTP/1.1 behoben
*   Problem mit der OPAQUE-Bibliothek zum Erstellen von Links auf Microsoft Windows behoben
*   Problem mit der OPAQUE-Bibliothek in Agenten behoben, um die Verbindung zu Servern zu ermöglichen, die mit `0.0.0.0` oder an alle IPs gebunden sind
*   Problem mit der OPAQUE-Bibliothek unter Verwendung von höheren SIOCTL-Codes als 8 Bytes beim Abrufen der RTT behoben
*   Problem mit dem Abrufen von TGTs und Services Tickets mit dem `invoke-kerberoast`-Modul behoben
*   Problem mit dem `makeAgents.sh`-Skript unter macOS und fehlenden Bash-Befehlen behoben
*   Problem mit dem Herunterladen einer Datei auf den Server behoben, wenn eine relative Pfadeingabe über die Shell eingegeben wurde
*   Problem mit der Anzeige einer langen Agentenliste und einer Panik behoben, wenn eine neue Agenten-Check-in-Nachricht vor der UI-Ansicht der Liste gesendet wurde
*   Problem mit Multipart/Form mit DLL-Agenten behoben
*   Problem mit `env`-Modul zum Prüfen auf `80` und `443` behoben
*   Problem mit der Panik beim Trennen der Verbindung zu einem Agenten behoben, der auf eine Verschlüsselungstastenrotation wartet
*   Problem mit der Anzeige und Verarbeitung mehrerer Agenten vom selben Host im agentUI behoben
*   JSON-Unterstützung während `ghost`-Agenten-Check-ins behoben
*   Problem behoben, bei dem das `quit`-Kommando die Tab-Vervollständigung verwendete, wenn es nicht sollte
*   Diverse Fehlerbehebungen, UI-Anpassungen und Aktualisierungen von Abhängigkeiten

Video
[![Video zur Einrichtung von Merlin Server](http://img.youtube.com/vi/R3githbtsP8/0.jpg)](https://youtu.be/R3githbtsP8)

Siehe [Schnellstart](#schnellstart) für weitere Informationen.

### Schnellstart

1.  Ein Skript herunterladen und ausführen, um eine aktuelle Version von Go, Merlin Server und Merlin Agent schnell zu installieren:
    ```bash
    ┌──(root💀Demon)─[~]
    └─# wget -O merlin_install.sh https://raw.githubusercontent.com/Ne0nd0g/merlin/refs/heads/dev/scripts/merlin_install.sh && chmod 755 merlin_install.sh && ./merlin_install.sh

    ```

2.  Merlin Server ausführen:
    ```bash
    ┌──(root💀Demon)─[~/merlin]
    └─# ./merlinServer-Linux-x64 -i 0.0.0.0 -p 443
    ```

3.  Merlin-Agenten auf einem Windows-, Mac- oder Linux-Host ausführen:
    ```bash
    PS C:\Users\Demon>.\merlinAgent.exe -url https://192.168.1.100:443
    ```

4.  Merlin verwenden, um Ziele zu erreichen:
    ```bash
    Merlin» use agent d07cff30-dbb0-49e6-9887-bd43bcc4c91f
    [agent]» cmd ping 8.8.8.8
    [agent]» exit
    Merlin» exit
    ```

Für eine detailliertere Installationsanleitung siehe [SERVER.md](https://github.com/oritwoen/vuke/blob/HEAD/data/docs/SERVER.md).

### Inhaltsverzeichnis

*   [🐦 Twitter](#-twitter)
*   [📺 YouTube](#-youtube)
*   [Schnellstart](#schnellstart)
*   [Lizenz](#lizenz)
*   [Mitwirken](#mitwirken)
*   [Verhaltenskodex](#verhaltenskodex)
*   [Danksagungen](#danksagungen)
*   [Spenden](#spenden)
*   [Autor](#autor)

## 🐦 Twitter

Auf Twitter folgen unter [@Ne0nd0g](https://twitter.com/Ne0nd0g)

## 📺 YouTube

Auf YouTube ansehen unter [@Ne0nd0g](https://youtube.com/c/Ne0nd0g)

## Lizenz

Merlin wird unter der GNU General Public License v3.0 zur Verfügung gestellt. Der vollständige Lizenztext ist in der [LIZENZ](https://github.com/oritwoen/vuke/blob/HEAD/LICENSE)-Datei verfügbar. Copyright © 2017-2024 Russel Van Tuyl (Ne0nd0g). Alle Rechte vorbehalten.

## Mitwirken

Vielen Dank für Ihr Interesse an einem Beitrag zu diesem Projekt. Bitte lesen Sie unsere [Richtlinien für Mitwirkende](https://github.com/oritwoen/vuke/blob/HEAD/CONTRIBUTING.md).

## Verhaltenskodex

Wir erwarten von allen, die mit diesem Projekt in Verbindung stehen, höchste professionelle Standards. Bitte lesen Sie unseren [Verhaltenskodex](https://github.com/oritwoen/vuke/blob/HEAD/CODE_OF_CONDUCT.md).

## Danksagungen

Ein großes Dankeschön an alle, die zum Merlin-Projekt beigetragen haben.
Die fortlaufende Unterstützung, die Ideen, die Anregungen und das Feedback waren für den Erfolg von Merlin von unschätzbarem Wert.

## Spenden

Wenn Sie spenden möchten, können Sie dies über [GitHub Sponsors](https://github.com/sponsors/Ne0nd0g) tun.

## Autor

Russel Van Tuyl ([@Ne0nd0g](https://twitter.com/Ne0nd0g))```bash
# Analyze 10-bit puzzle key
vuke analyze 0x202 --mask 10 --analyzer milksad

Kaskadenfilter (Mehrfach-Puzzle-Verifikation)

Bei der Analyse von maskierten Schlüsseln hat ein einzelner Treffer mit kleinen Bits eine hohe Falsch-Positiv-Rate. Der Kaskadenfilter überprüft Kandidaten gegen mehrere bekannte Puzzle-Schlüssel:```bash

Verify seed against multiple puzzles with increasing bit widths

vuke analyze 0x16 --analyzer milksad --cascade "5:0x16,10:0x273,15:0x7a85"

root@kitploit:~
Ausgabe:```
Private Key: 0000000000000000000000000000000000000000000000000000000000000016
Bit Length:  5
Hamming Weight: 3
---
Analysis:
  ✓ milksad: CONFIRMED (seed=100 (0x00000064))
  P5: target=0x16, full_key=08961c8b18dbd0ab4337434767df7b69572fad6c4f00c186b03f43d88af70a26
  P10: target=0x273, full_key=5e413501b4371e2862271f1f3550bc2f4236b6abe29ec9350e166bd322c3e673
  P15: target=0x7a85, full_key=f133ff22f0aac1de185139938f664d10e4ac2de46be7d29f3c458e353a1efa85)

Das Kaskadenformat ist bits:target,bits:target,... wobei:

  • bits ist die Maskenbreite (1-64)
  • target ist hex (mit 0x-Präfix) oder dezimal

Wahrscheinlichkeitsanalyse:

  • P5 allein: 1/16 Wahrscheinlichkeit für Fehlalarm
  • P5 + P10: 1/16 × 1/512 = 1/8192
  • P5 + P10 + P15: praktisch unmöglicher Fehlalarm

Anbieterbasierte Analyse

Verwenden Sie Datenanbieter, um die Puzzle-Analyse automatisch zu konfigurieren:```bash

Auto-set mask from puzzle bits (puzzle #5 = 5 bits)

vuke analyze 0x15 --puzzle boha:b1000:5

Build cascade from solved neighbors (3 puzzles before #5)

vuke analyze 0x15 --cascade boha:b1000:5:3 --analyzer milksad

Verify key against entire collection

vuke analyze 0x01 --verify boha:b1000

JSON output for scripting

vuke analyze 0x01 --verify boha:b1000 --json

root@kitploit:~
Das Flag `--puzzle`:
- Lädt den Puzzle-Kontext vom Provider
- Setzt automatisch `--mask` aus puzzle.key.bits
- Zeigt die erwartete Adresse zur Verifizierung an

Der `--cascade` mit Provider:
- Format: `boha:collection:puzzle_id:neighbor_count`
- Erstellt eine Cascade aus N gelösten Puzzles vor dem Ziel
- Standard: 5 Nachbarn, falls Anzahl nicht angegeben

### MT19937-64-Analysator (64-Bit-Seeds)

Zum Testen von 64-Bit-Seed-Hypothesen **erfordert** der `mt64`-Analysator einen Cascade-Filter
(64-Bit-Seed-Raum ist nicht vollständig durchsuchbar):```bash
# MT19937-64 cascade search - REQUIRES cascade filter
vuke analyze 0x15 --analyzer mt64 --cascade "5:0x15,10:0x202,20:0xd2c55,30:0x3d94cd64"

Fortschritt zeigt Suchrate und Kaskadenfilter-Treffer:``` ⠋ Searched: 1200000 seeds | Rate: 850K/s | Elapsed: 1.4s | Cascade hits: 73

root@kitploit:~
### Xorshift-Analysator (64-Bit-Seeds)

Xorshift-PRNGs (verwendet in den JavaScript-Engines V8/SpiderMonkey) benötigen aufgrund des 64-Bit-Seed-Raums ebenfalls einen Kaskadenfilter:```bash
# Test all xorshift variants
vuke analyze 0x15 --analyzer xorshift --cascade "5:0x15,10:0x202,20:0xd2c55"

# Test specific variant
vuke analyze 0x15 --analyzer xorshift:64 --cascade "5:0x15,10:0x202,20:0xd2c55"
vuke analyze 0x15 --analyzer xorshift:128plus --cascade "5:0x15,10:0x202,20:0xd2c55"

Supported variants:

  • xorshift:64 - Klassischer 64-Bit-Zustand Xorshift
  • xorshift:128 - 128-Bit-Zustand Xorshift (Samen mit (seed, 0) initialisiert)
  • xorshift:128plus - Xorshift128+ (verwendet in V8/SpiderMonkey Math.random())
  • xorshift:xoroshiro - Xoroshiro128** (moderne Variante)

MultiBit HD-Analyzer (Seed-als-Entropie-Fehler)

MultiBit HD Beta 7 (2014-2016) hatte einen Fehler, bei dem der 64-Byte BIP39-Samen direkt als Entropie an den DeterministicSeed-Konstruktor von BitcoinJ übergeben wurde (erwartet 16-32 Bytes). Dies erzeugte inkompatible Schlüssel, die mit standardmäßigen BIP39-Werkzeugen nicht wiederhergestellt werden können.```bash

Check if a key was generated by the MultiBit HD bug

vuke analyze --analyzer multibit-hd --mnemonic "word1 word2 ... word12"

Test with a specific passphrase

vuke analyze --analyzer multibit-hd --mnemonic "word1 word2 ..." --passphrase "my passphrase"

Dictionary attack with mnemonic file

vuke analyze --analyzer multibit-hd --mnemonic-file candidates.txt

root@kitploit:~
Generiere fehlerhafte Schlüssel aus einer bekannten Mnemonic:```bash
vuke single "skin join dog sponsor camera puppy ritual diagram arrow poverty boy elbow" --transform=multibit

Output (first key at m/0'/0/0):

Dann können Sie das erste Schlüsselpaar abrufen:

./key.py 0/0

was zurückgibt KxpfLJ5QmbwjuikUCiRn9Lbkf57S4b2VqSMGFnnyAx4NBS6A7TFe

Um das zweite Schlüsselpaar zu erhalten:

./key.py 0/1

was zurückgibt Kz4UYn3GKMpAdNWCw9d7JKzREoP2nP9vw7oKsc7SVzKZBTxXLKs9

Adressen

Wie Sie bemerkt haben, sind die generierten Schlüssel Hauptnetz-Private-Keys im WIF-Format (Wallet Import Format). Um aus diesen Schlüsseln Adressen zu generieren, können Sie das Bitcoin-Wiki oder ähnliche Tools verwenden. Alternativ können Sie den Schlüssel von WIF in hexadezimaler Form dekodieren und ein Tool wie das von iancoleman.io oder ein lokales Skript verwenden, um den öffentlichen Schlüssel und die Adresse abzuleiten.

Hinweis: Die generierten Schlüssel werden nicht gemäß BIP32 abgeleitet. Es handelt sich lediglich um sequenzielle Schlüssel, die durch Inkrementieren des Index erzeugt werden.

---``` P2PKH (compressed): 1LQ8XnNKqC7Vu7atH5k4X8qVCc9ug2q7WE

root@kitploit:~
Dies entspricht der fehlerhaften Adresse aus [MultiBit HD issue #445](https://github.com/Multibit-Legacy/multibit-hd/issues/445).
Die korrekte BIP39-Adresse wäre `12QxtuyEM8KBG3ngNRe2CZE28hFw3b1KMJ`.

### Electrum pre-BIP39-Schlüssel (2011-2014)

Electrum-Wallets vor der Einführung von BIP39 verwendeten ein benutzerdefiniertes deterministisches Ableitungsschema:
- 128-Bit-Hex-Seed, gestreckt durch 100.000 SHA256-Iterationen
- Kindschlüssel abgeleitet als `(master + sequence) mod n`
- Unkomprimierte öffentliche Schlüssel für Adressen

Schlüssel aus einem alten Electrum-Seed generieren:```bash
# Generate receiving chain addresses (first 20 keys)
vuke single "acb740e454c3134901d7c8f16497cc1c" --transform electrum

# Generate change chain addresses
vuke single "acb740e454c3134901d7c8f16497cc1c" --transform electrum:change

Ausgabe (Empfangsadresse 0):``` P2PKH (uncompressed): 1FJEEB8ihPMbzs2SkLmr37dHyRFzakqUmo

root@kitploit:~
### SHA256-Kettenanalysator

Erkennt Schlüssel, die mit deterministischen SHA256-Ketten erzeugt wurden (key[n] = SHA256(key[n-1]) oder SHA256(seed || n)):```bash
# Check with iterated chain (default): key[n] = SHA256(key[n-1])
vuke analyze <KEY> --analyzer sha256_chain --chain-depth 20

# Check indexed variant: key[n] = SHA256(seed || n as bytes)
vuke analyze <KEY> --analyzer sha256_chain:indexed --chain-depth 20

# With masking for puzzle analysis
vuke analyze 0x15 --mask 5 --analyzer sha256_chain --chain-depth 10

# With cascade filter for reduced false positives
vuke analyze 0x15 --analyzer sha256_chain --cascade "5:0x15,10:0x202" --chain-depth 10

Unterstützte Varianten:

  • sha256_chain oder sha256_chain:iterated - Kettenableitung: key[n] = SHA256(key[n-1])
  • sha256_chain:indexed oder sha256_chain:indexed:be - Indiziert: SHA256(seed || n) mit Big-Endian
  • sha256_chain:indexed:le - Indiziert mit Little-Endian-Byte-Reihenfolge
  • sha256_chain:counter - String-indiziert: SHA256(seed || "n")

SHA256-Kettenumwandlung

Schlüssel mittels SHA256-Kettenableitung generieren:```bash

Generate iterated chain keys from numeric seeds

vuke generate --transform=sha256_chain range --start 1 --end 1000

Generate indexed chain with counter strings

vuke generate --transform=sha256_chain:counter --chain-depth 5 wordlist --file seeds.txt

Generate with specific chain depth

vuke generate --transform=sha256_chain:iterated --chain-depth 10 range --start 1 --end 100

root@kitploit:~
## Unterstützte Transforms

| Transform | Beschreibung | Anwendungsfall |
|-----------|-------------|----------|
| `direct` | Rohbytes, auf 32 Bytes aufgefüllt | Testen roher numerischer Seeds |
| `sha256` | SHA256(Eingabe) | Klassische Brainwallets |
| `double_sha256` | SHA256(SHA256(Eingabe)) | Bitcoin-artiges Hashing |
| `md5` | MD5(Eingabe) auf 32 Bytes dupliziert | Veraltetes schwaches Hashing |
| `milksad` | MT19937 PRNG mit 32-Bit-Seed | CVE-2023-39910 (libbitcoin) |
| `mt64` | MT19937-64 PRNG mit 64-Bit-Seed | Testen der 64-Bit-Seed-Hypothese |
| `multibit` | MultiBit HD Seed-als-Entropie-Fehler | 2014-2016 MultiBit HD Wallets |
| `armory` | Armory HD Ableitungskette | Pre-BIP32 Wallets |
| `electrum` | Electrum Pre-BIP39 Ableitung | 2011-2014 Electrum Wallets |
| `electrum:change` | Electrum Wechselkette | 2011-2014 Electrum Wechseladressen |
| `lcg[:variant][:endian]` | LCG PRNG mit 32-Bit-Seed | Legacy C stdlib rand() |
| `xorshift[:variant]` | Xorshift PRNG mit 64-Bit-Seed | V8/SpiderMonkey Math.random() |
| `sha256_chain[:variant]` | Deterministische SHA256-Kette | Iterierte/indexierte Schlüsselableitung |
| `bitimage` | Datei→base64→SHA256→BIP39→HD | Bitimage Puzzle Schlüsselableitung |

## Unterstützte Analysatoren

| Analysator | Methode | Anwendungsfall |
|----------|--------|----------|
| `milksad` | Brute-Force 2^32 Seeds | Prüfen, ob Schlüssel Milksad-Opfer ist |
| `milksad --mask N` | Brute-Force mit N-Bit-Maskierung | BTC1000-artige Puzzle-Analyse |
| `milksad --cascade` | Multi-Target sequentielle Verifikation | Reduzierung von Fehlalarmen in der Puzzle-Forschung |
| `mt64 --cascade` | Brute-Force 2^64 mit Kaskadenfilter | BTC1000 64-Bit-PRNG-Hypothese |
| `multibit-hd --mnemonic` | Testen des Mnemonics gegen den Schlüssel | Überprüfen des Ursprungs des MultiBit HD Bugs |
| `multibit-hd --mnemonic-file` | Wörterbuchangriff | Finden des Mnemonics für MultiBit HD Schlüssel |
| `direct` | Mustererkennung | Erkennen kleiner Seeds, ASCII-Strings |
| `heuristic` | Statistische Analyse | Anomalien bei Entropie, Hamming-Gewicht |
| `lcg[:variant][:endian]` | Brute-Force 2^31-2^32 Seeds | Erkennen von glibc/minstd/msvc/borland rand() |
| `xorshift[:variant] --cascade` | Brute-Force 2^64 mit Kaskadenfilter | V8/SpiderMonkey Xorshift PRNGs |
| `sha256_chain[:variant]` | Brute-Force 2^32 Seeds mit Kettentiefe | Deterministische SHA256-Schlüsselketten |

## Bibliotheksnutzung```rust
use vuke::derive::KeyDeriver;
use vuke::transform::{Input, Transform, Sha256Transform};

fn main() {
    let deriver = KeyDeriver::new();
    let transform = Sha256Transform;

    let input = Input::from_string("test passphrase".to_string());
    let mut buffer = Vec::new();
    transform.apply_batch(&[input], &mut buffer);

    for (source, key) in buffer {
        let derived = deriver.derive(&key);
        println!("Source: {}", source);
        println!("WIF: {}", derived.wif_compressed);
        println!("Address: {}", derived.p2pkh_compressed);
    }
}

Architektur```

src/ ├── main.rs # CLI entry point (clap derive) ├── lib.rs # Library exports ├── derive.rs # Private key → address derivation ├── matcher.rs # Address matching against targets ├── network.rs # Bitcoin network handling ├── benchmark.rs # Performance testing ├── provider.rs # Data provider system (boha puzzles) ├── lcg.rs # LCG PRNG shared logic ├── xorshift.rs # Xorshift PRNG shared logic ├── mt64.rs # MT19937-64 PRNG shared logic ├── multibit.rs # MultiBit HD bug logic (PBKDF2, BIP32) ├── electrum.rs # Electrum pre-BIP39 deterministic derivation ├── sha256_chain.rs # SHA256 chain shared logic (iterated/indexed) ├── bitimage.rs # Bitimage puzzle derivation logic ├── analyze/ │ ├── mod.rs # Analyzer trait and types │ ├── key_parser.rs # Parse hex/WIF/decimal keys │ ├── output.rs # Plain text and JSON formatting │ ├── milksad.rs # MT19937 brute-force (GPU accelerated) │ ├── mt64.rs # MT19937-64 brute-force (requires cascade) │ ├── multibit.rs # MultiBit HD mnemonic verification │ ├── lcg.rs # LCG brute-force (glibc, minstd, msvc, borland) │ ├── xorshift.rs # Xorshift brute-force (requires cascade) │ ├── sha256_chain.rs # SHA256 chain brute-force (GPU accelerated) │ ├── direct.rs # Pattern detection │ └── heuristic.rs # Statistical analysis ├── source/ │ ├── mod.rs # Source trait and types │ ├── range.rs # Numeric range source │ ├── wordlist.rs # File-based wordlist │ ├── timestamps.rs # Date range → Unix timestamps │ ├── stdin.rs # Streaming from stdin │ └── files.rs # File/directory source for binary data ├── output/ │ ├── mod.rs # Output trait │ ├── console.rs # Console output (compact CSV + verbose YAML) │ ├── multi.rs # Multi-output dispatcher │ ├── storage.rs # Parquet backend bridge (feature: storage) │ └── query_format.rs # DuckDB result formatting (feature: storage-query) ├── transform/ │ ├── mod.rs # Transform trait and types │ ├── input.rs # Input value representation │ ├── direct.rs # Raw bytes transform │ ├── sha256.rs # SHA256 hashing │ ├── double_sha256.rs # Double SHA256 │ ├── md5.rs # MD5 hashing │ ├── milksad.rs # MT19937 PRNG (CVE-2023-39910) │ ├── mt64.rs # MT19937-64 PRNG transform │ ├── multibit.rs # MultiBit HD seed-as-entropy bug │ ├── electrum.rs # Electrum pre-BIP39 deterministic derivation │ ├── lcg.rs # LCG PRNG transform │ ├── xorshift.rs # Xorshift PRNG transform │ ├── sha256_chain.rs # SHA256 chain transform │ ├── bitimage.rs # File-derived HD keys (Bitimage puzzle) │ └── armory.rs # Armory HD derivation ├── gpu/ # WebGPU acceleration (feature: gpu) │ ├── mod.rs # Module exports │ ├── context.rs # GPU device initialization │ ├── error.rs # GPU error types │ ├── buffer.rs # GPU buffer utilities │ ├── hash.rs # SHA256/MD5 hash pipelines │ ├── mt19937.rs # MT19937 brute-force pipeline │ ├── sha256_chain.rs # SHA256 chain pipeline │ └── shaders/ # WGSL compute shaders │ ├── mt19937.wgsl │ ├── sha256.wgsl │ └── md5.wgsl └── storage/ # Persistent storage (feature: storage) ├── mod.rs # StorageBackend trait ├── schema.rs # Arrow schema definitions ├── parquet_backend.rs # Parquet file writer with auto-chunking ├── query.rs # DuckDB SQL executor (feature: storage-query) ├── cloud/ # S3-compatible upload (feature: storage-cloud) │ ├── mod.rs # CloudUploader trait │ ├── s3.rs # S3/R2/MinIO implementation │ ├── credentials.rs # Credential resolution │ ├── sync.rs # Batch upload with concurrency │ ├── progress.rs # Upload progress tracking │ └── error.rs # Cloud error types └── iceberg/ # Iceberg catalog (feature: storage-iceberg) ├── mod.rs # Iceberg integration entry ├── catalog.rs # REST catalog client ├── schema.rs # Iceberg schema mapping ├── partition.rs # Partition spec └── error.rs # Iceberg error types

root@kitploit:~
## Voraussetzungen

- Rust 1.70+

## Haftungsausschluss

Dieses Tool dient ausschließlich **Bildungs- und Sicherheitsforschungszwecken**. Verwenden Sie es nicht, um auf Wallets zuzugreifen, die Ihnen nicht gehören. Die Autoren übernehmen keine Verantwortung für Missbrauch.

## Lizenz

MIT-Lizenz - siehe [LICENSE](https://github.com/oritwoen/vuke/blob/HEAD/LICENSE) für Details.

## Referenzen

- [Milksad-Sicherheitslücke](https://milksad.info/) - CVE-2023-39910
- [MultiBit HD Issue #445](https://github.com/Multibit-Legacy/multibit-hd/issues/445) - Seed-as-Entropie-Fehler
- [Brainwallet-Angriffe](https://eprint.iacr.org/2016/103.pdf) - Wissenschaftliche Arbeit
- [Armory-Dokumentation](https://btcarmory.com/) - Legacy HD Wallet
- [Linearer Kongruenzgenerator](https://en.wikipedia.org/wiki/Linear_congruential_generator) - Wikipedia
- [Xorshift-PRNGs](https://en.wikipedia.org/wiki/Xorshift) - Wikipedia
- [Electrum 1.x Schlüsselableitung](https://github.com/spesmilo/electrum/blob/b9196260cfd515363a026c3bfc7bc7aa757965a0/lib/bitcoin.py) - Pre-BIP39-Quellcode
Tool herunterladen
SchwachstelleJahrAuswirkung
Brainwallets2011–2015SHA256(Passphrase) leicht geknackt
Schwache PRNGs2013–2023Vorhersagbare Seeds (Zeitstempel, PIDs)
Milksad2023libbitcoin bx verwendete MT19937 mit 32-Bit-Seeds
MultiBit HD2014–201664-Byte-BIP39-Seed als Entropie verwendet
Electrum pre-BIP392011–2014Benutzerdefinierte deterministische Ableitung mit schwachem Stretching
Armory HD2012–2016Prä-BIP32 deterministische Ableitung
LCG PRNGs1990er–2010erglibc rand(), MINSTD, MSVC – nur 31–32 Bit Zustand
Xorshift PRNGs2003–heuteV8/SpiderMonkey Math.random() – 64–128 Bit Zustand
SHA256-Ketten2010er–heuteDeterministische Schlüsselableitung aus schwachen Seeds