Improvements to hashcat completion

The main args completion no longer uses a bash while loop for splitting
up the arguments making it much faster.

I have also removed the use of FZF for looking up modes. This has been
moved into the overidepartialcompletion file in includes.
master
Jonathan Hodgson 3 years ago
parent 02b9b6e51e
commit 69206d46a4
  1. 21
      shells/zsh/completion/_hashcat
  2. 7
      shells/zsh/includes/overidepartialcompletion.zsh

@ -15,23 +15,11 @@ trim(){
} }
_args(){ _args(){
hashcat --help | sed -n '/Options/,/Hash modes/p' | tail -n +5 | head -n -2 | while read line; do hashcat --help | sed -n '/Options/,/Hash modes/p' | tail -n +5 | head -n -2 | awk -F '|' '{sub(/[ \t]+$/, "", $1); sub(/[ \t]+$/, "", $3); print $1 ":" $3 ":" $2}' | awk -F ':' '{ if ($1 ~ ",") { first=$1; second=$1; sub(/,.*/,"",first); sub(/.*,/,"",second); print first ":" $2 ":" $3 "\n" second ":" $2 ":" $3 } else {print $0} }' | trim
op="$(echo "$line" | cut -d"|" -f1 | trim)"
description="$(echo "$line" | cut -d"|" -f3 | trim)"
ty="$(echo "$line" | cut -d"|" -f2 | trim)"
echo "$op" | sed 's/,/\n/' | trim | awk "{print \$1 \":$description:$ty\"}"
done
} }
_hashes(){ _hashes(){
if $(type fzf > /dev/null); then hashcat --example-hashes | grep -E '(mode|Name|^$)' | awk -F ': ' '{print $NF}' | sed 's/Hash mode #//' | awk -v RS="\n\n" -F="\t" '{gsub("\n",":",$0);print $0}'
# If fzf if available, use it for hash completion
hashcat --example-hashes | grep -E '(mode|Example\.Hash\.\.|Name|^$)' | awk -F ': ' '{print $NF}' | sed 's/Hash mode #//' | awk -v RS="\n\n" -F="\t" '{gsub("\n","\t",$0);print $0}' | fzf -d "\t" --header="Mode Type" --with-nth='1,2' --preview='echo {3}' --preview-window=up:1 --height=40% | cut -d' ' -f1
else
hashcat --example-hashes | awk -v RS="\n\n" -F "\t" '{gsub("\n","\t",$0); print $1 ":" $2 }' | sed 's/MODE: //; s/TYPE: //'
fi
return 0
} }
_basic_section(){ _basic_section(){
@ -66,9 +54,8 @@ best_guess(){
case "$previousArg" in case "$previousArg" in
-m|--hash-type) -m|--hash-type)
# hashes=("${(f)$(_hashes)}") hashes=("${(f)$(_hashes)}")
# _describe "Hashes" hashes ;; _describe "Hashes" hashes ;;
compadd -- "$(_hashes)" ;;
-a|--attack-mode) -a|--attack-mode)
ops=("${(f)$(_basic_section "Attack Modes")}") ops=("${(f)$(_basic_section "Attack Modes")}")
_describe "Modes" ops ;; _describe "Modes" ops ;;

@ -53,6 +53,13 @@ overidecomplete(){
esac ;; esac ;;
ytaudio) ytaudio)
toadd="\"$(cat "$HOME/Music/youtube-playlists" | fzf -d ' ' --with-nth=2 --preview='echo {1}' --preview-window=up:1 | cut -d' ' -f1)\""; ret=0 ;; toadd="\"$(cat "$HOME/Music/youtube-playlists" | fzf -d ' ' --with-nth=2 --preview='echo {1}' --preview-window=up:1 | cut -d' ' -f1)\""; ret=0 ;;
hashcat)
case "$lastWord" in
-m|--hash-type) toadd="$( hashcat --example-hashes | grep -E '(mode|Example\.Hash\.\.|Name|^$)' | awk -F ': ' '{print $NF}' | sed 's/Hash mode #//' | awk -v RS="\n\n" -F="\t" '{gsub("\n","\t",$0);print $0}' | fzf -d "\t" --header="Mode Type" --with-nth='1,2' --preview='echo {3}' --preview-window=up:1 --height=40% | cut -d' ' -f1)"
ret=0
;;
esac
;;
esac esac
fi fi

Loading…
Cancel
Save