Clean up shellcheck warnings in install_tool.

This commit is contained in:
David Tomaschik
2019-10-10 13:25:49 -07:00
parent 3005abff34
commit 88c096cd95

View File

@@ -23,7 +23,7 @@ while getopts -- "-:" a ; do
esac esac
done done
shift $(($OPTIND-1)) shift $((OPTIND-1))
if [ $# -ne 1 ] ; then if [ $# -ne 1 ] ; then
echo "Usage: ${0} <tool>" >/dev/stderr echo "Usage: ${0} <tool>" >/dev/stderr
@@ -32,8 +32,8 @@ fi
TOOL=${1} TOOL=${1}
function die { function die {
echo $* >/dev/stderr echo "$@" >/dev/stderr
return 1 exit 1
} }
function install_pkgs { function install_pkgs {
@@ -41,15 +41,15 @@ function install_pkgs {
return 0 return 0
fi fi
# TODO: check if packages are already installed # TODO: check if packages are already installed
if [ `id -u` -ne "0" ] ; then if [ "$(id -u)" -ne "0" ] ; then
sudo apt-get -y install $* || ( sudo apt-get -y install "$@" || (
echo -n "Unable to install packages, please ensure these " >/dev/stderr echo -n "Unable to install packages, please ensure these " >/dev/stderr
echo "are installed, then run with --no-packages." >/dev/stderr echo "are installed, then run with --no-packages." >/dev/stderr
echo $* echo "$@"
false ) false )
return 0 return 0
fi fi
apt-get -y install $* apt-get -y install "$@"
} }
function download { function download {
@@ -57,7 +57,7 @@ function download {
DST=${2} DST=${2}
echo -n "Downloading ${SRC} to ${DST}..." >&2 echo -n "Downloading ${SRC} to ${DST}..." >&2
# TODO: consider curl instead? # TODO: consider curl instead?
wget --no-server-response -q -O ${DST} --content-disposition ${SRC} wget --no-server-response -q -O "${DST}" --content-disposition "${SRC}"
echo " done." >&2 echo " done." >&2
} }
@@ -67,71 +67,77 @@ function check_sudo {
function add_bin_symlink { function add_bin_symlink {
local TARGET NAME BINDIR local TARGET NAME BINDIR
TARGET=${1} TARGET="${1}"
NAME=${2:-$(basename ${1})} NAME="${2:-$(basename ${1})}"
BINDIR=${HOME}/bin/tools/ BINDIR="${HOME}/bin/tools/"
mkdir -p -- ${BINDIR} mkdir -p -- "${BINDIR}"
ln -sf ${DESTDIR}/${TARGET} ${BINDIR}/${NAME} ln -sf "${DESTDIR}/${TARGET}" "${BINDIR}/${NAME}"
} }
mkdir -p "${HOME}/tools" mkdir -p "${HOME}/tools"
DESTDIR="${HOME}/tools/${TOOL}" DESTDIR="${HOME}/tools/${TOOL}"
if [ -d ${DESTDIR} ] ; then function makedest {
if [ ${REINSTALL} -eq 1 ] ; then if [ -d "${DESTDIR}" ] ; then
rm -ri ${DESTDIR} if [ "${REINSTALL}" -eq 1 ] ; then
else rm -ri "${DESTDIR}"
echo "${DESTDIR} exists but not reinstalling." >/dev/stderr else
exit 1 echo "${DESTDIR} exists but not reinstalling." >/dev/stderr
return 1
fi
fi fi
fi mkdir -p "${DESTDIR}"
}
function makedest_or_die {
makedest || die "Aborting."
}
# Begin main tool selection # Begin main tool selection
case ${TOOL} in case ${TOOL} in
john) john)
makedest_or_die
install_pkgs libssl-dev git build-essential yasm libgmp-dev libpcap-dev \ install_pkgs libssl-dev git build-essential yasm libgmp-dev libpcap-dev \
pkg-config libbz2-dev libopenmpi-dev openmpi-bin libnss3-dev \ pkg-config libbz2-dev libopenmpi-dev openmpi-bin libnss3-dev \
libkrb5-dev libgmp-dev libkrb5-dev libgmp-dev
jtemp=`mktemp -d` jtemp=$(mktemp -d)
git clone https://github.com/magnumripper/JohnTheRipper.git ${jtemp}/john git clone https://github.com/magnumripper/JohnTheRipper.git "${jtemp}/john"
cd ${jtemp}/john/src cd "${jtemp}/john/src"
./configure && make -sj2 ./configure && make -sj2
mkdir -p ${DESTDIR} cp -r "${jtemp}"/john/run/* "${DESTDIR}"
cp -r ${jtemp}/john/run/* ${DESTDIR} rm -rf "${jtemp}"
rm -rf ${jtemp}
# Persistent files # Persistent files
mkdir -p ${HOME}/.john mkdir -p "${HOME}/.john"
touch ${HOME}/.john/john.pot touch "${HOME}/.john/john.pot"
ln -sf ${HOME}/.john/* ${DESTDIR} ln -sf "${HOME}/.john/*" "${DESTDIR}"
add_bin_symlink john add_bin_symlink john
;; ;;
wordlists) wordlists)
mkdir -p ${DESTDIR} makedest
download \ download \
http://downloads.skullsecurity.org/passwords/rockyou.txt.bz2 \ http://downloads.skullsecurity.org/passwords/rockyou.txt.bz2 \
${DESTDIR}/rockyou.txt.bz2 "${DESTDIR}/rockyou.txt.bz2"
bunzip2 ${DESTDIR}/rockyou.txt.bz2 bunzip2 "${DESTDIR}/rockyou.txt.bz2"
download \ download \
http://downloads.skullsecurity.org/passwords/phpbb.txt.bz2 \ http://downloads.skullsecurity.org/passwords/phpbb.txt.bz2 \
${DESTDIR}/phpbb.txt.bz2 "${DESTDIR}/phpbb.txt.bz2"
bunzip2 ${DESTDIR}/phpbb.txt.bz2 bunzip2 "${DESTDIR}/phpbb.txt.bz2"
download \ download \
http://downloads.skullsecurity.org/passwords/hak5.txt.bz2 \ http://downloads.skullsecurity.org/passwords/hak5.txt.bz2 \
${DESTDIR}/hak5.txt.bz2 "${DESTDIR}/hak5.txt.bz2"
bunzip2 ${DESTDIR}/hak5.txt.bz2 bunzip2 "${DESTDIR}/hak5.txt.bz2"
;; ;;
seclists) seclists)
git clone https://github.com/danielmiessler/SecLists.git ${DESTDIR} git clone https://github.com/danielmiessler/SecLists.git "${DESTDIR}"
;; ;;
gcloud) gcloud)
mkdir -p ${DESTDIR} makedest_or_die
gtemp=`mktemp -d`
gbase="https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/" gbase="https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/"
# TODO: find a way to make this version independent # TODO: find a way to make this version independent
gsdk="google-cloud-sdk-209.0.0-linux-x86_64.tar.gz" gsdk="google-cloud-sdk-209.0.0-linux-x86_64.tar.gz"
download "${gbase}${gsdk}" /tmp/gcloud.tar.gz download "${gbase}${gsdk}" /tmp/gcloud.tar.gz
tar zxf /tmp/gcloud.tar.gz --strip-components=1 -C ${DESTDIR} tar zxf /tmp/gcloud.tar.gz --strip-components=1 -C "${DESTDIR}"
rm /tmp/gcloud.tar.gz rm /tmp/gcloud.tar.gz
add_bin_symlink bin/gcloud add_bin_symlink bin/gcloud
;; ;;
@@ -139,62 +145,64 @@ case ${TOOL} in
# TODO: find a way to make this version independent # TODO: find a way to make this version independent
asdk="https://dl.google.com/android/repository/tools_r25.2.3-linux.zip" asdk="https://dl.google.com/android/repository/tools_r25.2.3-linux.zip"
download ${asdk} /tmp/android-tools.zip download ${asdk} /tmp/android-tools.zip
unzip -d ${DESTDIR} /tmp/android-tools.zip unzip -d "${DESTDIR}" /tmp/android-tools.zip
rm /tmp/android-tools.zip rm /tmp/android-tools.zip
# Install components # Install components
${DESTDIR}/tools/bin/sdkmanager "emulator" "platform-tools" "${DESTDIR}/tools/bin/sdkmanager" "emulator" "platform-tools"
;; ;;
burp) burp)
# Install latest burp free # Install latest burp free
mkdir -p ${DESTDIR} makedest
download \ if ! download \
https://portswigger.net/DownloadUpdate.ashx\?Product\=Free \ https://portswigger.net/DownloadUpdate.ashx\?Product=Free \
${DESTDIR}/burp-free.jar "${DESTDIR}/burp-free.jar" ; then
if [ $? -ne 0 ] ; then
echo "Download failed." >&2 echo "Download failed." >&2
exit 1 exit 1
fi fi
if [ -x /usr/bin/jarwrapper ] ; then if [ -x /usr/bin/jarwrapper ] ; then
# We have binfmt support for jar, so add to bin # We have binfmt support for jar, so add to bin
chmod +x ${DESTDIR}/*.jar chmod +x "${DESTDIR}"/*.jar
ln -sf ${DESTDIR}/*.jar ${HOME}/bin/burp ln -sf "${DESTDIR}"/*.jar "${HOME}/bin/burp"
fi fi
;; ;;
mitmproxy) mitmproxy)
makedest_or_die
ver=$(python -c 'import urllib2; import json; print(json.load(urllib2.urlopen("https://api.github.com/repos/mitmproxy/mitmproxy/releases/latest"))["name"].replace("v",""))') ver=$(python -c 'import urllib2; import json; print(json.load(urllib2.urlopen("https://api.github.com/repos/mitmproxy/mitmproxy/releases/latest"))["name"].replace("v",""))')
download https://snapshots.mitmproxy.org/${ver}/mitmproxy-${ver}-linux.tar.gz /tmp/mitmproxy.tar.gz download \
mkdir -p ${DESTDIR} "https://snapshots.mitmproxy.org/${ver}/mitmproxy-${ver}-linux.tar.gz" \
tar zx -C ${DESTDIR} -f /tmp/mitmproxy.tar.gz /tmp/mitmproxy.tar.gz
tar zx -C "${DESTDIR}" -f /tmp/mitmproxy.tar.gz
rm /tmp/mitmproxy.tar.gz rm /tmp/mitmproxy.tar.gz
add_bin_symlink mitmproxy add_bin_symlink mitmproxy
add_bin_symlink mitmweb add_bin_symlink mitmweb
;; ;;
esp) esp)
makedest_or_die
src="https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-61-gab8375a-5.2.0.tar.gz" src="https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-61-gab8375a-5.2.0.tar.gz"
download ${src} /tmp/esp32.tar.gz download ${src} /tmp/esp32.tar.gz
mkdir -p ${DESTDIR} tar zx -C "${DESTDIR}" -f /tmp/esp32.tar.gz
tar zx -C ${DESTDIR} -f /tmp/esp32.tar.gz
rm /tmp/esp32.tar.gz rm /tmp/esp32.tar.gz
git clone --recursive https://github.com/espressif/esp-idf.git ${DESTDIR}/esp-idf git clone --recursive https://github.com/espressif/esp-idf.git "${DESTDIR}/esp-idf"
;; ;;
dex2jar) dex2jar)
makedest_or_die
src="https://github.com/pxb1988/dex2jar/releases/download/2.0/dex-tools-2.0.zip" src="https://github.com/pxb1988/dex2jar/releases/download/2.0/dex-tools-2.0.zip"
download ${src} /tmp/dex2jar.zip download ${src} /tmp/dex2jar.zip
tmpd=`mktemp -d` tmpd=$(mktemp -d)
unzip -d ${tmpd} /tmp/dex2jar.zip unzip -d "${tmpd}" /tmp/dex2jar.zip
mv ${tmpd}/* ${DESTDIR} mv "${tmpd}"/* "${DESTDIR}"
rm /tmp/dex2jar.zip rm /tmp/dex2jar.zip
rm -rf ${tmpd} rm -rf "${tmpd}"
rm ${DESTDIR}/*.bat rm "${DESTDIR}"/*.bat
chmod +x ${DESTDIR}/*.sh chmod +x "${DESTDIR}"/*.sh
;; ;;
proxmark3) proxmark3)
install_pkgs p7zip git build-essential libreadline5 libreadline-dev \ install_pkgs p7zip git build-essential libreadline5 libreadline-dev \
libusb-0.1-4 libusb-dev libqt4-dev perl pkg-config wget libncurses5-dev \ libusb-0.1-4 libusb-dev libqt4-dev perl pkg-config wget libncurses5-dev \
gcc-arm-none-eabi libstdc++-arm-none-eabi-newlib gcc-arm-none-eabi libstdc++-arm-none-eabi-newlib
src="https://github.com/Proxmark/proxmark3.git" src="https://github.com/Proxmark/proxmark3.git"
git clone ${src} ${DESTDIR} git clone "${src}" "${DESTDIR}"
cd ${DESTDIR} cd "${DESTDIR}"
make -sj2 make -sj2
check_sudo && sudo /bin/sh -c \ check_sudo && sudo /bin/sh -c \
"cp -rf driver/78-mm-usb-device-blacklist.rules \ "cp -rf driver/78-mm-usb-device-blacklist.rules \
@@ -202,56 +210,57 @@ case ${TOOL} in
udevadm control --reload-rules" udevadm control --reload-rules"
;; ;;
cyberchef) cyberchef)
mkdir -p ${DESTDIR} makedest
src=$(python -c 'import urllib2; import json; print(filter(lambda x: x["name"]=="cyberchef.htm", json.load(urllib2.urlopen("https://api.github.com/repos/gchq/CyberChef/releases/latest"))["assets"])[0]["browser_download_url"])') src=$(python -c 'import urllib2; import json; print(filter(lambda x: x["name"]=="cyberchef.htm", json.load(urllib2.urlopen("https://api.github.com/repos/gchq/CyberChef/releases/latest"))["assets"])[0]["browser_download_url"])')
download ${src} ${DESTDIR}/cyberchef.html download "${src}" "${DESTDIR}/cyberchef.html"
;; ;;
apktool) apktool)
mkdir -p ${DESTDIR} makedest_or_die
download \ download \
https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool \ https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool \
${DESTDIR}/apktool "${DESTDIR}/apktool"
download \ download \
https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.3.3.jar \ https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.3.3.jar \
${DESTDIR}/apktool.jar "${DESTDIR}/apktool.jar"
chmod +x ${DESTDIR}/apktool chmod +x "${DESTDIR}/apktool"
add_bin_symlink apktool add_bin_symlink apktool
;; ;;
ptf) ptf)
makedest_or_die
src="https://github.com/trustedsec/ptf.git" src="https://github.com/trustedsec/ptf.git"
git clone ${src} ${DESTDIR} git clone "${src}" "${DESTDIR}"
;; ;;
pwndbg) pwndbg)
if ! which gdb > /dev/null 2>&1 ; then if ! command -v gdb > /dev/null 2>&1 ; then
echo 'No gdb available!' >/dev/stderr echo 'No gdb available!' >/dev/stderr
exit 1 exit 1
fi fi
git clone --depth 1 -b stable https://github.com/pwndbg/pwndbg.git ${DESTDIR} git clone --depth 1 -b stable https://github.com/pwndbg/pwndbg.git "${DESTDIR}"
local PY_PACKAGES=${DESTDIR}/vendor PY_PACKAGES=${DESTDIR}/vendor
mkdir -p ${PY_PACKAGES} mkdir -p "${PY_PACKAGES}"
local PYVER=$(gdb -batch -q --nx -ex 'pi import platform; print(".".join(platform.python_version_tuple()[:2]))') PYVER=$(gdb -batch -q --nx -ex 'pi import platform; print(".".join(platform.python_version_tuple()[:2]))')
local PYTHON=$(gdb -batch -q --nx -ex 'pi import sys; print(sys.executable)') PYTHON=$(gdb -batch -q --nx -ex 'pi import sys; print(sys.executable)')
PYTHON="${PYTHON}${PYVER}" PYTHON="${PYTHON}${PYVER}"
${PYTHON} -m pip install --target ${PY_PACKAGES} -Ur ${DESTDIR}/requirements.txt "${PYTHON}" -m pip install --target "${PY_PACKAGES}" -Ur "${DESTDIR}/requirements.txt"
${PYTHON} -m pip install --target ${PY_PACKAGES} -U capstone unicorn "${PYTHON}" -m pip install --target "${PY_PACKAGES}" -U capstone unicorn
# capstone package is broken # capstone package is broken
cp ${PY_PACKAGES}/usr/lib/*/dist-packages/capstone/libcapstone.so ${PY_PACKAGES}/capstone cp "${PY_PACKAGES}/usr/lib/*/dist-packages/capstone/libcapstone.so" "${PY_PACKAGES}/capstone"
;; ;;
gef) gef)
if ! which gdb > /dev/null 2>&1 ; then makedest_or_die
if ! command -v gdb > /dev/null 2>&1 ; then
echo 'No gdb available!' >/dev/stderr echo 'No gdb available!' >/dev/stderr
exit 1 exit 1
fi fi
mkdir -p ${DESTDIR}
download \ download \
https://github.com/hugsy/gef/raw/master/gef.py \ https://github.com/hugsy/gef/raw/master/gef.py \
${DESTDIR}/gef.py "${DESTDIR}/gef.py"
;; ;;
*) *)
echo "Unknown tool: ${TOOL}" >/dev/stderr echo "Unknown tool: ${TOOL}" >/dev/stderr
echo "Options:" >/dev/stderr echo "Options:" >/dev/stderr
for opt in $(awk 'BEGIN {s=0;FS=")"};/main tool selection/{s=1};/^\s+\w+)$/{if(s==1){print $1}}' $0|sort); do awk 'BEGIN {s=0;FS=")"};/main tool selection/{s=1};/^\s+\w+)$/{if(s==1){print $1}}' "$0" | sort | while read -r opt; do
echo -e "\t${opt}" >/dev/stderr echo -e "\\t${opt}" >/dev/stderr
done done
exit 1 exit 1
;; ;;