92 lines
2.7 KiB
Bash
92 lines
2.7 KiB
Bash
#!/bin/bash
|
|
|
|
# Usage: ./make_kali-usb-stick_persistent [ kali.iso ]
|
|
# or
|
|
# bash make_kali-usb-stick_persistent [ kali.iso ]
|
|
# Description: Writes a kali.iso to an usb stick (optional) and
|
|
# adds persistence to it step by step.
|
|
# Author: Patrick Neumann (patrick@neumannsland.de)
|
|
# Platform: Kali Linux (tested: 2022.2) or
|
|
# Debian GNU/Linux (tested: 9.5)
|
|
# Version: 1.03
|
|
# Date: 22.06.2022
|
|
# Link: https://git.neumannsland.de/casualscripter/shell-scripting
|
|
# License: GPL3
|
|
# Warranty: This program is distributed WITHOUT ANY WARRANTY
|
|
|
|
# check for root
|
|
if [[ 0 -ne "$( /usr/bin/id --user )" ]] ; then
|
|
printf "you need to be root - EXIT!\n"
|
|
exit 2
|
|
fi
|
|
|
|
# usage function
|
|
usage () {
|
|
printf "Usage:\n"
|
|
printf " $0 [ <kali-linux-*.iso ]\n"
|
|
printf " (If an iso file is given it will be written to the usb stick first.)\n"
|
|
exit 1
|
|
}
|
|
|
|
# onle zero or one args are supported
|
|
if [ "${#}" -gt 1 ]; then
|
|
usage
|
|
fi
|
|
|
|
# list of external usb storage devices
|
|
printf "List of external usb storage devices:\n"
|
|
readonly USBSTORDEVS="$( ls -l /sys/dev/block | grep -E ".*usb.*[^[:digit:]]$" | awk '{ print $NF; }')"
|
|
for usbstordev in ${USBSTORDEVS} ; do
|
|
dev="${usbstordev##*/}"
|
|
dir="/sys/dev/block/${usbstordev%/*/*}"
|
|
vendor="$( cat "${dir}/vendor" )"
|
|
model="$( cat "${dir}/model" )"
|
|
printf "${dev} = ${vendor} ${model}\n"
|
|
done
|
|
|
|
# select external usb storage device
|
|
printf "\nPlease select an external usb storage device:\n"
|
|
|
|
select USBSTICK in $( ls -l /sys/dev/block | grep -E ".*usb.*[^[:digit:]]$" | awk -F "/" '{ print $NF; }' ) ; do
|
|
if [ -n "${USBSTICK}" ] ; then break ; fi
|
|
done
|
|
# all block devices should be writable by root!?
|
|
USBSTICK="/dev/${USBSTICK}"
|
|
|
|
# if iso file is given
|
|
if [ "${#}" -eq 1 ]; then
|
|
if ! [ -e "${1}" ] ; then
|
|
printf "iso file does not exist - EXIT!\n"
|
|
exit 3
|
|
fi
|
|
if ! [ -f "${1}" ] ; then
|
|
printf "iso file is not a regular file - EXIT!\n"
|
|
exit 4
|
|
fi
|
|
# all files are readable by root!?
|
|
|
|
ISOFILE="${1}"
|
|
|
|
dd if="${ISOFILE}" of="${USBSTICK}" conv=fsync bs=4M status=progress
|
|
fi
|
|
|
|
#check if persistence is already there.
|
|
if blkid "${USBSTICK}"3 | grep -F persistence &> /dev/null ; then
|
|
printf "There is already a persistence on the choosen usb stick - EXIT!\n"
|
|
exit 5
|
|
fi
|
|
|
|
# add 3rd partition to the end of the usb stick
|
|
fdisk "${USBSTICK}" <<< $( printf "n\np\n\n\n\nw" )
|
|
|
|
# format 3rd partition with ext3 and label "persistence"
|
|
mkfs.ext3 -L persistence "${USBSTICK}"3
|
|
|
|
# place "config" in filesystem of 3rd partition
|
|
mkdir -p /mnt/persistence
|
|
mount "${USBSTICK}"3 /mnt/persistence
|
|
echo "/ union" > /mnt/persistence/persistence.conf
|
|
umount "${USBSTICK}"3
|
|
rmdir /mnt/persistence
|
|
|
|
exit 0 |