From 44bfef5cc99a2472e0215ac949a2b0b942198b52 Mon Sep 17 00:00:00 2001 From: Sam Hadow Date: Mon, 31 Aug 2026 18:10:59 +0200 Subject: [PATCH] duck2spark converter --- README.md | 12 ++ duck2spark.py | 252 +++++++++++++++++++++++++++++++ ducky-payloads/open-website.duck | 5 + encoder.jar | Bin 0 -> 57535 bytes 4 files changed, 269 insertions(+) create mode 100755 duck2spark.py create mode 100644 ducky-payloads/open-website.duck create mode 100644 encoder.jar diff --git a/README.md b/README.md index e69de29..a5f60d2 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,12 @@ +# Digispark Attiny85 payloads + +Original encoder and duck2spark converter from [paulopera](https://github.com/paulopera/duck2spark) (converted from Python2 to Python3). + +## Usage: +(Replace `-l fr` with the target keyboard layout.) +```bash +java -jar encoder.jar -i payload.duck -o payload.bin -l fr +python3 duck2spark.py -i payload.bin -l 1 -f 1000 -o payload.ino +rm payload.bin +``` +Then flash your Digispark Attiny85 using arduino IDE. diff --git a/duck2spark.py b/duck2spark.py new file mode 100755 index 0000000..02f5248 --- /dev/null +++ b/duck2spark.py @@ -0,0 +1,252 @@ +#!/usr/bin/env python3 + +import getopt +import os +import sys + + +def generate_source( + payload, + init_delay=2500, + loop_count=-1, + loop_delay=5000, + blink=True, +): + head = '''/* +* Sketch generated by duck2spark from Marcus Mengs aka MaMe82 +* +*/ +#include "DigiKeyboard.h" + +''' + + init = ''' +void setup() +{ + // initialize the digital pin as an output. + pinMode(0, OUTPUT); // LED on Model B + pinMode(1, OUTPUT); // LED on Model A + DigiKeyboard.delay(%d); // wait %d milliseconds before first run, + // to give target time to initialize +} + +void loop() +{ +''' % (init_delay, init_delay) + + body = ''' + // should code be runned in this loop? + if (i != 0) { + DigiKeyboard.sendKeyStroke(0); + + // parse raw duckencoder script + for (int i = 0; i < DUCK_LEN; i += 2) + { + uint8_t key = pgm_read_word_near(duckraw + i); + uint8_t mod = pgm_read_word_near(duckraw + i + 1); + + if (key == 0) // delay (a delay > 255 is split into a sequence of delays) + { + DigiKeyboard.delay(mod); + } + else + { + DigiKeyboard.sendKeyStroke(key, mod); + } + } + + i--; + DigiKeyboard.delay(%d); // wait %d milliseconds before next loop iteration + } + else if (blink) + { + digitalWrite(0, HIGH); // turn the LED on + digitalWrite(1, HIGH); + delay(100); + + digitalWrite(0, LOW); // turn the LED off + digitalWrite(1, LOW); + delay(100); + } +''' % (loop_delay, loop_delay) + + tail = '''} +''' + + # Generate the payload declaration in FLASH memory. + payload_len = len(payload) + + declare = ( + "#define DUCK_LEN " + + str(payload_len) + + "\nconst PROGMEM uint8_t duckraw [DUCK_LEN] = {\n\t" + ) + + # In Python 3, payload is bytes, so payload[c] is already an int. + for c in range(payload_len - 1): + declare += f"{hex(payload[c])}, " + + if payload_len > 0: + declare += f"{hex(payload[-1])}\n" + + declare += ( + "};\n" + f"int i = {loop_count}; " + "// how many times the payload should run (-1 for endless loop)\n" + ) + + if blink: + declare += "bool blink=true;\n" + else: + declare += "bool blink=false;\n" + + return head + declare + init + body + tail + + +def usage(): + usagescr = '''MaMe82 duck2spark 1.0 +===================== + +Converts payload created by DuckEncoder to sourcefile for DigiSpark Sketch + +Usage: + python3 duck2spark.py -i [file ..] + build Sketch from specified RubberDucky payload file + + python3 duck2spark.py -i [file ..] -o [file ..] + save Sketch source to specified output file + +Arguments: + -i [file ..] Input File (Payload encoded with DuckEncoder) + -o [file ..] Output File for Sketch, if omitted stdout is used + -l Loop count (1=single run (default), -1=endless run, + 3=3 runs etc.) + -f Delay in milliseconds before initial payload run + (default 1000) + -r Delay in milliseconds between loop runs + (default 5000) + -n Don't blink status LED after finish of payload execution + +Remark: + In order to use DEAD KEYS (e.g. ^ and ` on German keyboard layout) + a SPACE should be appended in the ducky script + (e.g. "STRING ^ working deadkey"). +''' + print(usagescr) + + +def main(argv): + ifile = "" + ofile = None + payload = None + + loop_count = 1 + blink = True + init_delay = 1000 + loop_delay = 5000 + + try: + opts, args = getopt.getopt( + argv, + "hi:o:l:nf:r:", + [ + "help", + "input=", + "output=", + "loopcount=", + "noblink", + "initdelay=", + "repeatdelay=", + ], + ) + except getopt.GetoptError as exc: + print(f"Error: {exc}", file=sys.stderr) + usage() + sys.exit(2) + + for opt, arg in opts: + if opt in ("-h", "--help"): + usage() + sys.exit(0) + + elif opt in ("-i", "--input"): + ifile = arg + + if not os.path.isfile(ifile) or not os.access(ifile, os.R_OK): + print( + f"Input file {ifile} doesn't exist or isn't readable", + file=sys.stderr, + ) + sys.exit(2) + + with open(ifile, "rb") as f: + payload = f.read() + + elif opt in ("-o", "--output"): + ofile = arg + + elif opt in ("-l", "--loopcount"): + try: + loop_count = int(arg) + except ValueError: + print( + f"Invalid loop count: {arg}", + file=sys.stderr, + ) + sys.exit(2) + + elif opt in ("-f", "--initdelay"): + try: + init_delay = int(arg) + except ValueError: + print( + f"Invalid initial delay: {arg}", + file=sys.stderr, + ) + sys.exit(2) + + elif opt in ("-r", "--repeatdelay"): + try: + loop_delay = int(arg) + except ValueError: + print( + f"Invalid repeat delay: {arg}", + file=sys.stderr, + ) + sys.exit(2) + + elif opt in ("-n", "--noblink"): + blink = False + + if payload is None: + print( + "You have to provide a payload generated by DuckEncoder " + "(-i option)", + file=sys.stderr, + ) + sys.exit(2) + + # Generate source code for Sketch. + result = generate_source( + payload, + init_delay=init_delay, + loop_count=loop_count, + loop_delay=loop_delay, + blink=blink, + ) + + if ofile is None: + # Print to stdout. + print(result, end="") + else: + # Write to output file. + with open(ofile, "w", encoding="utf-8") as f: + f.write(result) + + +if __name__ == "__main__": + if len(sys.argv) < 2: + usage() + sys.exit(1) + + main(sys.argv[1:]) diff --git a/ducky-payloads/open-website.duck b/ducky-payloads/open-website.duck new file mode 100644 index 0000000..9d9711d --- /dev/null +++ b/ducky-payloads/open-website.duck @@ -0,0 +1,5 @@ +DELAY 1000 +CTRL-ALT T +DELAY 1000 +STRING firefox https://hadow.fr +ENTER diff --git a/encoder.jar b/encoder.jar new file mode 100644 index 0000000000000000000000000000000000000000..54fb7b9a167042c42cf9d6c553390669096c3eff GIT binary patch literal 57535 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