proxmark3/pm3

115 lines
3.2 KiB
Plaintext
Raw Normal View History

#!/bin/bash
2019-07-15 00:20:41 +08:00
PM3PATH=$(dirname "$0")
# try pm3 dirs in current repo workdir
if [ -d "$PM3PATH/client/" ]; then
CLIENT="$PM3PATH/client/proxmark3"
FLASHER="$PM3PATH/client/proxmark3-flasher"
FULLIMAGE="$PM3PATH/armsrc/obj/fullimage.elf"
BOOTIMAGE="$PM3PATH/bootrom/obj/bootrom.elf"
# try install dir
elif [ -x "$PM3PATH/proxmark3" ]; then
CLIENT="$PM3PATH/proxmark3"
FLASHER="$PM3PATH/proxmark3-flasher"
FULLIMAGE="$PM3PATH/../share/proxmark3/firmware/fullimage.elf"
BOOTIMAGE="$PM3PATH/../share/proxmark3/firmware/bootrom.elf"
else
# hope it's installed somehow, still not sure where fw images are...
CLIENT="proxmark3"
FLASHER="proxmark3-flasher"
FULLIMAGE="$PM3PATH/../share/proxmark3/firmware/fullimage.elf"
BOOTIMAGE="$PM3PATH/../share/proxmark3/firmware/bootrom.elf"
fi
2018-08-17 00:31:12 +08:00
function wait4proxmark_Linux {
2019-08-19 01:25:09 +08:00
echo >&2 "[=] Waiting for Proxmark3 to appear..."
2019-07-15 00:20:41 +08:00
while true; do
PM3=$(find /dev/pm3-* /dev/ttyACM* 2>/dev/null | head -1)
if [[ $PM3 != "" ]]; then
break
fi
2019-03-09 18:10:22 +08:00
sleep .1
done
2019-07-15 00:20:41 +08:00
echo "$PM3"
}
function wait4proxmark_macOS {
2019-08-19 01:25:09 +08:00
echo >&2 "[=] Waiting for Proxmark3 to appear..."
2019-03-09 18:10:22 +08:00
while true; do
PM3=$(find /dev/pm3-* /dev/tty.usbmodem* 2>/dev/null | head -1)
2019-03-09 18:10:22 +08:00
if [[ $PM3 != "" ]]; then
break
fi
sleep .1
done
2019-07-15 00:20:41 +08:00
echo "$PM3"
}
function wait4proxmark_Windows {
2019-08-19 01:25:09 +08:00
echo >&2 "[=] Waiting for Proxmark3 to appear..."
while true; do
2019-07-06 21:31:32 +08:00
device=$(wmic path Win32_SerialPort where "PNPDeviceID like '%VID_9AC4&PID_4B8F%'" get DeviceID,PNPDeviceID 2>/dev/null | awk 'NR==2')
if [[ $device != "" ]]; then
PM3=${device/ */}
break
fi
sleep .1
done
2019-07-15 00:20:41 +08:00
echo "$PM3"
}
2019-07-13 06:06:19 +08:00
function wait4proxmark_WSL {
2019-08-19 01:25:09 +08:00
echo >&2 "[=] Waiting for Proxmark3 to appear..."
2019-07-13 06:06:19 +08:00
while true; do
device=$(wmic.exe path Win32_SerialPort where "PNPDeviceID like '%VID_9AC4&PID_4B8F%'" get DeviceID,PNPDeviceID 2>/dev/null | awk 'NR==2')
if [[ $device != "" ]]; then
PM3=${device/ */}
PM3="/dev/ttyS${PM3#COM}"
break
fi
sleep .1
done
2019-07-15 00:20:41 +08:00
if [ -e "$PM3" ] && [ ! -w "$PM3" ]; then
2019-08-13 04:31:27 +08:00
echo "[!!] We need to give current user read/write access to $PM3"
sudo chmod 666 "$PM3"
fi
2019-07-15 00:20:41 +08:00
echo "$PM3"
2019-07-13 06:06:19 +08:00
}
SCRIPT=$(basename -- "$0")
if [ "$SCRIPT" = "pm3" ]; then
CMD() { $CLIENT "$@"; }
elif [ "$SCRIPT" = "pm3-flash-all" ]; then
CMD() { $FLASHER "$1" -b "$BOOTIMAGE" "$FULLIMAGE"; }
elif [ "$SCRIPT" = "pm3-flash-fullimage" ]; then
CMD() { $FLASHER "$1" "$FULLIMAGE"; }
elif [ "$SCRIPT" = "pm3-flash-bootrom" ]; then
CMD() { $FLASHER "$1" -b "$BOOTIMAGE"; }
else
2019-08-13 04:31:27 +08:00
echo "[!!] Script ran under unknown name, abort: $SCRIPT"
exit 1
fi
HOSTOS=$(uname | awk '{print toupper($0)}')
if [ "$HOSTOS" = "LINUX" ]; then
2019-07-13 06:06:19 +08:00
if uname -a|grep -q Microsoft; then
PORT=$(wait4proxmark_WSL)
else
PORT=$(wait4proxmark_Linux)
fi
elif [ "$HOSTOS" = "DARWIN" ]; then
PORT=$(wait4proxmark_macOS)
elif [[ "$HOSTOS" =~ MINGW(32|64)_NT* ]]; then
PORT=$(wait4proxmark_Windows)
else
2019-08-13 04:31:27 +08:00
echo "[!!] Host OS not recognized, abort: $HOSTOS"
exit 1
fi
if [ "$PORT" = "" ]; then
2019-08-13 04:31:27 +08:00
echo "[!!] No port, abort"
exit 1
fi
2019-07-15 00:20:41 +08:00
CMD "$PORT" "$@"
exit $?