#!/bin/bash

#.---------------------------------------------------------------------.
#|                   :   Giga password generator    :                   |
#|  .................:          v1.3                :.................  |
#|  :                :..............................:                :  |
#|  :                                                                :  |
#|  :               A simple way to generate wordlists               :  |
#|  :                                                                :  |
#|  :           Developped originally for Backtrack 3 Final          :  |
#|  :                                                                :  |
#|  :       Brought to you by M1ck3y & M1r4g3                        :  |
#|  :               & modded by Tite-Live                            :  |
#|  :                                               .................:  |
#|  :                                               : Crunch powered :  |
#|  :...............................................:................:  |
#|                     http://www.crack-wpa.fr                          |
#\`----------------------------------------------------------------------'


SCRIPTVER="1.3"
CRUNCH="/pentest/password/crunch"
if [[ $USER = "root" ]]
then
	STUPIDWAY="/root/"
else
	STUPIDWAY="/home/$USER/"
fi

PARTS=
DELMODE=
TMPMODE=
CHOOSENFOLDER=

if [ ! -e $CRUNCH ]
then
	CRUNCH="/usr/bin/crunch"
fi


# .-"-.     .-"-.     .-"-.     .-"-.     .-"-.     .-"-.
# .    "-.-"     "-.-"     "-.-"     "-.-"     "-.-"     "-.
# .                      Trap & Escape sequences            " 
# .-"-.     .-"-.     .-"-.     .-"-.     .-"-.     .-"-.    "
#      "-.-"     "-.-"     "-.-"     "-.-"     "-.-"     "-.-"


trap "echo -e '\n\E[2K Ctrl+C pressed... Stopping Crunch... Bye !' ; killall crunch > /dev/null 2>&1 ; exit 1 > /dev/null 2>&1" SIGINT
trap "exit 0" EXIT

E_BOLD="\E[1m"
E_NORMAL="\E[0m"
E_BLANK="\n                                                           \n"

# .-"-.     .-"-.     .-"-.     .-"-.     .-"-.     .-"-.
# .    "-.-"     "-.-"     "-.-"     "-.-"     "-.-"     "-.
# .                      Arguments ?                        " 
# .-"-.     .-"-.     .-"-.     .-"-.     .-"-.     .-"-.    "
#      "-.-"     "-.-"     "-.-"     "-.-"     "-.-"     "-.-"

while getopts :p:adhtf: option
do
 case $option in
  a)
   echo "Aircrack mode is not implemented yet :/ Sorry !"  >&2
   exit 1
   ;;
   
   d)
   echo "'Delete' mode enabled."  >&2
   DELMODE=1
   ;;
   
     f)
if [[ ! $TMPMODE ]]
then
	  if [[ `echo $OPTARG | grep -e '^/.*/$'` ]]
	   then
	   	CHOOSENFOLDER="$OPTARG"
	   	if [[ -e $CHOOSENFOLDER ]]
	   	then
	   		echo -e "Option 'folder' enabled - Choosen folder : $E_BOLD$CHOOSENFOLDER$E_NORMAL" >&2
	   	else
	   		echo -e "This folder doesnt not exist.. '$E_BOLD$CHOOSENFOLDER$E_NORMAL'" >&2
	   		exit 1
	   	fi
	  else
	  	echo -e "The folder path must have a "$E_BOLD"/"$E_NORMAL" before and after !"
	  	echo -e "Example : bash $0 -f "$E_BOLD"/"$E_NORMAL"home/cow/wordlist"$E_BOLD"/"$E_NORMAL""
	  	exit 1
	  fi
else
	echo -e "You cannot choose 'tmp mode' ($E_BOLD-t$E_NORMAL) and select another folder with $E_BOLD-f $OPTARG$E_NORMAL !"
	exit 1
