diff --git a/docs/changes.txt b/docs/changes.txt index 04d1266e4..27549e59a 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -15,6 +15,7 @@ - Fixed output of IKE PSK (mode 5300 and 5400) hashes to have separators at right position - Fixed the validation of the --brain-client-features command line argument (only values 1, 2 or 3 are allowed) - Fixed cracking of Cisco-PIX and Cisco-ASA MD5 passwords in mask-attack mode if mask > length 16 +- Fixed the 7-Zip parser to allow the entire supported range of encrypted and decrypted data lengths ## ## Technical diff --git a/src/modules/module_11600.c b/src/modules/module_11600.c index 967b3a068..9958f56f1 100644 --- a/src/modules/module_11600.c +++ b/src/modules/module_11600.c @@ -341,13 +341,13 @@ int module_hash_decode (MAYBE_UNUSED const hashconfig_t *hashconfig, MAYBE_UNUSE token.sep[8] = '$'; token.len_min[8] = 1; - token.len_max[8] = 4; + token.len_max[8] = 6; token.attr[8] = TOKEN_ATTR_VERIFY_LENGTH | TOKEN_ATTR_VERIFY_DIGIT; token.sep[9] = '$'; token.len_min[9] = 1; - token.len_max[9] = 4; + token.len_max[9] = 6; token.attr[9] = TOKEN_ATTR_VERIFY_LENGTH | TOKEN_ATTR_VERIFY_DIGIT; diff --git a/tools/test.sh b/tools/test.sh index b894c2915..a8be9ee17 100755 --- a/tools/test.sh +++ b/tools/test.sh @@ -11,28 +11,7 @@ TDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # missing hash types: 5200,6251,6261,6271,6281 -# Array of all hash-modes supported by the test suite -HASH_TYPES="0 10 11 12 20 21 22 23 30 40 50 60\ - 100 101 110 111 112 120 121 122 125 130 131 132 133\ - 140 141 150 160 200 300 400 500 600 900 1000 1100 1300\ - 1400 1410 1411 1420 1430 1440 1441 1450 1460 1500 1600 1700 1710\ - 1711 1720 1722 1730 1731 1740 1750 1760 1800 2100 2400 2410 2500\ - 2600 2611 2612 2711 2811 3000 3100 3200 3710 3711 3800 3910 4010\ - 4110 4300 4400 4500 4520 4521 4522 4700 4800 4900 5100 5300 5400\ - 5500 5600 5700 5800 6000 6100 6211 6212 6213 6221 6222 6223 6231\ - 6232 6233 6241 6242 6243 6300 6400 6500 6600 6700 6800 6900 7000\ - 7100 7200 7300 7400 7500 7700 7701 7800 7801 7900 8000 8100 8200\ - 8300 8400 8500 8600 8700 8900 9100 9200 9300 9400 9500 9600 9700\ - 9800 9900 10000 10100 10200 10300 10400 10500 10600 10700 10800 10900 11000\ - 11100 11200 11300 11400 11500 11600 11700 11750 11760 11800 11850 11860 11900\ - 12000 12001 12100 12200 12300 12400 12600 12700 12800 12900 13000 13100 13200\ - 13300 13400 13500 13600 13711 13712 13713 13721 13722 13723 13731 13732 13733\ - 13751 13752 13753 13771 13772 13773 13800 13900 14000 14100 14400 14600 14700\ - 14800 14900 15000 15100 15200 15300 15400 15500 15600 15700 15900 16000 16100\ - 16200 16300 16400 16500 16600 16700 16800 16900 17300 17400 17500 17600 17700\ - 17800 17900 18000 18100 18200 18300 18400 18500 18600 99999" - -HASH_TYPES=$(ls ${TDIR}/test_modules/*.pm | sed -r 's/.*m0*([0-9]+).pm/\1/') +HASH_TYPES=$(ls ${TDIR}/test_modules/*.pm | sed 's/.*m0*\([0-9]\+\)\.pm/\1/') VECTOR_WIDTHS="1 2 4 8 16" @@ -1470,9 +1449,38 @@ function attack_6() fi echo ${pass} | cut -b -$((${#pass} - ${i})) >> ${dict1_a6} - sort -R ${dict1_a6} > ${dict1_a6}.txt + + # the block below is just a fancy way to do a "shuf" (or sort -R) because macOS doesn't really support it natively + # we do not really need a shuf, but it's actually better for testing purposes + + rm -f ${dict1_a6}.txt # temporary file + + line_num=$(wc -l ${dict1_a6} | sed 's/ .*$//') + + sorted_lines=$(seq 1 ${line_num}) + + for lines in $(seq 1 ${line_num}); do + + random_num=$((${RANDOM} % ${line_num})) + random_num=$((${random_num} + 1)) # sed -n [n]p starts counting with 1 (not 0) + + random_line=$(echo -n "${sorted_lines}" | sed -n ${random_num}p) + + sed -n ${random_line}p ${dict1_a6} >> ${dict1_a6}.txt + + # update the temp list of lines + + sorted_lines=$(echo -n "${sorted_lines}" | grep -v "^${random_line}$") + + line_num=$((${line_num} - 1)) + + done + mv ${dict1_a6}.txt ${dict1_a6} + # end of shuf/sort -R + + mask="" for j in $(seq 1 ${i}); do @@ -2468,45 +2476,46 @@ cat << EOF OPTIONS: -V OpenCL vector-width (either 1, 2, 4 or 8), overrides value from device query : - '1' => vector-width 1 - '2' => vector-width 2 (default) - '4' => vector-width 4 - '8' => vector-width 8 - 'all' => test sequentially vector-width ${VECTOR_WIDTHS} + '1' => vector-width 1 + '2' => vector-width 2 (default) + '4' => vector-width 4 + '8' => vector-width 8 + 'all' => test sequentially vector-width ${VECTOR_WIDTHS} -T OpenCL device-types to use : - 'gpu' => gpu devices (default) - 'cpu' => cpu devices - 'all' => gpu and cpu devices + 'gpu' => gpu devices (default) + 'cpu' => cpu devices + 'all' => gpu and cpu devices -t Select test mode : - 'single' => single hash (default) - 'multi' => multi hash - 'all' => single and multi hash + 'single' => single hash (default) + 'multi' => multi hash + 'all' => single and multi hash -m Select hash type : - 'all' => all hash type supported - (int) => hash type integer code (default : 0) + 'all' => all hash type supported + (int) => hash type integer code (default : 0) -a Select attack mode : - 'all' => all attack modes - (int) => attack mode integer code (default : 0) + 'all' => all attack modes + (int) => attack mode integer code (default : 0) + (int)-(int) => attack mode integer range -x Select cpu architecture : - '32' => 32 bit architecture - '64' => 64 bit architecture (default) + '32' => 32 bit architecture + '64' => 64 bit architecture (default) -o Select operating system : - 'win' => Windows operating system (use .exe file extension) - 'linux' => Linux operating system (use .bin file extension) - 'macos' => macOS operating system (use .app file extension) + 'win' => Windows operating system (use .exe file extension) + 'linux' => Linux operating system (use .bin file extension) + 'macos' => macOS operating system (use .app file extension) -c Disables markov-chains -p Package the tests into a .7z file -d Use this folder as input/output folder for packaged tests - (string) => path to folder + (string) => path to folder -h Show this help @@ -2678,26 +2687,42 @@ if [ "${PACKAGE}" -eq 0 -o -z "${PACKAGE_FOLDER}" ]; then exit 1 fi + HT_MIN=0 + HT_MAX=0 + + if echo -n ${HT} | grep -q '^[0-9]\+$'; then + HT_MIN=${HT} + HT_MAX=${HT} + elif echo -n ${HT} | grep -q '^[0-9]\+-[1-9][0-9]*$'; then + + HT_MIN=$(echo -n ${HT} | sed "s/-.*//") + HT_MAX=$(echo -n ${HT} | sed "s/.*-//") + + if [ "${HT_MIN}" -gt ${HT_MAX} ]; then + echo "! hash type range -m ${HT} is not valid ..." + usage + fi + else + echo "! hash type is not a number ..." + usage + fi + + HT=${HT_MIN} + # filter by hash_type if [ ${HT} -ne 65535 ]; then # validate filter - check=0 - for hash_type in $(echo ${HASH_TYPES}); do - if [ ${HT} -ne ${hash_type} ]; then continue; fi - - check=1 - - break - - done - - if [ ${check} -ne 1 ]; then + if ! is_in_array ${HT_MIN} ${HASH_TYPES}; then echo "! invalid hash type selected ..." usage fi + if ! is_in_array ${HT_MAX} ${HASH_TYPES}; then + echo "! invalid hash type selected ..." + usage + fi fi if [ -z "${PACKAGE_FOLDER}" ]; then @@ -2710,13 +2735,21 @@ if [ "${PACKAGE}" -eq 0 -o -z "${PACKAGE_FOLDER}" ]; then for TMP_HT in ${HASH_TYPES}; do perl tools/test.pl single ${TMP_HT} >> ${OUTD}/all.sh done - elif [[ ${HT} -ne 14600 ]]; then - # Exclude TrueCrypt and VeraCrypt testing modes - if [[ ${HT} -lt 6211 ]] || [[ ${HT} -gt 6243 ]]; then - if ! is_in_array ${HT} ${VC_MODES}; then - perl tools/test.pl single ${HT} > ${OUTD}/all.sh + else + for TMP_HT in $(seq ${HT_MIN} ${HT_MAX}); do + if ! is_in_array ${TMP_HT} ${HASH_TYPES}; then + continue fi - fi + + if [[ ${TMP_HT} -ne 14600 ]]; then + # Exclude TrueCrypt and VeraCrypt testing modes + if [[ ${TMP_HT} -lt 6211 ]] || [[ ${TMP_HT} -gt 6243 ]]; then + if ! is_in_array ${TMP_HT} ${VC_MODES}; then + perl tools/test.pl single ${TMP_HT} >> ${OUTD}/all.sh + fi + fi + fi + done fi else @@ -2738,7 +2771,17 @@ if [ "${PACKAGE}" -eq 0 -o -z "${PACKAGE_FOLDER}" ]; then for hash_type in $(echo $HASH_TYPES); do - if [[ ${HT} -ne 65535 ]] && [[ ${HT} -ne ${hash_type} ]]; then continue; fi + if [ "${HT}" -ne 65535 ]; then + + # check if the loop variable "hash_type" is between HT_MIN and HT_MAX (both included) + + if [ "${hash_type}" -lt ${HT_MIN} ]; then + continue + elif [ "${hash_type}" -gt ${HT_MAX} ]; then + # we are done because hash_type is larger than range: + break + fi + fi if [ -z "${PACKAGE_FOLDER}" ]; then @@ -2893,11 +2936,17 @@ if [ "${PACKAGE}" -eq 1 ]; then SED_IN_PLACE='-i ""' fi + HT_PACKAGED=${HT} + + if [ "${HT_MIN}" -ne "${HT_MAX}" ]; then + HT_PACKAGED=${HT_MIN}-${HT_MAX} + fi + HASH_TYPES_PACKAGED=$(echo ${HASH_TYPES} | tr '\n' ' ' | sed 's/ $//') sed "${SED_IN_PLACE}" -e 's/^\(PACKAGE_FOLDER\)=""/\1="$( echo "${BASH_SOURCE[0]}" | sed \"s!test.sh\\$!!\" )"/' \ -e "s/^\(HASH_TYPES\)=\$(.*/\1=\"${HASH_TYPES_PACKAGED}\"/" \ - -e "s/^\(HT\)=0/\1=${HT}/" \ + -e "s/^\(HT\)=0/\1=${HT_PACKAGED}/" \ -e "s/^\(MODE\)=0/\1=${MODE}/" \ -e "s/^\(ATTACK\)=0/\1=${ATTACK}/" \ ${OUTD}/test.sh