script to encode a payload
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user