fi

   ;;
   
  p)
  if [[ `echo $OPTARG | grep '[0-9]*M'` ]]
   then
   	PARTS=1
   	PARTSIZE="$OPTARG"
   	PARTSIZENUMBER=`echo $PARTSIZE | sed 's/M//'`
   	echo "Option parts enabled - Choosen size : $PARTSIZE" >&2
  else
  	VARMEGA=`echo $OPTARG | grep -o '[0-9]*'`
  	echo "Argument of -p must be in Mega !"
  	echo -e "Example : bash $0 -p "$VARMEGA"M"
  	exit 1
  fi
   ;;
  
  :)
   echo "Option -$OPTARG requires an argument." >&2
   exit 1
   ;;
  
  h)
    GIGAFILE=`echo $0 | sed 's/\.\///'`
   	echo -e "		\E[1;31mGiga password generator"$E_NORMAL"
			v1.3
	 ~ A simple way to generate wordlists ~
	
	"$E_BOLD"Usage"$E_NORMAL" : ./$GIGAFILE [OPTIONS]
	   or : bash $GIGAFILE [OPTIONS]
	
	"$E_BOLD"Options"$E_NORMAL" : 
	-a              (Aircrack)   Send the Dictionary to Aircrack on-the-fly [NOT IMPLEMENTED]
	-d              (Delete)     If the file already exists, delete it.
	-f [PATH]       (Folder)     Choose a special folder.
	-p [Size][M]    (Parts)      Split the dictionary file in X parts of X Mega and delete the original dictionary.
	  $E_BOLD/!\ Parts option doesn't work with the modes 21 (Startmask), 22 (Endmask), 23 (Startmask+Endmask).$E_NORMAL
	-t              (Temp)       Save dictionary in /tmp/
	-h              (Help)       Shows this help and quit
		
		
	"$E_BOLD"Examples"$E_NORMAL" :
Split :	./$GIGAFILE -p 500M
		bash $0 -p 1024M
Folder :  bash $GIGAFILE -f /home/cow/wordlist/

You can choose several options too :
		bash $GIGAFILE -d -f /home/cow/Desktop/ -p 500M" >&2
	exit 0
   ;;
   
   t)
if [[ ! $CHOOSENFOLDER ]]
then
   echo "'/tmp/' mode enabled."  >&2
   TMPMODE=1
else
	echo -e "You cannot choose 'tmp mode' ($E_BOLD-t$E_NORMAL) and select another folder with $E_BOLD-f $CHOOSENFOLDER$E_NORMAL !"
	exit 1
fi
   ;;

  \?)
     echo "Invalid option : -$OPTARG" >&2
     exit 1
    ;;
 esac
done


if [[ $TMPMODE ]]
then	STUPIDWAY="/tmp/"
elif [[ $CHOOSENFOLDER ]]
then	STUPIDWAY="$CHOOSENFOLDER"
elif [[ $USER = "root" ]]
then	STUPIDWAY="/root/"
else
	STUPIDWAY="/home/$USER/"
fi

# .-"-.     .-"-.     .-"-.     .-"-.     .-"-.     .-"-.
# .    "-.-"     "-.-"     "-.-"     "-.-"     "-.-"     "-.
# .                      Fake variables                     " 
# .-"-.     .-"-.     .-"-.     .-"-.     .-"-.     .-"-.    "
#      "-.-"     "-.-"     "-.-"     "-.-"     "-.-"     "-.-"

function SAYWHOAMI {

  case $1 in
    1)
