modified-batchcrack.sh
#1
Made some amiable changes to the batchcrack.sh script that I hope people find useful. It'll find if you need cuda or ocl automatically, also you can adjust most options when the script starts instead of having to edit the file.
Code:
#!/bin/bash

##
## conf
##

GPU_DEVICES=1,2
GPU_ACCEL=80
GPU_LOOPS=1024

echo -n "Output File [batchcrack.out]:"
read OUTPUT_FILE
OUTPUT_FILE=${OUTPUT_FILE:-batchcrack.out}

## Enter Hash Mode ##

echo -n "Hash Mode [0]:"
read HASH_MODE
HASH_MODE=${HASH_MODE:-0}

## Read in binary string to turn on or off attack mode ##

echo -n "Attack Mode (Mask, MaskRU, Combo, Hybrid, Brute) [10001]:"
read ATTACK_MODE
ATTACK_MODE=${ATTACK_MODE:-10001}
i=0
while [ $i -lt 6 ]
        do
                digit[${i}]=${ATTACK_MODE:${i}:1}
                ((i +=1))
        done

MASK=${digit[0]}
MASK_ROCKYOU=${digit[1]}
COMBINATOR=${digit[2]}
HYBRID=${digit[3]}
BRUTEFORCE=${digit[4]}

## Ask for dictionary only if needed ##

if [ $HYBRID -eq 1 -o $COMBINATOR -eq 1 ]
then
echo -n "Dictionary File [example.dict]:"
read DICT_FILE
DICT_FILE=${DICT_FILE:-example.dict}
fi

CYGPATH=/usr/bin/cygpath
GREP=grep
WC=wc
DATE=date
MV=mv
ECHO=echo
HEAD=head

##
## help
##

