La risposta generale è: fare un po 'di reverse engineering sull'applicazione. Questa nozione di "reverse-engineering" è piuttosto ampia; include:
- Leggere la documentazione (se presente) o altre note di progettazione che accompagnano l'applicazione.
- Parlando con gli sviluppatori che hanno creato quell'applicazione (è incredibile cosa diranno le persone dopo due o tre pinte).
- Passando attraverso il codice sorgente, se disponibile. Dal punto di vista di un attaccante, il codice sorgente può spesso essere ottenuto passando attraverso i cassonetti all'esterno degli uffici degli sviluppatori, per cercare dischi rigidi o nastri di backup scartati.
- Esegui tu stesso i casi di test: registrati sull'applicazione con una password che conosci e guarda cosa diventa nel database. In particolare, verifica se cambiare la password più volte e tornare al primo ti riporta allo stesso valore memorizzato o ad un altro. Inoltre, verifica se due utenti distinti con la stessa password hanno lo stesso valore memorizzato.
- Disassemblare i binari dell'applicazione. Questo è particolarmente semplice con bytecode Java e assembly .NET (per quest'ultimo, ho usato ILSpy con successo).
Senza tale reverse engineering, si torna a indovinare , un metodo la cui efficienza è discutibile. Nel tuo caso, l'esempio mostrato assomiglia alla codifica Base64 di un valore binario di lunghezza 8 byte ( 6b 33 b0 28 fa 14 60 fe
, in particolare). Questo suggerisce un algoritmo che produce 64 bit, forse una variante del tradizionale hashing basato sul DES ma senza sale.
Ricordati che una password può essere crittografata , ma, molto più spesso, è hash ; a volte, è MACed . Queste sono nozioni molto distinte e troverete molta documentazione che è molto confusa e confusa su questo argomento. Quindi, come guida alla lettura:
-
Crittografia: utilizzando un tasto , trasforma alcuni dati di input in un altro formato che è illeggibile a chiunque eccetto quelli che conoscono la chiave; con la chiave, la trasformazione può essere invertita (questa è chiamata "decrittazione"), restituendo il valore originale.
-
Hashing: mescola e mescola i dati di input in un output a lunghezza fissa. Non c'è chiave; la funzione è deterministica e pubblica e tutti possono applicarla. L'hash non è reversibile; se la funzione hash è buona, l'unico metodo per trovare l'input originale (o almeno un input corrispondente) è luck (tu provi gli input finché non trovi quello giusto).
-
MAC: un po 'equivalente a un "hashing con chiave". Hai bisogno della chiave per calcolarlo; ma anche con la chiave, non è reversibile. Un MAC deve essere verificato , non "decrittografato".