echo -e ".----------------------------------------------------------------------.
|                   :   \E[1;31mGiga password generator"$E_NORMAL"    :                    |
|                   :          v1.3                :                    |
|                   -----> Parts mode enabled <-----                    |
|   * Steps :                                                           |
| "$E_BOLD"(1/3) \E[4mChoose Crunch options"$E_NORMAL"                                           |
| (2/3) Generate dictionary                                             |
| (3/3) Split dictionary in some parts and delete the original file     |
\`-----------------------------------------------------------------------'"
	;;
	
    2)
echo -e "\E[s\E[1;1H.----------------------------------------------------------------------.
|                   :   \E[1;31mGiga password generator"$E_NORMAL"    :                    |
|                   :          v1.3                :                    |
|                   -----> Parts mode enabled <-----                    |
|   * Steps :                                                           |
| (1/3) Choose Crunch options                               \E[1;32m[OK]"$E_NORMAL"        |
| "$E_BOLD"(2/3) \E[4mGenerate dictionary"$E_NORMAL"                                             |
| (3/3) Split dictionary in some parts and delete the original file     |
\`-----------------------------------------------------------------------'\E[u"
      ;;
      
      
    3)  # Fait un peu plus que juste écrire un message, mais bon...
	echo -e "\E[s\E[1;1H.----------------------------------------------------------------------.
|                   :   \E[1;31mGiga password generator"$E_NORMAL"    :                    |
|                   :          v1.3                :                    |
|                   -----> Parts mode enabled <-----                    |
|   * Steps :                                                           |
| (1/3) Choose Crunch options                               \E[1;32m[OK]"$E_NORMAL"        |
| (2/3) Generate dictionary                                 \E[1;32m[OK]"$E_NORMAL"        |
| "$E_BOLD"(3/3) \E[4mSplit dictionary in some parts and delete the original file"$E_NORMAL"     |
\`-----------------------------------------------------------------------'\E[u\E[1G\E[1FDictionary file successfully generated.
\E[0KNow it will be splitted in parts of $PARTSIZE : \E[1E\E[0K\E[1F"
	cd $STUPIDWAY
	split -d -a 3 -b "$PARTSIZENUMBER"M --verbose $NAMEOVFILE "$NAMEOVFILE".split.
	echo -e ""$E_BOLD" Splitting done... Delete the original file...$E_NORMAL"
	rm $NAMEOVFILE
	echo -e "Original file deleted !"
	
	echo -e " Everything is done... 
Now you have the parts of the original Dictionary, \E[1;31m"$NAMEOVFILE".split.XXX"$E_NORMAL" in $STUPIDWAY :)"

      ;;
      
      
    *)
echo -e ".---------------------------------------------------------------------.
|                   :   \E[1;31mGiga password generator"$E_NORMAL"    :                   |
|                   :          v1.3                :                   |
\`----------------------------------------------------------------------'"
      ;;
  esac

}

function FUNCTABLE {
case $CLANG in
1)
echo " ----------------------------------------------
 | Function                        | Active   |
 |---------------------------------+----------|
 | Numbers                         |    $1     |
 | Lowercase letters               |    $2     |
 | Uppercase letters               |    $3     |
 | Hexadecimal                     |    $4     |
 | Hexadecimal for WPA Livebox     |    $5     |
 | Startblock                      |    $6     |
 | Customized charset              |    $7     |
 | Mask                            |    $8     |
 | Startmask                       |    $9     |
 | Endmask                         |    ${10}     |
 ----------------------------------+-----------"
;;

2)
echo " ----------------------------------------------
 | Fonction                        | Active   |
 |---------------------------------+----------|
 | Chiffres                        |    $1     |
 | Minuscules                      |    $2     |
 | Majuscules                      |    $3     |
 | Hexadecimal                     |    $4     |
 | Hexadecimal special Livebox WPA |    $5     |
 | Startblock                      |    $6     |
 | Charset perso                   |    $7     |
 | Mask                            |    $8     |
 | Startmask                       |    $9     |
 | Endmask                         |    ${10}     |
 ----------------------------------+-----------"
;;
esac
}


# .-"-.     .-"-.     .-"-.     .-"-.     .-"-.     .-"-.
# .    "-.-"     "-.-"     "-.-"     "-.-"     "-.-"     "-.
# .                      Fonctions                          " 
# .-"-.     .-"-.     .-"-.     .-"-.     .-"-.     .-"-.    "
#      "-.-"     "-.-"     "-.-"     "-.-"     "-.-"     "-.-"


#function ROUNDA {
#if [[ ${1:1:1} == "" ]] ; then
#echo "$1"
#else
#if [ ${1:1:1} -gt 5 ] ; then
#first=$(( ${1:0:1} + 1 ))
#else
#first=${1:0:1}
#fi
#echo -n $first
#l="`echo $1 | wc -c`"
#for i in `seq 2 $(($l-1))`; do echo -n "0" ; done
#fi
#}


function ZIQUESTIONS {
case $1 in
1)
# Simple questions
echo 
echo ${SCRIPTLANG[2]}
read -p "(*) ${SCRIPTLANG[3]}" MINLENGTH
read -p "(*) ${SCRIPTLANG[4]}" MAXLENGTH
read -p "(*) ${SCRIPTLANG[5]}" NAMEOVFILE
echo
echo ${SCRIPTLANG[6]}
;;

2)
# Questions + Startblock
echo 
echo ${SCRIPTLANG[2]}
read -p "(*) ${SCRIPTLANG[3]}" MINLENGTH
read -p "(*) ${SCRIPTLANG[4]}" MAXLENGTH
read -p "(*) ${SCRIPTLANG[5]}" NAMEOVFILE
read -p "(*) ${SCRIPTLANG[9]}" FIRSTWORD
echo
echo ${SCRIPTLANG[6]}
;;
esac

}


function SPLITCAL {
NUMBEROFPARTS=$(( $DAFILESIZE / $PARTSIZENUMBER ))
PARTMSG="\n After splitting, it will create $NUMBEROFPARTS file(s) of $PARTSIZE (and often another file with the rest)"
}

function WAITME {
PROC=`pidof crunch`
if [[ $PROC != "" ]]
then
	if [[ ! $PARTS ]]
	then
		while [ -d /proc/$PROC ];do
		DAFILESIZE=`du -h $STUPIDWAY$NAMEOVFILE | awk '{print $1}'`
		echo -en " ${SCRIPTLANG[8]} /  "$E_BOLD"$NAMEOVFILE : $DAFILESIZE"$E_NORMAL" \033[1G" ; sleep .07
		echo -en " ${SCRIPTLANG[8]} -  "$E_BOLD"$NAMEOVFILE : $DAFILESIZE"$E_NORMAL" \033[1G" ; sleep .07
		echo -en " ${SCRIPTLANG[8]} \  "$E_BOLD"$NAMEOVFILE : $DAFILESIZE"$E_NORMAL" \033[1G" ; sleep .07
		echo -en " ${SCRIPTLANG[8]} |  "$E_BOLD"$NAMEOVFILE : $DAFILESIZE"$E_NORMAL" \033[1G" ; sleep .07
		done
		
	elif [[ $PARTS ]]
	then
		SAYWHOAMI 2
		while [ -d /proc/$PROC ];do
		DAFILESIZE=`du -B M $STUPIDWAY$NAMEOVFILE | awk '{print $1}' | sed 's/M//'`
		SPLITCAL
		echo -en " ${SCRIPTLANG[8]} /  "$E_BOLD"$NAMEOVFILE : $DAFILESIZE M"$E_NORMAL" $PARTMSG \033[1G \033[1F" ; sleep .07
		echo -en " ${SCRIPTLANG[8]} -  "$E_BOLD"$NAMEOVFILE : $DAFILESIZE M"$E_NORMAL" $PARTMSG \033[1G \033[1F" ; sleep .07
		echo -en " ${SCRIPTLANG[8]} \  "$E_BOLD"$NAMEOVFILE : $DAFILESIZE M"$E_NORMAL" $PARTMSG \033[1G \033[1F" ; sleep .07
		echo -en " ${SCRIPTLANG[8]} |  "$E_BOLD"$NAMEOVFILE : $DAFILESIZE M"$E_NORMAL" $PARTMSG \033[1G \033[1F" ; sleep .07
		done
		
		SAYWHOAMI 3
	fi
fi
}

function COWCANDANCE {
sleep 0.1
while [[ `fuser $STUPIDWAY$NAMEOVFILE 2>&1` ]];do
	DAFILESIZE=`du -h $STUPIDWAY$NAMEOVFILE | awk '{print $1}'`
	echo -en "\E[s\E[2K ${SCRIPTLANG[8]} "$E_BOLD"$NAMEOVFILE : $DAFILESIZE"$E_NORMAL"
	         (__)
	         (oo)
	  /-------\/
	 / |     ||    
	*  ||----||     
	   ~~    ~~    \E[u" ; sleep .07
	echo -en "\E[s\E[2K ${SCRIPTLANG[8]} "$E_BOLD"$NAMEOVFILE : $DAFILESIZE"$E_NORMAL"
	         (__)
	         (oo)
	  /-------\/
	 / /     //    
	* //----//    
	  ~~    ~~    \E[u" ; sleep .07
	echo -en "\E[s\E[2K ${SCRIPTLANG[8]} "$E_BOLD"$NAMEOVFILE : $DAFILESIZE"$E_NORMAL"
	         (__)
	         (oo)
	  /-------\/
	 / \     \\    
	*   \\----\\    
	    ~~    ~~    \E[u" ; sleep .07
done
}

function TESTIFFILEEXISTANDTHEN {
CRUNCHCOMMAND=$1
if [[ ! -f $STUPIDWAY$NAMEOVFILE ]]
then
	$CRUNCHCOMMAND > $STUPIDWAY$NAMEOVFILE & WAITME
	if [[ ! $PARTS ]]; then echo -en "\E[1F${SCRIPTLANG[71]}$NAMEOVFILE${SCRIPTLANG[72]}$E_BLANK"; fi
	
elif [[ -f $STUPIDWAY$NAMEOVFILE && $DELMODE ]] 
then
	echo "Delete the old file..."
	rm $STUPIDWAY$NAMEOVFILE
	$CRUNCHCOMMAND > $STUPIDWAY$NAMEOVFILE & WAITME
	if [[ ! $PARTS ]]; then echo -en "\E[1F${SCRIPTLANG[71]}$NAMEOVFILE${SCRIPTLANG[72]}$E_BLANK"; fi
	
elif [[ -f $STUPIDWAY$NAMEOVFILE && ! $DELMODE ]]
then
	echo "This file already exist... Please choose another name or restart the script with the -d (delete) option."
	read -p "(*) ${SCRIPTLANG[5]}" NAMEOVFILE
	TESTIFFILEEXISTANDTHEN "$CRUNCHCOMMAND"
fi

}


# .-"-.     .-"-.     .-"-.     .-"-.     .-"-.     .-"-.
# .    "-.-"     "-.-"     "-.-"     "-.-"     "-.-"     "-.
# .                      Languages                          " 
# .-"-.     .-"-.     .-"-.     .-"-.     .-"-.     .-"-.    "
#      "-.-"     "-.-"     "-.-"     "-.-"     "-.-"     "-.-"

function CHOOSELANG {

clear

echo -e " .---------------------------------------------------------------------.
|                   :   \E[1;31mGiga password generator"$E_NORMAL"    :                   |
|  .................:          v1.3                :.................  |
|  :                :..............................:                :  |
|  :                                                                :  |
|  :               A simple way to generate wordlists               :  |
|  :                                                                :  |
|  :           Developped originally for Backtrack 3 Final          :  |
|  :                                                                :  |
|  :       Brought to you by M1ck3y & M1r4g3                        :  |
|  :               & modded by Tite-Live                            :  |
|  :                                               .................:  |
|  :                                               : Crunch powered :  |
|  :...............................................:................:  |
|                     \E[1;34mhttp://www.crack-wpa.fr\E[0;39m                          |
\`----------------------------------------------------------------------'"

echo " ___________________________________________________________
|================ Choose a language ========================|
|  1) English                                               |
|  2) French                                                |
|___________________________________________________________|
"
read -p "[---> " CLANG

case $CLANG in
1)
SCRIPTLANG[0]="\n
_____________________________________________________________\n
{ }________The Dictionary will be made of :_________________}\n
|                                                          \n
| 1) Numbers\n
| 2) Numbers + startblock choice\n
| 3) Uppercase letters\n
| 4) Uppercase letters +  startblock choice\n
| 5) Lowercase letters\n
| 6) Lowercase letters + startblock choice\n
| 7) Numbers + Uppercase letters\n
| 8) Numbers + Uppercase letters + startblock choice\n
| 9) Numbers + Lowercase letters\n
| 10) Numbers + Lowercase letters + startblock choice\n
| 11) Numbers + Uppercase letters + Lowercase letters\n
| 12) Numbers + Uppercase letters + Lowercase letters + startblock choice\n
| 13) Uppercase letters + Lowercase letters\n
| 14) Uppercase letters + Lowercase letters + startblock choice\n
| 15) Hexadecimal\n
| 16) Hexadecimal + startblock choice\n
| 17) Hexadecimal for WPA Livebox\n
| 18) Hexadecimal for WPA Livebox + startblock choice\n
| 19) Customized charset\n
| 20) Customized charset + startblock choice\n
| 21) Only Mask Startmask\n
| 22) Only Mask Endmask\n
| 23) Mask Startmask + Endmask\n
|____________________________________________________________\n
{_}__________________________________________________________}\n
"

SCRIPTLANG[1]="Your choice ? "
SCRIPTLANG[2]="Please enter the following informations :"
SCRIPTLANG[3]="Minimum length of passwords : "
SCRIPTLANG[4]="Maximum length of passwords : "
SCRIPTLANG[5]="Filename : "
SCRIPTLANG[6]="File being created .."
SCRIPTLANG[71]="Congratulations ! Your file '"
SCRIPTLANG[72]="' has been successfull created !"
SCRIPTLANG[8]="Processing..."
SCRIPTLANG[9]="Startblock - first password of the file : "
SCRIPTLANG[10]="Charset : "
SCRIPTLANG[11]="Input file : "
SCRIPTLANG[12]="Output file : "
SCRIPTLANG[13]="Your mask before each line : "
SCRIPTLANG[14]="Your mask after each line : "
;;

2)
SCRIPTLANG[0]="\n
_____________________________________________________________\n
{ }________Le dictionnaire sera composé de :_________________}\n
|                                                          \n
| 1) Chiffres\n
| 2) Chiffres + choix startblock\n
| 3) Majuscules\n
| 4) Majuscules +  choix startblock\n
| 5) Minuscules\n
| 6) Minuscules + choix startblock\n
| 7) Chiffres + Majuscules\n
| 8) Chiffres + Majuscules + choix startblock\n
| 9) Chiffres + Minuscules\n
| 10) Chiffres + Minuscules + choix startblock\n
| 11) Chiffres + Majuscules + Minuscules\n
| 12) Chiffres + Majuscules + Minuscules + choix startblock\n
| 13) Majuscules + Minuscules\n
| 14) Majuscules + Minuscules + choix startblock\n
| 15) Hexadecimal\n
| 16) Hexadecimal + choix startblock\n
| 17) Hexadecimal spécial Livebox WPA\n
| 18) Hexadecimal spécial Livebox WPA + choix startblock\n
| 19) Charset personnalisé\n
| 20) Charset personnalisé + choix startblock\n
| 21) Mask Startmask seulement\n
| 22) Mask Endmask seulement\n
| 23) Mask Startmask + Endmask\n
|____________________________________________________________\n
{_}__________________________________________________________}\n
"

SCRIPTLANG[1]="Votre choix ? "
SCRIPTLANG[2]="Veuillez entrer les informations suivantes : "
SCRIPTLANG[3]="Longueur minimale des mots de passe : "
SCRIPTLANG[4]="Longueur maximale des mots de passe : "
SCRIPTLANG[5]="Nom du fichier de sortie : "
SCRIPTLANG[6]="Fichier dictionnaire en cours de création..."
SCRIPTLANG[71]="Félicitations ! Votre fichier '"
SCRIPTLANG[72]="' a bien été créé !"
SCRIPTLANG[8]="En cours de traitement..."
SCRIPTLANG[9]="Startblock - premier mot de passe du fichier : "
SCRIPTLANG[10]="Charset - votre jeu de caractères personnalisé : "
SCRIPTLANG[11]="Fichier d'entrée : "
SCRIPTLANG[12]="Fichier de sortie : "
SCRIPTLANG[13]="Votre mask avant chaque ligne du dico : "
SCRIPTLANG[14]="Votre mask après chaque ligne du dico : "
;;

	*)
	echo "$CLANG is not a valid option... Please re-try in two seconds..."
	sleep 2
	CHOOSELANG
	;;
	
esac

WTMODE

}


function WTMODE {
clear

if [[ $PARTS ]]
then
	SAYWHOAMI 1
else
	SAYWHOAMI
fi

echo -e ${SCRIPTLANG[0]}
read -p "${SCRIPTLANG[1]}" WTCHOICE

LAUNCHMODE
}

function LAUNCHMODE {
clear

if [[ $PARTS ]]
then
	SAYWHOAMI 1
else
	SAYWHOAMI
fi


case $WTCHOICE in 

#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X        Numbers                                   X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
1)
echo "Mode $WTCHOICE : "
FUNCTABLE "X" " " " " " " " " " " " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 1
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH 0123456789 -stdout:63"

;;


#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X        Numbers + Startblock                      X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
2)
echo "Mode $WTCHOICE : "
FUNCTABLE "X" " " " " " " " " "X" " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 2
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH 0123456789 -s $FIRSTWORD -stdout:63"

;;


#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X        Uppercase letters                         X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
3)
echo "Mode $WTCHOICE : "
FUNCTABLE " " " " "X" " " " " " " " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 1
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH ABCDEFGHIJKLMNOPQRSTUVWXYZ -stdout:63"

;;


#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X        Uppercase + Startblock                    X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
4)
echo "Mode $WTCHOICE : "
FUNCTABLE " " " " "X" " " " " "X" " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 2
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH ABCDEFGHIJKLMNOPQRSTUVWXYZ -s $FIRSTWORD -stdout:63"

;; 


#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X        Lowercase letters                         X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
5)
echo "Mode $WTCHOICE : "
FUNCTABLE " " "X" " " " " " " " " " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 1
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH abcdefghijklmnopqrstuvwxyz -stdout:63"

;;



#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X        Lowercase + Startblock                    X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
6)
echo "Mode $WTCHOICE : "
FUNCTABLE " " "X" " " " " " " "X" " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 2
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH abcdefghijklmnopqrstuvwxyz -s $FIRSTWORD -stdout:63"

;;


#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X        Numbers + Uppercase                       X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
7)
echo "Mode $WTCHOICE : "
FUNCTABLE "X" " " "X" " " " " " " " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 1
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ -stdout:63"

;;



#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X        Numbers + Uppercase + Startblock          X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
8)
echo "Mode $WTCHOICE : "
FUNCTABLE "X" " " "X" " " " " "X" " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 2
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ -s $FIRSTWORD -stdout:63"

;;


#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X        Numbers + Lowercase                       X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
9)
echo "Mode $WTCHOICE : "
FUNCTABLE "X" " " "X" " " " " " " " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 1
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH 0123456789abcdefghijklmnopqrstuvwxyz -stdout:63"

;;


#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X        Numbers + Lowercase + Startblock          X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
10)
echo "Mode $WTCHOICE : "
FUNCTABLE "X" " " "X" " " " " "X" " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 2
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH 0123456789abcdefghijklmnopqrstuvwxyz -s $FIRSTWORD -stdout:63"

;;



#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X        Numbers + Lowercase + Uppercase           X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
11)
echo "Mode $WTCHOICE : "
FUNCTABLE "X" "X" "X" " " " " " " " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 1
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -stdout:63"

;;



#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X   Numbers + Lowercase + Uppercase + Startblock   X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
12)
echo "Mode $WTCHOICE : "
FUNCTABLE "X" "X" "X" " " " " "X" " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 2
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -s $FIRSTWORD -stdout:63"

;;


#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X             Lowercase + Uppercase                X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
13)
echo "Mode $WTCHOICE : "
FUNCTABLE " " "X" "X" " " " " " " " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 1
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -stdout:63"

;;



#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X        Lowercase + Uppercase + Startblock        X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
14)
echo "Mode $WTCHOICE : "
FUNCTABLE " " "X" "X" " " " " "X" " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 2
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -s $FIRSTWORD -stdout:63"

;;


#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X                  Hexadecimal                     X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
15)
echo "Mode $WTCHOICE : "
FUNCTABLE " " " " " " "X" " " " " " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 1
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH 0123456789ABCDEF -stdout:63"

;;


#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X                  Hexadecimal + Startblock        X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
16)
echo "Mode $WTCHOICE : "
FUNCTABLE " " " " " " "X" " " "X" " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

ZIQUESTIONS 2
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH 0123456789ABCDEF -s $FIRSTWORD -stdout:63"

;;



#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X                  Hexadecimal Livebox             X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
17)
echo "Mode $WTCHOICE : "
FUNCTABLE " " " " " " " " "X" " " " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

echo 
echo ${SCRIPTLANG[2]}
read -p "(*) ${SCRIPTLANG[5]}" NAMEOVFILE
echo
echo ${SCRIPTLANG[6]}
TESTIFFILEEXISTANDTHEN "$CRUNCH 26 26 0123456789ABCDEF -stdout:63"

;;



#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X       Hexadecimal Livebox + Startblock           X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
18)
echo "Mode $WTCHOICE : "
FUNCTABLE " " " " " " " " "X" "X" " " " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

echo 
echo ${SCRIPTLANG[2]}
read -p "(*) ${SCRIPTLANG[5]}" NAMEOVFILE
read -p "(*) ${SCRIPTLANG[9]}" FIRSTWORD
echo
echo ${SCRIPTLANG[6]}
TESTIFFILEEXISTANDTHEN "$CRUNCH 26 26 0123456789ABCDEF -s $FIRSTWORD -stdout:63"

;;



#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X           Charset perso                          X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
19)
echo "Mode $WTCHOICE : "
FUNCTABLE " " " " " " " " " " " " "X" " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

echo 
echo ${SCRIPTLANG[2]}
read -p "(*) ${SCRIPTLANG[3]}" MINLENGTH
read -p "(*) ${SCRIPTLANG[4]}" MAXLENGTH
read -p "(*) ${SCRIPTLANG[5]}" NAMEOVFILE
read -p "(*) ${SCRIPTLANG[10]}" DACHARSET
echo
echo ${SCRIPTLANG[6]}
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH $DACHARSET -stdout:63"

;;


#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X           Charset perso + Startblock             X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
20)
echo "Mode $WTCHOICE : "
FUNCTABLE " " " " " " " " " " "X" "X" " " " " " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

echo 
echo ${SCRIPTLANG[2]}
read -p "(*) ${SCRIPTLANG[3]}" MINLENGTH
read -p "(*) ${SCRIPTLANG[4]}" MAXLENGTH
read -p "(*) ${SCRIPTLANG[5]}" NAMEOVFILE
read -p "(*) ${SCRIPTLANG[9]}" FIRSTWORD
read -p "(*) ${SCRIPTLANG[10]}" DACHARSET
echo
echo ${SCRIPTLANG[6]}
TESTIFFILEEXISTANDTHEN "$CRUNCH $MINLENGTH $MAXLENGTH $DACHARSET -s $FIRSTWORD -stdout:63"

;;



#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X           Mask startmask                         X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
21)
if [[ $PARTS ]]; then echo "'Parts' option doesn't work with the modes 21, 22 and 23."; sleep 2; WTMODE; fi

echo "Mode $WTCHOICE : "
FUNCTABLE " " " " " " " " " " " " " " "X" "X" " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

echo 
echo ${SCRIPTLANG[2]}
read -p "(*) ${SCRIPTLANG[11]}" INPUTFILE
read -p "(*) ${SCRIPTLANG[12]}" NAMEOVFILE
read -p "(*) ${SCRIPTLANG[13]}" STARTMASK
echo

if [[ ! -e $STUPIDWAY$INPUTFILE ]]; then echo "This file doesnt not exist, please choose another one :)"; sleep 2; LAUNCHMODE; fi
echo ${SCRIPTLANG[6]}

COWCANDANCE &

while read line
do
echo $STARTMASK$line
done <$STUPIDWAY$INPUTFILE > $STUPIDWAY$NAMEOVFILE

sleep 1
clear
SAYWHOAMI
echo "Mode $WTCHOICE : "
FUNCTABLE " " " " " " " " " " " " " " "X" "X" " "
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10
echo -e "\n${SCRIPTLANG[71]}$NAMEOVFILE${SCRIPTLANG[72]}"
exit 0
;;



#  _                                                  _
# ( )-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,( )
#  X           Mask endmask                           X 
# (_)-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,-' `-. ,(_)
22)

if [[ $PARTS ]]; then echo "'Parts' option doesn't work with the modes 21, 22 and 23."; sleep 2; WTMODE; fi

echo "Mode $WTCHOICE : "
FUNCTABLE " " " " " " " " " " " " " " "X" " " "X"
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

echo 
echo ${SCRIPTLANG[2]}
read -p "(*) ${SCRIPTLANG[11]}" INPUTFILE
read -p "(*) ${SCRIPTLANG[12]}" NAMEOVFILE
read -p "(*) ${SCRIPTLANG[14]}" ENDMASK
echo

if [[ ! -e $STUPIDWAY$INPUTFILE ]]; then echo "This file doesnt not exist, please choose another one :)"; sleep 2; LAUNCHMODE; fi
echo ${SCRIPTLANG[6]}

COWCANDANCE &

while read line
do
echo $line$ENDMASK
done <$STUPIDWAY$INPUTFILE > $STUPIDWAY$NAMEOVFILE

sleep 1
clear
SAYWHOAMI
echo "Mode $WTCHOICE : "
FUNCTABLE " " " " " " " " " " " " " " "X" " " "X"
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10
echo -e "\n${SCRIPTLANG[71]}$NAMEOVFILE${SCRIPTLANG[72]}"
exit 0
;;





#Mask Startmask + Endmask
23)

