From eeff037365dfffdf398b91a425a808f3f097f92e Mon Sep 17 00:00:00 2001 From: jsteube Date: Fri, 28 Dec 2018 22:32:54 +0100 Subject: [PATCH] Fix test.sh in non-optimized mode --- tools/test.sh | 76 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 56 insertions(+), 20 deletions(-) diff --git a/tools/test.sh b/tools/test.sh index 04fcfbdad..4b6312114 100755 --- a/tools/test.sh +++ b/tools/test.sh @@ -1037,23 +1037,6 @@ function attack_3() increment_max=9 fi - hash_file=${OUTD}/${hash_type}_multihash_bruteforce.txt - - tail_hashes=$(awk "length >= ${increment_min} && length <= ${increment_max}" ${OUTD}/${hash_type}_passwords.txt | wc -l) - head_hashes=$(awk "length <= ${increment_max}" ${OUTD}/${hash_type}_passwords.txt | wc -l) - - if [ ${tail_hashes} -gt ${head_hashes} ]; then - return - fi - - if [ ${tail_hashes} -lt 1 ]; then - return - fi - - cracks_offset=$((${head_hashes} - ${tail_hashes})) - - head -n ${head_hashes} ${OUTD}/${hash_type}_hashes.txt | tail -n ${tail_hashes} > ${hash_file} - # if file_only -> decode all base64 "hashes" and put them in the temporary file if [ "${file_only}" -eq 1 ]; then @@ -1071,13 +1054,56 @@ function attack_3() fi + hash_file=${OUTD}/${hash_type}_multihash_bruteforce.txt + + tail_hashes=$(awk "length >= ${increment_min} && length <= ${increment_max}" ${OUTD}/${hash_type}_passwords.txt | wc -l) + head_hashes=$(awk "length <= ${increment_max}" ${OUTD}/${hash_type}_passwords.txt | wc -l) + + # in very rare cases (e.g. without -O and long passwords) we need to use .hcmask files with the passwords in it + # otherwise there are no good masks we can test for such long passwords + + need_hcmask=0 + + if [ ${tail_hashes} -gt ${head_hashes} ]; then + need_hcmask=1 + fi + + if [ ${tail_hashes} -lt 1 ]; then + need_hcmask=1 + fi + + if [ ${need_hcmask} -eq 0 ]; then + head -n ${head_hashes} ${OUTD}/${hash_type}_hashes.txt | tail -n ${tail_hashes} > ${hash_file} + else + tail_hashes=$(awk "length >= ${increment_min}" ${OUTD}/${hash_type}_passwords.txt | wc -l) + + if [ ${tail_hashes} -lt 1 ]; then + return + fi + + tail -n ${tail_hashes} ${OUTD}/${hash_type}_hashes.txt > ${hash_file} + fi + mask_pos=8 if [ "${increment_min}" -gt ${mask_pos} ]; then mask_pos=${increment_min} fi - mask=${mask_3[${mask_pos}]} + mask="" + cracks_offset=0 + + if [ ${need_hcmask} -eq 0 ]; then + cracks_offset=$((${head_hashes} - ${tail_hashes})) + + mask=${mask_3[${mask_pos}]} + else + num_hashes=$(cat ${OUTD}/${hash_type}_hashes.txt | wc -l) + cracks_offset=$((${num_hashes} - ${tail_hashes})) + + mask=${OUTD}/${hash_type}_passwords.txt # fake hcmask file (i.e. the original dict) + fi + custom_charsets="" # modify "default" mask if needed (and set custom charset to reduce keyspace) @@ -1252,11 +1278,21 @@ function attack_3() custom_charsets="-1 ${charset_1} -2 ${charset_2} -3 ${charset_3} -4 ${charset_4}" fi - CMD="./${BIN} ${OPTS} -a 3 -m ${hash_type} --increment --increment-min ${increment_min} --increment-max ${increment_max} ${custom_charsets} ${hash_file} ${mask} " + increment_charset_opts="" + + if [ ${need_hcmask} -eq 0 ]; then # the "normal" case without .hcmask file + increment_charset_opts="--increment --increment-min ${increment_min} --increment-max ${increment_max}" + + if [ -n "${custom_charsets}" ]; then + increment_charset_opts="${increment_charset_opts} ${custom_charsets}" + fi + fi + + CMD="./${BIN} ${OPTS} -a 3 -m ${hash_type} ${increment_charset_opts} ${hash_file} ${mask} " echo "> Testing hash type $hash_type with attack mode 3, markov ${MARKOV}, multi hash, Device-Type ${TYPE}, vector-width ${VECTOR}." &>> ${OUTD}/logfull.txt - output=$(./${BIN} ${OPTS} -a 3 -m ${hash_type} --increment --increment-min ${increment_min} --increment-max ${increment_max} ${custom_charsets} ${hash_file} ${mask} 2>&1) + output=$(./${BIN} ${OPTS} -a 3 -m ${hash_type} ${increment_charset_opts} ${hash_file} ${mask} 2>&1) ret=${?}