if [ $# -ne 1 ]
then
    echo "usage: $0 hashfile"

    exit -1
fi

##
## find some stuff...
##
function ocl_cuda()
{

    GPU=$($OCLHASHCAT 2>&1 >/dev/null)

}

if [ $OSTYPE == "cygwin" ]
then

    OCLHASHCAT="oclHashcat32.exe"

    ocl_cuda

    if [ -z "$GPU" ]
    then
            OCLHASHCAT="oclHashcat32.exe"
    else
            OCLHASHCAT="cudaHashcat32.exe"
    fi
    INPUT_FILE_OCLHC=$1

    INPUT_FILE=$($CYGPATH $1)
else
    IS_64_BIT=$($GREP ^flags /proc/cpuinfo | $GREP " lm " | $WC -c)

    if [ $IS_64_BIT -eq 0 ]
    then
        OCLHASHCAT="./oclHashcat32.bin"
        ocl_cuda
        if [ -z "$GPU" ]
        then
                OCLHASHCAT="./oclHashcat32.bin"
        else
                OCLHASHCAT="./cudaHashcat32.bin"
        fi
    else
        OCLHASHCAT="./oclHashcat64.bin"
        ocl_cuda
        if [ -z "$GPU" ]
        then
                OCLHASHCAT="./oclHashcat64.bin"
        else
                OCLHASHCAT="./cudaHashcat64.bin"
        fi
    fi

    INPUT_FILE_OCLHC=$1

    INPUT_FILE=$1
fi

##
## concat static
##

OCLFLAGS="\
--quiet \
--remove \
--output-file=$OUTPUT_FILE \
--hash-mode=$HASH_MODE \
--gpu-devices=$GPU_DEVICES \
--gpu-accel=$GPU_ACCEL \
--gpu-loops=$GPU_LOOPS"

##
## function
##

function run
{
    $ECHO -n '$' $OCLHASHCAT ... $@ ...

    START=$($DATE +%s)

    $OCLHASHCAT $OCLFLAGS $INPUT_FILE_OCLHC $@ || exit -1
#    $OCLHASHCAT $OCLFLAGS $INPUT_FILE_OCLHC $@ 2>/dev/null || exit -1

    STOP=$($DATE +%s)

    RUNTIME=$(($STOP - $START));

    LINES_INPUT_FILE=$(wc -l < $INPUT_FILE)

    LINES_OUTPUT_FILE=$(wc -l < $OUTPUT_FILE)

    $ECHO "" RT: $RUNTIME CR: $LINES_OUTPUT_FILE / $LINES_INPUT_FILE

    if [ $LINES_INPUT_FILE -eq 0 ]
    then
        $ECHO
        $ECHO All your hashes have been recovered, see $OUTPUT_FILE
        $ECHO

        $HEAD -10 $OUTPUT_FILE

        exit
    fi
}

##
## init output file
##

if [ -s $OUTPUT_FILE ]
then
    NOW=$($DATE +"%Y%m%d%H%M%S")

    $MV -f $OUTPUT_FILE $OUTPUT_FILE.$NOW
fi

$ECHO -n > $OUTPUT_FILE

##
## mask attacks
##

if [ $MASK -eq 1 ]
then
    $ECHO Running mask attacks

    run ?l?d?d?d ?d?d?d
    run ?l?l?d?d ?d?d?d
    run ?l?l?l?d ?d?d?d
    run ?l?l?l?l ?d?d?d
    run ?l?l?l?l ?l?d?d
    run ?d?l?l?l ?l?l?d
    run ?d?d?l?l ?l?l?l
    run ?d?d?d?l ?l?l?l
    run ?d?d?d?d ?l?l?l
    run ?d?d?d?d ?d?l?l
    run ?d?d?d?d ?d?d?l

    run ?l?d?d?d ?d?d?d?d
    run ?l?l?d?d ?d?d?d?d
    run ?l?l?l?d ?d?d?d?d
    run ?l?l?l?l ?d?d?d?d
    run ?d?d?l?l ?l?l?d?d
    run ?d?d?d?d ?l?l?l?l
    run ?d?d?d?d ?d?l?l?l
    run ?d?d?d?d ?d?d?l?l
    run ?d?d?d?d ?d?d?d?l

    run ?l?d?d?d ?d?d?d?d?d
    run ?l?l?d?d ?d?d?d?d?d
    run ?l?l?l?d ?d?d?d?d?d
    run ?d?d?d?d ?d?d?l?l?l
    run ?d?d?d?d ?d?d?d?l?l
    run ?d?d?d?d ?d?d?d?d?l

    run ?u?d?d?d ?d?d?d
    run ?u?l?d?d ?d?d?d
    run ?u?l?l?d ?d?d?d
    run ?u?l?l?l ?d?d?d
    run ?u?l?l?l ?l?d?d

    run ?u?d?d?d ?d?d?d?d
    run ?u?l?d?d ?d?d?d?d
    run ?u?l?l?d ?d?d?d?d
    run ?u?l?l?l ?d?d?d?d

    run ?u?d?d?d ?d?d?d?d?d
    run ?u?l?d?d ?d?d?d?d?d
    run ?u?l?l?d ?d?d?d?d?d

    $ECHO ""
fi

##
## mask_rockyou attacks
##

if [ $MASK_ROCKYOU -eq 1 ]
then
    $ECHO Running mask_rockyou attacks

    #run ?l?l?l?l   ?l?l?l?l
    run ?l?l?l?l   ?l?l
    run ?l?l?l?l   ?l?l?l
    #run ?l?l?l?l   ?l?l?l?l?l
    run ?d?d?d?d   ?d?d?d
    run ?d?d?d?d   ?d?d?d?d?d?d
    run ?d?d?d?d   ?d?d?d?d
    #run ?l?l?l?l   ?l?l?l?l?l?l
    run ?d?d?d     ?d?d?d
    run ?d?d?d?d?d ?d?d?d?d
    run ?l?l?l?l   ?l?d?d
    #run ?l?l?l?l   ?l?l?l?d?d
    #run ?l?l?l?l   ?l?l?l?l?l?l?l
    run ?l?l?l?l   ?d?d?d?d
    run ?l?l?l     ?l?d?d
    #run ?l?l?l?l   ?l?l?l?l?d?d
    run ?l?l?l?l   ?l?l?d
    #run ?l?l?l?l   ?l?l?l?d
    run ?l?l?l?d   ?d?d?d
    run ?l?l?l?l   ?l?d?d?d?d
    run ?l?l?l?l   ?l?l?d?d?d?d
    #run ?l?l?l?l   ?l?l?l?l?d
    run ?l?l?l?l   ?l?d?d?d
    run ?l?l?l?l   ?l?l?d?d?d
    #run ?l?l?l?l   ?l?l?l?l?l?d
    run ?l?l?l     ?l?l
    run ?l?l?l?l   ?l?d
    run ?l?l?l?l   ?d?d?d
    run ?d?d?d?d?d ?d?d?d?d?d?d
    run ?l?l?d     ?d?d?d
    run ?l?l?l     ?d?d?d
    #run ?l?l?l?l   ?l?l?l?d?d?d
    #run ?l?l?l?l   ?l?l?l?l?l?d?d
    #run ?l?l?l?l   ?l?l?l?d?d?d?d
    run ?s?s?s?s   ?s?s
    run ?l?d?d?d   ?d?d?d
    run ?l?l?d?d   ?d?d?d?d
    run ?s?s?s?s   ?s?s?s
    run ?d?d?d     ?d?d
    run ?l?l?l?d   ?d?d?d?d?d
    run ?s?s?s?s   ?s?s?s?s
    #run ?l?l?l?l   ?l?l?l?l?d?d?d
    run ?d?d?d?d   ?d?d?l
    run ?l?l?l?d   ?d?d?d?d
    run ?l?l?l?l   ?d?d?d?d?d?d
    run ?l?l?d?d   ?d?d?d
    run ?s?s?s?s   ?s?s?d?d
    #run ?s?s?s?s   ?s?s?s?s?s
    run ?d?d?d?d   ?l?l
    run ?l?d?d?d   ?d?d?d?d
    run ?s?l?l?l   ?l?l?d?d
    run ?d?d?d?d   ?l?l?l?l
    run ?s?s?s?s   ?s?d?d
    run ?l?l?l?l   ?l?l?s
    #run ?s?s?s?s   ?s?s?s?s?s?s
    run ?d?d?d?d   ?d?d?l?l
    run ?d?d?d?d   ?l?l?l
    run ?s?s?s?s   ?d?d
    #run ?d?l?l?l   ?l?l?l?l
    run ?d?l?l?l   ?l?l?l
    run ?l?l?l?l   ?d?d?d?d?d
    run ?d?d?d?d   ?d?d?d?l
    run ?s?l?l?l   ?l?l
    run ?s?l?l?l   ?l?l?l
    #run ?l?l?l?l   ?l?l?l?s
    run ?l?l?l?l   ?l?d?d?d?d?d
    run ?d?d?l?l   ?l?l?l?l
    run ?s?s?s?s   ?s?s?d
    run ?s?s?s?s   ?s?s?s?d?d
    #run ?l?l?l?l   ?l?l?l?l?l?l?d
    run ?l?l?l?l   ?l?d?d?d?d?d?d
    #run ?s?l?l?l   ?l?l?l?l
    run ?l?d?d?d   ?d?d
    #run ?l?l?l?l   ?l?l?l?l?s
    run ?l?l?l     ?d?d
    run ?s?l?l?l   ?l?d?d
    #run ?d?l?l?l   ?l?l?l?l?l
    run ?d?d?d?d?l ?l?l?l?l
    #run ?s?l?l?l   ?l?l?l?d?d
    run ?s?s?s     ?s?s
    #run ?s?s?s?s   ?s?s?s?d
    run ?l?d?d?d?d ?d?d?d?d
    run ?d?d?l?l   ?l?l?l
    run ?l?l?l     ?l?d
    #run ?l?l?l?l?l ?l?l?l?l?s
    run ?d?l?l?l   ?l?l
    run ?d?d?l?l   ?l?l
    run ?s?l?l?l   ?l?l?l?d
    #run ?d?l?l?l   ?l?l?l?l?l?l
    run ?l?l?l?l   ?l?s
    #run ?s?s?s?s   ?s?s?s?s?s?s?s
    #run ?s?s?s?s   ?s?s?s?s?d?d
    run ?s?s?s?s   ?s?d
    #run ?d?d?d?d   ?d?d?l?l?l
    #run ?l?l?l?l   ?d?l?l?l?l
    run ?d?d?d?l   ?l?l
    run ?d?d?d?l?l ?l?l?l
    #run ?l?l?l?d   ?l?l?l?l
    run ?s?s?s?s   ?d?d?d?d

    $ECHO ""
fi

##
## combinator attacks
##

if [ $COMBINATOR -eq 1 ]
then
    $ECHO Running combinator attacks

    run $DICT_FILE $DICT_FILE
    run $DICT_FILE $DICT_FILE --rule-left='l$-'

    $ECHO ""
fi

##
## hybrid attacks
##

if [ $HYBRID -eq 1 ]
then
    $ECHO Running hybrid attacks

    run -1 ?l?d?s?u $DICT_FILE ?1
    run -1 ?l?d?s?u $DICT_FILE ?1?1
    run -1 ?l?d     $DICT_FILE ?1?1?1
    run -1 ?d       $DICT_FILE ?1?1?1?1

    run -1 ?l?d?s?u ?1       $DICT_FILE
    run -1 ?l?d?s?u ?1?1     $DICT_FILE
    run -1 ?l?d     ?1?1?1   $DICT_FILE
    run -1 ?d       ?1?1?1?1 $DICT_FILE

    $ECHO ""
fi

##
## bruteforce attacks
##

if [ $BRUTEFORCE -eq 1 ]
then
    $ECHO Running brute-force attacks

    run -1 ?l?d?u?s ?1       ?1
    run -1 ?l?d?u?s ?1?1     ?1
    run -1 ?l?d?u?s ?1?1     ?1?1
    run -1 ?l?d?u?s ?1?1?1   ?1?1
    run -1 ?l?d?u   ?1?1?1   ?1?1?1
    run -1 ?l?d?s   ?1?1?1   ?1?1?1

    run ?d?d?d?d ?d?d?d
    run ?d?d?d?d ?d?d?d?d
    run ?d?d?d?d ?d?d?d?d?d
    run ?d?d?d?d ?d?d?d?d?d?d

    run ?l?l?l?l ?l?l?l
    run ?l?l?l?l ?l?l?l?l

    $ECHO ""
fi
#2
this is a very cool contribution. much thanks on that. have you tested it on cygwin?
#3
Errr, no it doesn't work in cygwin. Cygwin doesn't throw the error that the script tests for. I'll have to look into another way of identifying the video card in that environment.