Esboço do método:
-
Use um utilitário como
crunch
para criar um arquivo de dicionário personalizado. -
Execute
fcrackzip
com esse dicionário personalizado.
Problemas:
-
Até 3 strings misturadas com letras minúsculas de 3 a 5 caracteres formam mais de um trilhão de senhas possíveis. Apenas gerar esse dicionário vai demorar um pouco.
-
crunch
permite o uso de caracteres curinga baseados em caracteres, mas seu tratamento de sequências personalizadas não é tão flexível. Para resolver este Q,grep
,sed
esort
também parecem ser necessários, qualquer um dos quais aumenta o tempo necessário, ou seja, horas, talvez dias ...
Algo como isso provavelmente funcionaria:
crunch 3 9 abcdefghijklmnopqrstuvwxyz123 | \
grep '[123]' | # at least one number per dict entry
egrep -v '([123]).*' | # remove repeated numbers
sed 's/1/hello/;s/2/world/;s/3/shittypass/' | # replace numbers with strings
sort -u | \
fcrackzip -D -p /dev/stdin foo.zip
Caso de teste com um conjunto de problemas menor (uma ou duas sequências e até duas letras minúsculas, qualquer ordem):
echo foo > bar.txt # file to archive
zip -P xhellobworld baz bar.txt # archive with password
time crunch 2 4 abcdefghijklmnopqrstuvwxyz12 | \
grep '[12]' | egrep -v '([12]).*' | \
sed 's/1/hello/;s/2/world/' | \
sort -n | fcrackzip -u -D -p /dev/stdin baz.zip
Saída:
Crunch will now generate the following amount of data: 3163440 bytes
3 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 637392
PASSWORD FOUND!!!!: pw == xhellobworld
real 0m5.942s
user 0m2.240s
sys 0m1.040s