O valor de retorno de
echo "passphrase" | sudo cryptsetup luksOpen /dev/sda1 encrypted
é:
- 0, se houver uma chave para essa frase secreta
- 234, se não houver chave para essa frase secreta
Não deve ser muito difícil escrever um script bash, que faça um loop na sua lista de palavras, tente cada frase-senha e verifique o valor de retorno.
Exemplo:
#!/bin/bash
DEVICE="/dev/sda1"
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root." 1>&2
exit 1
fi
while read line; do
echo "$line" | cryptsetup luksOpen "$DEVICE" encrypted 2>/dev/null
# success
if [[ $? -eq 0 ]]; then
cryptsetup luksClose encrypted
echo "Passphrase: $line"
exit 0
fi
done < ""
echo "Passphrase not contained in word list."
exit 1
Salve, mude o dispositivo, torne executável, execute como sudo ./find-password /path/to/wordlist
e aguarde.
Nota: isso é lento . Eu não sei se é porque eu tentei isso em um cartão SD, mas levou cinco segundos para testar quatro senhas erradas (quase 6 dias para 400.000 senhas possíveis).
Atualização: parece limite da CPU. Se você dividir sua lista de palavras e fizer algo como
(sudo ./find-password words.0 &) ; (sudo ./find-password words.1 &)
Ele usará dois núcleos e quase metade do tempo por tentativa.