Przejdź do głównej zawartości

HashSleuth

Identyfikacja hash + narzędzie do łamania haseł z trzema trybami.

Przegląd

HashSleuth fingerprintuje formaty hashy i atakuje je dwiema strategiami: równoległym atakiem słownikowym i maskowanym brute force. Wspiera łamanie digestów MD5, SHA1 i SHA256 z auto-wykrywaniem na podstawie długości hasha.

Użycie

hashsleuth identify <hash>
hashsleuth dict <hash> <wordlist> [--algo md5|sha1|sha256]
hashsleuth brute <hash> <charset> <maxlen> [--algo md5|sha1|sha256]

PRZYKŁADY:
hashsleuth identify 5f4dcc3b5aa765d61d8327deb882cf99
hashsleuth dict 5f4dcc3b5aa765d61d8327deb882cf99 rockyou.txt
hashsleuth brute 5f4dcc3b5aa765d61d8327deb882cf99 abc123 5 --algo md5

Tryb 1: identify

Fingerprintuje hash na podstawie kodowania i długości. Rozpoznawane formaty:

FormatWykrywanie
bcryptprefiks $2a$ / $2b$ / $2y$
sha256-cryptprefiks $5$
sha512-cryptprefiks $6$
md5-cryptprefiks $1$
Apache MD5prefiks $apr1$
phpass (WordPress/Drupal)prefiks $P$ / $H$
LDAP SHA1 / SSHAprefiks {sha1} / {ssha}
Django PBKDF2prefiks pbkdf2:sha256:
Django salted SHAprefiks sha1$ / sha256$

Digesty hex wg długości:

DługośćKandydaci
8CRC16 / FNV (hex)
16CRC32 / NTLM (hex)
32MD5 · NTLM (hex MD4) · MySQL323
40SHA1 · MySQL5
56SHA224
64SHA256 · RIPEMD-160 (hex)
96SHA384
128SHA512
$ hashsleuth identify 5f4dcc3b5aa765d61d8327deb882cf99
[*] hash: 5f4dcc3b5aa765d61d8327deb882cf99
[?] możliwe: MD5
[?] możliwe: NTLM (hex MD4)
[?] możliwe: MySQL323

Tryb 2: dict (atak słownikowy)

Czyta wordlistę linia po linii i haszuje każdy kandydat w puli workerów (num_cpus, ograniczone do 32). Wczesne wyjście: pierwsze trafienie ustawia atomową flagę, która zatrzymuje wszystkich workerów.

$ hashsleuth dict 482c811da5d5b4bc6d497ffa98491e38 /tmp/wl.txt --algo md5
[+] ZNALEZIONO: password123
[*] złamano w 0.00s
  • Auto-wykrywa algorytm z długości hasha, gdy pominięto --algo
  • Raportuje łączną liczbę przetestowanych słów i czas przy porażce

Tryb 3: brute (maskowany brute force)

Wylicza każdą kombinację zestawu znaków do maxlen:

$ hashsleuth brute 900150983cd24fb0d6963f7d28e17f72 abc 3 --algo md5
[*] HashSleuth 1.0.0 | brute force | algo=md5 | charset="abc" | maxlen=3
[*] target: 900150983cd24fb0d6963f7d28e17f72
[+] ZNALEZIONO: abc

Równoległość: workery kroczą po płaskiej przestrzeni indeksów (i = w; i += workers) przez każdą pozycję i długość; każdy worker dekoduje swój indeks na cyfry zestawu (licznik base-N).

Ochrona przestrzeni poszukiwań: jeśli charset^len > 100 000 000, narzędzie przerywa tę długość z jasnym komunikatem zamiast wyczerpywać CPU.

$ hashsleuth brute 5f4dcc3b5aa765d61d8327deb882cf99 abcdefghijklmnopqrstuvwxyz 8 --algo md5
[-] przestrzeń poszukiwań zbyt duża (26^8 = 208B); przerywam

Uwaga: brute force rośnie wykładniczo — przy 26-znakowym zestawie limit 100M jest przekroczony już na długości 6 (26⁶ = 308M), więc praktyczny limit to ~5 znaków. Preferuj dobrą wordlistę (tryb słownikowy).

Auto-wykrywanie algorytmu

Gdy pominięto --algo, długość hasha wybiera algorytm:

DługośćAlgorytm
32md5
40sha1
64sha256
innabłąd, --algo wymagane

Uwagi implementacyjne

  • identify() sprawdza prefiksy przed klasyfikacją długości hex
  • Tryb słownikowy używa przesuwanego okna wątków roboczych (max num_cpus)
  • Brute force używa checked_pow, aby uniknąć przepełnienia liczb całkowitych
  • Wszyscy workery dzielą AtomicBool dla wczesnego zakończenia