if [[ $PARTS ]]; then echo "'Parts' option doesn't work with the modes 21, 22 and 23."; sleep 2; WTMODE; fi

echo "Mode $WTCHOICE : "
FUNCTABLE " " " " " " " " " " " " " " "X" "X" "X"
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10

echo 
echo ${SCRIPTLANG[2]}
read -p "(*) ${SCRIPTLANG[11]}" INPUTFILE
read -p "(*) ${SCRIPTLANG[12]}" NAMEOVFILE
read -p "(*) ${SCRIPTLANG[13]}" STARTMASK
read -p "(*) ${SCRIPTLANG[14]}" ENDMASK
echo

if [[ ! -e $STUPIDWAY$INPUTFILE ]]; then echo "This file doesnt not exist, please choose another one :)"; sleep 2; LAUNCHMODE; fi
echo ${SCRIPTLANG[6]}

COWCANDANCE &

while read line
do
echo $STARTMASK$line$ENDMASK
done <$STUPIDWAY$INPUTFILE > $STUPIDWAY$NAMEOVFILE

sleep 1
clear
SAYWHOAMI
echo "Mode $WTCHOICE : "
FUNCTABLE " " " " " " " " " " " " " " "X" "X" "X"
#          ^   ^   ^   ^   ^   ^   ^   ^   ^   ^
#          1   2   3   4   5   6   7   8   9   10
echo -e "\n${SCRIPTLANG[71]}$NAMEOVFILE${SCRIPTLANG[72]}"
exit 0
;;

*)
clear
echo -e "$E_BOLD$WTCHOICE is not a valid option... Please re-try in two seconds...$E_NORMAL"
sleep 2
WTMODE
;;
esac


}


# -- Start --
CHOOSELANG

# -- End --
killall crunch > /dev/null 2>&1
exit 0

