69 lines
1.2 KiB
Bash
Executable File
69 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
PYTHON="python3"
|
|
|
|
ENCODER="$SCRIPT_DIR/encoder.py"
|
|
DUCK2SPARK="$SCRIPT_DIR/duck2spark.py"
|
|
|
|
INPUT_DIR="$SCRIPT_DIR/ducky-payloads"
|
|
OUTPUT_DIR="$SCRIPT_DIR/payloads"
|
|
RESOURCE_DIR="$SCRIPT_DIR/resources"
|
|
|
|
usage() {
|
|
echo "Usage: $0 <payload> <layout>"
|
|
echo
|
|
echo "Example:"
|
|
echo " $0 open-website fr"
|
|
}
|
|
|
|
if [[ $# -ne 2 ]]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
PAYLOAD="$1"
|
|
LAYOUT="$2"
|
|
|
|
INPUT="$INPUT_DIR/$PAYLOAD.duck"
|
|
OUTPUT="$OUTPUT_DIR/$PAYLOAD.ino"
|
|
TMP_BIN="$OUTPUT_DIR/$PAYLOAD.bin"
|
|
LANG_FILE="$RESOURCE_DIR/$LAYOUT.properties"
|
|
|
|
if [[ ! -f "$INPUT" ]]; then
|
|
echo "Error: payload not found: $INPUT" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -f "$LANG_FILE" ]]; then
|
|
echo "Error: keyboard layout not found: $LANG_FILE" >&2
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$OUTPUT_DIR"
|
|
|
|
echo "Payload : $PAYLOAD"
|
|
echo "Layout : $LAYOUT"
|
|
echo "Input : $INPUT"
|
|
echo "Output : $OUTPUT"
|
|
|
|
# DuckyScript to binary payload.
|
|
"$PYTHON" "$ENCODER" \
|
|
-i "$INPUT" \
|
|
-o "$TMP_BIN" \
|
|
-l "$LAYOUT"
|
|
|
|
# Binary payload to Arduino sketch.
|
|
"$PYTHON" "$DUCK2SPARK" \
|
|
-i "$TMP_BIN" \
|
|
-l 1 \
|
|
-f 1000 \
|
|
-o "$OUTPUT"
|
|
|
|
# Remove intermediate file.
|
|
rm -f "$TMP_BIN"
|
|
|
|
echo "Generated $OUTPUT"
|