Gambiarra com truecrypt

Meu problema começou quando perdi a senha de um dos volumes de truecrypt que utilizo. Eu sabia que a senha desse volume seguia um padrão: uma combinação de várias palavras e códigos conhecidos por mim.

Como eu tinha em mente muitas palavras e códigos, gerar todas as combinações na mão e testar uma a uma poderia levar muito tempo (como também poderia ser uma das primeiras combinações).

Utilizei o  código abaixo para gerar as 109600 combinações:


#!/usr/bin/python
import sys, itertools

lista     = sys.argv[1:]
len_lista = len(lista)+1

if len_lista < 3:
	print 'Passe uma lista de palavras separadas por espaco'
	sys.exit()

for quantidade in range(1,len_lista):
	for item in list(itertools.permutations(lista,quantidade)):
		print ''.join(item)

Depois disso, o código abaixo testou as combinações a uma vergonhosa velocidade de 72 senhas por minuto e eu consegui ter a senha em pouco mais de 7 minutos (considerando que fazer isso na mão seria bem pior, estou satisfeito):


#!/usr/bin/python
import sys, subprocess

if len(sys.argv) != 3:
	print 'Uso: ' + sys.argv[0] + ' arquivo.tc arquivo.senhas'
	sys.exit()

truecrypt       = "/Applications/TrueCrypt.app/Contents/MacOS/TrueCrypt"
volume          = sys.argv[1]
lista_de_senhas = [linha.strip() for linha in open(sys.argv[2],'r')]

for senha in lista_de_senhas:
	retcod = subprocess.call(truecrypt + ' --text --mount ' + volume + \
			' --mount-options=ro --slot=10 --non-interactive \
			--password=' + senha, shell=True,
			stderr=subprocess.PIPE)
	if retcod == 0:
		print 'SENHA: ' + senha
		sys.exit()

Pode não ser a melhor solução, mas resolveu meu problema. (-: