From 98b6b70469b31dd592e200e62dc2bddabab54ad0 Mon Sep 17 00:00:00 2001 From: cribb-it <24548670+cribb-it@users.noreply.github.com> Date: Tue, 7 Jan 2025 19:56:17 +0000 Subject: [PATCH 1/7] Initial --- .../Multi_HID_Pebbles/payloadNimDucky.txt | 885 ++++++++++++++++++ .../library/general/Multi_HID_Pebbles/pebbles | 159 ++++ .../general/Multi_HID_Pebbles/readme.md | 27 + 3 files changed, 1071 insertions(+) create mode 100644 payloads/library/general/Multi_HID_Pebbles/payloadNimDucky.txt create mode 100644 payloads/library/general/Multi_HID_Pebbles/pebbles create mode 100644 payloads/library/general/Multi_HID_Pebbles/readme.md diff --git a/payloads/library/general/Multi_HID_Pebbles/payloadNimDucky.txt b/payloads/library/general/Multi_HID_Pebbles/payloadNimDucky.txt new file mode 100644 index 0000000..676373a --- /dev/null +++ b/payloads/library/general/Multi_HID_Pebbles/payloadNimDucky.txt @@ -0,0 +1,885 @@ +ATTACKMODE HID STORAGE +REM TITLE: Nim +REM AUTHOR: Cribbit +REM DESCRIPTION: play a game of nim with a ducky +REM Props: Korben & Bert van Dam +DELAY 2000 +EXTENSION TRANSLATE + REM VERSION 1.0 + + REM This extension acts as a library or collection of helper functions + REM to work with converting variables in your payloads. + REM WHY: + REM Of the many ways to get information about the state of your payload + REM is by injecting static strings effectively as debugging prints + REM However, given the non-static nature of payloads using variables in + REM DuckyScript 3.0 - the ability to decode variables during payload + REM execution and print (inject) representations of their current state + REM can often be a critically helpful development and debugging tool. + + REM Available Functions: + REM TRANSLATE_INT() - var to decimal string - set $INPUT prior to call + REM TRANSLATE_HEX() - var to hexidecimal string - set $INPUT prior to call + REM TRANSLATE_BINARY() - var to binary string - set $INPUT prior to call + REM TRANSLATE_BOOL() - var to boolean string - set $INPUT prior to call + + REM USAGE: + REM set $INPUT to desired var + REM call the correct translate_ function for the expected data type e.g. + REM VAR $myVar = 1234 + REM $INPUT = $myVar + REM TRANSLATE_INT() + REM REM the above code will inject 1234 + + REM begin extension variables + DEFINE PRINT_INT 0 + DEFINE PRINT_HEX 1 + VAR $DIGIT_PRINT_MODE = PRINT_INT + VAR $D = 0 + VAR $IN = 0 + VAR $INPUT = 0 + VAR $MOD = 0 + VAR $P = FALSE + VAR $NL = TRUE + REM end extension variables + + REM REQUIRED for INT/HEX - convert int to char + FUNCTION PRINTDIGIT() + IF ($D == 0) THEN + STRING 0 + ELSE IF ($D == 1) THEN + STRING 1 + ELSE IF ($D == 2) THEN + STRING 2 + ELSE IF ($D == 3) THEN + STRING 3 + ELSE IF ($D == 4) THEN + STRING 4 + ELSE IF ($D == 5) THEN + STRING 5 + ELSE IF ($D == 6) THEN + STRING 6 + ELSE IF ($D == 7) THEN + STRING 7 + ELSE IF ($D == 8) THEN + STRING 8 + ELSE IF ($D == 9) THEN + STRING 9 + ELSE IF ($DIGIT_PRINT_MODE == PRINT_HEX) THEN + IF ($D == 10) THEN + STRING A + ELSE IF ($D == 11) THEN + STRING B + ELSE IF ($D == 12) THEN + STRING C + ELSE IF ($D == 13) THEN + STRING D + ELSE IF ($D == 14) THEN + STRING E + ELSE IF ($D == 15) THEN + STRING F + END_IF + ELSE + STRING ? + END_IF + END_FUNCTION + + REM REQUIRED for INT/HEX- consumes a character / place from the input + FUNCTION CONSUME() + $D = 0 + WHILE ($INPUT >= $MOD) + $D = ($D + 1) + $INPUT = ($INPUT - $MOD) + END_WHILE + IF (($D > 0) || ($P == TRUE)) THEN + $P = TRUE + PRINTDIGIT() + END_IF + END_FUNCTION + + REM ENDIAN SWAPPER helper, (useful for working with VID/PID) + FUNCTION SWAP_ENDIAN() + $INPUT = ((($INPUT >> 8) & 0x00FF) | (($INPUT << 8) & 0xFF00)) + END_FUNCTION + + REM Translates a variable of presumed integer type and attempts to convert + REM and inject a DECIMAL string representation + FUNCTION TRANSLATE_INT() + $DIGIT_PRINT_MODE = PRINT_INT + $P = FALSE + IF ( $INPUT >= 10000) THEN + $MOD = 10000 + CONSUME() + END_IF + IF (($INPUT >= 1000) || ($P == TRUE)) THEN + $MOD = 1000 + CONSUME() + END_IF + IF (($INPUT >= 100) || ($P == TRUE)) THEN + $MOD = 100 + CONSUME() + END_IF + IF (($INPUT >= 10) || ($P == TRUE)) THEN + $MOD = 10 + CONSUME() + END_IF() + $D = $INPUT + PRINTDIGIT() + IF $NL THEN + ENTER + END_IF + END_FUNCTION + + REM Translates a variable of presumed boolean type and attempts to convert + REM and inject a BOOLEAN string representation + FUNCTION TRANSLATE_BOOL() + IF $INPUT THEN + STRING TRUE + ELSE + STRING FALSE + END_IF + IF $NL THEN + ENTER + END_IF + END_FUNCTION + + REM Translates a variable of presumed integer type and attempts to convert + REM and inject a HEX string representation + FUNCTION TRANSLATE_HEX() + $DIGIT_PRINT_MODE = PRINT_HEX + VAR $chars = 0 + VAR $d1 = 0 + VAR $d2 = 0 + VAR $d3 = 0 + VAR $d4 = 0 + WHILE ($INPUT > 0) + IF ($chars == 0) THEN + $d1 = ($INPUT % 16) + ELSE IF ($chars == 1) THEN + $d2 = ($INPUT % 16) + ELSE IF ($chars == 2) THEN + $d3 = ($INPUT % 16) + ELSE IF ($chars == 3) THEN + $d4 = ($INPUT % 16) + END_IF + $chars = ($chars + 1) + $INPUT = ($INPUT / 16) + END_WHILE + VAR $i = 0 + STRING 0x + IF ($chars == 0) THEN + STRING 0x0000 + ELSE IF ($chars == 1) THEN + STRING 000 + $D = $d1 + PRINTDIGIT() + ELSE IF ($chars == 2) THEN + STRING 00 + $D = $d2 + PRINTDIGIT() + $D = $d1 + PRINTDIGIT() + ELSE IF ($chars == 3) THEN + STRING 0 + $D = $d3 + PRINTDIGIT() + $D = $d2 + PRINTDIGIT() + $D = $d1 + PRINTDIGIT() + ELSE IF ($chars == 4) THEN + STRING 0 + $D = $d4 + PRINTDIGIT() + $D = $d3 + PRINTDIGIT() + $D = $d2 + PRINTDIGIT() + $D = $d1 + PRINTDIGIT() + END_IF + IF $NL THEN + ENTER + END_IF + END_FUNCTION + + REM Translates a variable of presumed integer type and attempts to convert + REM and inject a BINARY string representation + FUNCTION TRANSLATE_BINARY() + VAR $I = 16 + WHILE ( $I > 0 ) + $I = ($I - 1) + IF (($INPUT & 0x8000) == 0 ) THEN + STRING 0 + ELSE + STRING 1 + END_IF + $INPUT = ($INPUT << 1) + END_WHILE + IF $NL THEN + ENTER + END_IF + END_FUNCTION +END_EXTENSION +REM Game Variables +VAR $MAX = 21 +VAR $CAPS = $_CAPSLOCK_ON +VAR $SCROLL = $_SCROLLLOCK_ON +VAR $NUM = $_NUMLOCK_ON +VAR $PEBBLES = $MAX +VAR $TAKKEN = 0 +VAR $RUNNING = TRUE +VAR $LASTPOS = 0 +VAR $ROW = 1 +VAR $COLUMN = 1 +VAR $changed = FALSE +VAR $MOVE = 0 +REM Array Variables +VAR $ARRAYINPUT = 0 +VAR $ARRAYOUTPUT = 0 +VAR $POS = 0 +VAR $WRITE = TRUE +REM Array Item Variables +VAR $ZERO = 0 +VAR $ONE = 0 +VAR $TWO = 0 +VAR $THREE = 0 +VAR $FOUR = 0 +VAR $FIVE = 0 +VAR $SIX = 0 +VAR $SEVEN = 0 +VAR $EIGHT = 0 +VAR $NINE = 0 +VAR $TEN = 0 +VAR $ELEVEN = 0 +VAR $TWELVE = 0 +VAR $THIRTEEN = 0 +VAR $FOURTEEN = 0 +VAR $FIFTEEN = 0 +VAR $SIXTEEN = 0 +VAR $SEVENTEEN = 0 +VAR $EIGHTEEN = 0 +VAR $NINETEEN = 0 +VAR $TWENTY = 0 +VAR $TWENTYONE = 0 +VAR $TWENTYTWO = 0 +VAR $TWENTYTHREE = 0 +VAR $TWENTYFOUR = 0 +VAR $TWENTYFIVE = 0 +VAR $TWENTYSIX = 0 +VAR $TWENTYSEVEN = 0 +VAR $TWENTYEIGHT = 0 +VAR $TWENTYNINE = 0 +VAR $THIRTY = 0 +VAR $THIRTYONE = 0 +VAR $THIRTYTWO = 0 +VAR $THIRTYTHREE = 0 +VAR $THIRTYFOUR = 0 +VAR $THIRTYFIVE = 0 +VAR $THIRTYSIX = 0 +VAR $THIRTYSEVEN = 0 +VAR $THIRTYEIGHT = 0 +VAR $THIRTYNINE = 0 +VAR $FORTY = 0 +VAR $FORTYONE = 0 +VAR $FORTYTWO = 0 +VAR $FORTYTHREE = 0 +VAR $FORTYFOUR = 0 +VAR $FORTYFIVE = 0 +VAR $FORTYSIX = 0 +VAR $FORTYSEVEN = 0 +VAR $FORTYEIGHT = 0 +VAR $FORTYNINE = 0 +VAR $FIFTY = 0 +VAR $FIFTYONE = 0 +VAR $FIFTYTWO = 0 +VAR $FIFTYTHREE = 0 +VAR $FIFTYFOUR = 0 +VAR $FIFTYFIVE = 0 +VAR $FIFTYSIX = 0 +VAR $FIFTYSEVEN = 0 +VAR $FIFTYEIGHT = 0 +VAR $FIFTYNINE = 0 +VAR $SIXTY = 0 +VAR $SIXTYONE = 0 +VAR $SIXTYTWO = 0 + +FUNCTION ARRAY() + IF ( $POS == 0 ) THEN + IF ($WRITE == TRUE) THEN + $ZERO = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $ZERO + END_IF + ELSE IF ( $POS == 1 ) THEN + IF ($WRITE == TRUE) THEN + $ONE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $ONE + END_IF + ELSE IF ( $POS == 2 ) THEN + IF ($WRITE == TRUE) THEN + $TWO = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $TWO + END_IF + ELSE IF ( $POS == 3 ) THEN + IF ($WRITE == TRUE) THEN + $THREE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $THREE + END_IF + ELSE IF ( $POS == 4 ) THEN + IF ($WRITE == TRUE) THEN + $FOUR = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FOUR + END_IF + ELSE IF ( $POS == 5 ) THEN + IF ($WRITE == TRUE) THEN + $FIVE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FIVE + END_IF + ELSE IF ( $POS == 6 ) THEN + IF ($WRITE == TRUE) THEN + $SIX = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $SIX + END_IF + ELSE IF ( $POS == 7 ) THEN + IF ($WRITE == TRUE) THEN + $SEVEN = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $SEVEN + END_IF + ELSE IF ( $POS == 8 ) THEN + IF ($WRITE == TRUE) THEN + $EIGHT = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $EIGHT + END_IF + ELSE IF ( $POS == 9 ) THEN + IF ($WRITE == TRUE) THEN + $NINE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $NINE + END_IF + ELSE IF ( $POS == 10 ) THEN + IF ($WRITE == TRUE) THEN + $TEN = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $TEN + END_IF + ELSE IF ( $POS == 11 ) THEN + IF ($WRITE == TRUE) THEN + $ELEVEN = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $ELEVEN + END_IF + ELSE IF ( $POS == 12 ) THEN + IF ($WRITE == TRUE) THEN + $TWELVE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $TWELVE + END_IF + ELSE IF ( $POS == 13 ) THEN + IF ($WRITE == TRUE) THEN + $THIRTEEN = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $THIRTEEN + END_IF + ELSE IF ( $POS == 14 ) THEN + IF ($WRITE == TRUE) THEN + $FOURTEEN = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FOURTEEN + END_IF + ELSE IF ( $POS == 15 ) THEN + IF ($WRITE == TRUE) THEN + $FIFTEEN = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FIFTEEN + END_IF + ELSE IF ( $POS == 16 ) THEN + IF ($WRITE == TRUE) THEN + $SIXTEEN = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $SIXTEEN + END_IF + ELSE IF ( $POS == 17 ) THEN + STRINGLN i'm in 17 + IF ($WRITE == TRUE) THEN + STRING Pre: + $INPUT = $SEVENTEEN + TRANSLATE_INT() + STRING Input: + $INPUT = $ARRAYINPUT + TRANSLATE_INT() + + + $SEVENTEEN = $ARRAYINPUT + + + STRING Post: + $INPUT = $SEVENTEEN + TRANSLATE_INT() + ELSE + STRINGLN i'm read + $ARRAYOUTPUT = $SEVENTEEN + END_IF + ELSE IF ( $POS == 18 ) THEN + IF ($WRITE == TRUE) THEN + $EIGHTEEN = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $EIGHTEEN + END_IF + ELSE IF ( $POS == 19 ) THEN + IF ($WRITE == TRUE) THEN + $NINETEEN = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $NINETEEN + END_IF + ELSE IF ( $POS == 20 ) THEN + IF ($WRITE == TRUE) THEN + $TWENTY = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $TWENTY + END_IF + ELSE IF ( $POS == 21 ) THEN + IF ($WRITE == TRUE) THEN + $TWENTYONE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $TWENTYONE + END_IF + ELSE IF ( $POS == 22 ) THEN + IF ($WRITE == TRUE) THEN + $TWENTYTWO = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $TWENTYTWO + END_IF + ELSE IF ( $POS == 23 ) THEN + IF ($WRITE == TRUE) THEN + $TWENTYTHREE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $TWENTYTHREE + END_IF + ELSE IF ( $POS == 24 ) THEN + IF ($WRITE == TRUE) THEN + $TWENTYFOUR = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $TWENTYFOUR + END_IF + ELSE IF ( $POS == 25 ) THEN + IF ($WRITE == TRUE) THEN + $TWENTYFIVE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $TWENTYFIVE + END_IF + ELSE IF ( $POS == 26 ) THEN + IF ($WRITE == TRUE) THEN + $TWENTYSIX = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $TWENTYSIX + END_IF + ELSE IF ( $POS == 27 ) THEN + IF ($WRITE == TRUE) THEN + $TWENTYSEVEN = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $TWENTYSEVEN + END_IF + ELSE IF ( $POS == 28 ) THEN + IF ($WRITE == TRUE) THEN + $TWENTYEIGHT = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $TWENTYEIGHT + END_IF + ELSE IF ( $POS == 29 ) THEN + IF ($WRITE == TRUE) THEN + $TWENTYNINE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $TWENTYNINE + END_IF + ELSE IF ( $POS == 30 ) THEN + IF ($WRITE == TRUE) THEN + $THIRTY = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $THIRTY + END_IF + ELSE IF ( $POS == 31 ) THEN + IF ($WRITE == TRUE) THEN + $THIRTYONE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $THIRTYONE + END_IF + ELSE IF ( $POS == 32 ) THEN + IF ($WRITE == TRUE) THEN + $THIRTYTWO = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $THIRTYTWO + END_IF + ELSE IF ( $POS == 33 ) THEN + IF ($WRITE == TRUE) THEN + $THIRTYTHREE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $THIRTYTHREE + END_IF + ELSE IF ( $POS == 34 ) THEN + IF ($WRITE == TRUE) THEN + $THIRTYFOUR = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $THIRTYFOUR + END_IF + ELSE IF ( $POS == 35 ) THEN + IF ($WRITE == TRUE) THEN + $THIRTYFIVE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $THIRTYFIVE + END_IF + ELSE IF ( $POS == 36 ) THEN + IF ($WRITE == TRUE) THEN + $THIRTYSIX = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $THIRTYSIX + END_IF + ELSE IF ( $POS == 37 ) THEN + IF ($WRITE == TRUE) THEN + $THIRTYSEVEN = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $THIRTYSEVEN + END_IF + ELSE IF ( $POS == 38 ) THEN + IF ($WRITE == TRUE) THEN + $THIRTYEIGHT = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $THIRTYEIGHT + END_IF + ELSE IF ( $POS == 39 ) THEN + IF ($WRITE == TRUE) THEN + $THIRTYNINE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $THIRTYNINE + END_IF + ELSE IF ( $POS == 40 ) THEN + IF ($WRITE == TRUE) THEN + $FORTY = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FORTY + END_IF + ELSE IF ( $POS == 41 ) THEN + IF ($WRITE == TRUE) THEN + $FORTYONE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FORTYONE + END_IF + ELSE IF ( $POS == 42 ) THEN + IF ($WRITE == TRUE) THEN + $FORTYTWO = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FORTYTWO + END_IF + ELSE IF ( $POS == 43 ) THEN + IF ($WRITE == TRUE) THEN + $FORTYTHREE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FORTYTHREE + END_IF + ELSE IF ( $POS == 44 ) THEN + IF ($WRITE == TRUE) THEN + $FORTYFOUR = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FORTYFOUR + END_IF + ELSE IF ( $POS == 45 ) THEN + IF ($WRITE == TRUE) THEN + $FORTYFIVE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FORTYFIVE + END_IF + ELSE IF ( $POS == 46 ) THEN + IF ($WRITE == TRUE) THEN + $FORTYSIX = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FORTYSIX + END_IF + ELSE IF ( $POS == 47 ) THEN + IF ($WRITE == TRUE) THEN + $FORTYSEVEN = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FORTYSEVEN + END_IF + ELSE IF ( $POS == 48 ) THEN + IF ($WRITE == TRUE) THEN + $FORTYEIGHT = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FORTYEIGHT + END_IF + ELSE IF ( $POS == 49 ) THEN + IF ($WRITE == TRUE) THEN + $FORTYNINE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FORTYNINE + END_IF + ELSE IF ( $POS == 50 ) THEN + IF ($WRITE == TRUE) THEN + $FIFTY = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FIFTY + END_IF + ELSE IF ( $POS == 51 ) THEN + IF ($WRITE == TRUE) THEN + $FIFTYONE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FIFTYONE + END_IF + ELSE IF ( $POS == 52 ) THEN + IF ($WRITE == TRUE) THEN + $FIFTYTWO = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FIFTYTWO + END_IF + ELSE IF ( $POS == 53 ) THEN + IF ($WRITE == TRUE) THEN + $FIFTYTHREE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FIFTYTHREE + END_IF + ELSE IF ( $POS == 54 ) THEN + IF ($WRITE == TRUE) THEN + $FIFTYFOUR = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FIFTYFOUR + END_IF + ELSE IF ( $POS == 55 ) THEN + IF ($WRITE == TRUE) THEN + $FIFTYFIVE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FIFTYFIVE + END_IF + ELSE IF ( $POS == 56 ) THEN + IF ($WRITE == TRUE) THEN + $FIFTYSIX = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FIFTYSIX + END_IF + ELSE IF ( $POS == 57 ) THEN + IF ($WRITE == TRUE) THEN + $FIFTYSEVEN = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FIFTYSEVEN + END_IF + ELSE IF ( $POS == 58 ) THEN + IF ($WRITE == TRUE) THEN + $FIFTYEIGHT = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FIFTYEIGHT + END_IF + ELSE IF ( $POS == 59 ) THEN + IF ($WRITE == TRUE) THEN + $FIFTYNINE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $FIFTYNINE + END_IF + ELSE IF ( $POS == 60 ) THEN + IF ($WRITE == TRUE) THEN + $SIXTY = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $SIXTY + END_IF + ELSE IF ( $POS == 61 ) THEN + IF ($WRITE == TRUE) THEN + $SIXTYONE = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $SIXTYONE + END_IF + ELSE IF ( $POS == 62 ) THEN + IF ($WRITE == TRUE) THEN + $SIXTYTWO = $ARRAYINPUT + ELSE + $ARRAYOUTPUT = $SIXTYTWO + END_IF + END_IF +END_FUNCTION + +FUNCTION SETARRAY() + $COLUMN = 1 + $WRITE = TRUE + WHILE ($COLUMN <= $MAX) + $ROW = 1 + WHILE ($ROW <= 3) + $POS = (((($ROW-1)*$MAX)+$COLUMN)-1) + IF ($COLUMN > $ROW) THEN + $ARRAYINPUT = 1 + ELSE + $ARRAYINPUT = 0 + END_IF + ARRAY() + $ROW = ($ROW + 1) + END_WHILE + $COLUMN = ($COLUMN + 1) + END_WHILE +END_FUNCTION + + +FUNCTION READARRAY() + $COLUMN = 1 + $WRITE = FALSE + WHILE ($COLUMN <= $MAX) + $ROW = 1 + WHILE ($ROW <= 3) + $POS = (((($ROW-1)*$MAX)+$COLUMN)-1) + STRING Pos: + $INPUT = $POS + TRANSLATE_INT() + ARRAY() + STRING Array output: + $INPUT = $ARRAYOUTPUT + TRANSLATE_INT() + $ROW = ($ROW + 1) + END_WHILE + $COLUMN = ($COLUMN + 1) + END_WHILE +END_FUNCTION + +FUNCTION ENSURE_CAPS_OFF() + IF ($_CAPSLOCK_ON == TRUE) THEN + CAPSLOCK + END_IF +END_FUNCTION + +FUNCTION stop_game() + LED_R + $RUNNING = FALSE +END_FUNCTION + +FUNCTION check_input() + $changed = FALSE + ENTER + ENSURE_CAPS_OFF() + STRING Take your pebbles + WHILE( $changed == FALSE) + IF ($CAPS != $_CAPSLOCK_ON) THEN + $CAPS = $_CAPSLOCK_ON + $TAKKEN = 1 + $changed = TRUE + ELSE IF ($SCROLL != $_SCROLLLOCK_ON) THEN + $SCROLL = $_SCROLLLOCK_ON + $TAKKEN = 2 + $changed = TRUE + ELSE IF ($NUM != $_NUMLOCK_ON) + $NUM = $_NUMLOCK_ON + $TAKKEN = 3 + $changed = TRUE + END_IF + END_WHILE +END_FUNCTION + +FUNCTION pebbles_left() + ENTER + ENSURE_CAPS_OFF() + STRING pebble left: + $INPUT = $PEBBLES + TRANSLATE_INT() +END_FUNCTION + + +FUNCTION run() + check_input() + ENSURE_CAPS_OFF() + IF ($PEBBLES <= $TAKKEN) THEN + ENTER + STRING I have won! + ENTER + STRING Commiserations better luck next time. + stop_game() + ELSE + $PEBBLES = ($PEBBLES - $TAKKEN) + pebbles_left() + REM our move + $WRITE = FALSE + $MOVE = 0 + $ROW = 1 + WHILE ($ROW <= 3) + $POS = (((($ROW -1)*$MAX)+$PEBBLES)-1) + REM TEST + STRING pos: + $INPUT = $POS + TRANSLATE_INT() + STRING 17: + $INPUT = $SEVENTEEN + TRANSLATE_INT() + REM END TEST + + ARRAY() + + REM TEST + STRING Array output: + $INPUT = $ARRAYOUTPUT + TRANSLATE_INT() + REM END TEST + + IF ($ARRAYOUTPUT == 1) THEN + $MOVE = $ROW + $LASTPOS = $POS + END_IF + $ROW = ($ROW + 1) + END_WHILE + IF (($MOVE == 0) || (($PEBBLES - $MOVE) == 0)) THEN + ENTER + STRING Congratulations you have won! + ENTER + STRING I will learn from my mistake. + $WRITE = TRUE + $POS = $LASTPOS + $ARRAYINPUT = 0 + ARRAY() + stop_game() + ELSE + $PEBBLES = ($PEBBLES - $MOVE) + ENTER + STRING I take: + $INPUT = $MOVE + TRANSLATE_INT() + pebbles_left() + END_IF + END_IF +END_FUNCTION + +FUNCTION play_game() + STRINGLN generating brain please hold + SETARRAY() + REM READARRAY() + WHILE TRUE + ENSURE_CAPS_OFF() + $CAPS = $_CAPSLOCK_ON + $SCROLL = $_SCROLLLOCK_ON + $NUM = $_NUMLOCK_ON + $PEBBLES = $MAX + $TAKKEN = 0 + LED_G + ENTER + STRINGLN Welcome to the game of NIM + STRINGLN You vs Me + STRINGLN You move first, the object of the game is not to take the last pebble + STRINGLN Caps lock = 1 + STRINGLN Scroll lock = 2 + STRINGLN and Num lock = 3 + ENTER + pebbles_left() + WHILE ($RUNNING == TRUE) + run() + END_WHILE + DELAY 1000 + ENTER + STRING Press CAPS to play again. + WAIT_FOR_CAPS_CHANGE + $RUNNING = TRUE + DELAY 100 + END_WHILE +END_FUNCTION + +BUTTON_DEF + stop_game() +END_BUTTON + +play_game() \ No newline at end of file diff --git a/payloads/library/general/Multi_HID_Pebbles/pebbles b/payloads/library/general/Multi_HID_Pebbles/pebbles new file mode 100644 index 0000000..86c0b6a --- /dev/null +++ b/payloads/library/general/Multi_HID_Pebbles/pebbles @@ -0,0 +1,159 @@ +#!/bin/bash +# Title: Pebbles +# Description: Pebbles a game based off of Nim. Nim is a mathematical game of strategy in which two players take turns removing (or "nimming") objects from distinct heaps or piles. On each turn, a player must remove at least one object, and may remove upto 3 of objects off of the pile. The goal of the game is to avoid taking the last object. +# Author: Cribbit +# Version: 1.0 +# Category: General +# Prop: Dragorn for his help with bash arrays and Bert van Dam's book on AI +# Thanks: To Hak5 for their 20 year of passing knowledge out into the world and the Hak5 discord members for their friendship, knowledge and support. + +## Matches +MATCH pebbles +MATCH resetbrain + +## Fixed variables +# location of charlog +char=/root/loot/croc_char.log +# where the array (it knowledge) is stored when not running +brainFile=/root/loot/brain.hak +# array of decisions +# basiclly if it has a one it can choose this move. +# because bash does not have a multi dimensional array we cheat a little and have 3 (largest number of pebbles that can be taken) times the total number of pebbles (21) +# so 21 * 3 = 63 => [0..62] +brainArray=( 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ) +max=21 +pebbles=$max +takken=0 +running=true +lastpos=0 +row=1 +column=1 +move=0 + +save_tofile () { + printf "%s\n" "${brainArray[@]}" > $brainFile +} + +# check for brain file. if it exist loads +# else save current +if [ -e $brainFile ] && [[ "$LOOT" == "pebbles" ]]; then + mapfile -t brainArray < $brainFile +else + save_tofile +fi + +quack_line () { + if [[ $2 -eq 1 ]]; then + QUACK ENTER + fi + QUACK STRING "$1" + QUACK ENTER +} + +quack_cmds () { + quack_line "Please take 1, 2 or 3 pebbles" 1 +} + +wait_input () { + # echo waiting + QUACK STRING "> " + cnt=$(wc -m "$char" | awk {'print $1'}) + while : ; do + cnt2=$(wc -m "$char" | awk {'print $1'}) + if [ "$cnt" -ne "$cnt2" ]; then + break + fi + sleep .5 + done + tail -c 1 "$char" +} + +check_input() +{ + while true; do + command=$( wait_input ) + case $command in + 1 | 2 | 3 ) takken=$command + break ;; + q ) good_bye ;; + * ) quack_cmds ;; + esac + done +} + +another_game() +{ + quack_line "Do you want another game (y/n)?" 1 + while true; do + command=$( wait_input ) + case $command in + y ) + running=true + pebbles=$max + lastpos=0 ;; + break ;; + * ) good_bye ;; + esac + done +} +pebbles_left() +{ + QUACK ENTER + QUACK STRING pebbles left: $pebbles +} + +good_bye () { + quack_line "Good Bye" 1 + exit +} + +run () +{ + check_input + if [ "$pebbles" -le "$takken" ]; then + quack_line "I have won!" 1 + quack_line "Commiserations better luck next time." 0 + running=false + else + pebbles=$(($pebbles-$takken)) + pebbles_left + move=0 + for i in {1..3} + do + pos=$(((((i-1)*max)+pebbles)-1)) + if [[ ${brainArray[$pos]} -eq 1 ]] ; then + move=$i + lastpos=$pos + fi + done + if [ "$move" -eq 0 -o ($(($pebbles - $move)) -eq 0) ] ; then + quack_line "Congratulations you have won!" 1 + quack_line "I will learn from my mistake." 1 + brainArray[$lastpos]=0 + save_tofile + running=false + else + pebbles=$(($pebbles - $move)) + quack_line "I take: $move" 1 + pebbles_left + fi + fi +} + +play_game() +{ + while true; do + quack_line "Welcome to the game of pebbles base off of the game NIM" 1 + quack_line "You vs Me" + quack_line "You move first, the object of the game is not to take the last pebble" + pebbles_left + quack_cmds + while [ "$running" == true ]; do + run + done + QUACK DELAY 200 + another_game + done +} + +play_game diff --git a/payloads/library/general/Multi_HID_Pebbles/readme.md b/payloads/library/general/Multi_HID_Pebbles/readme.md new file mode 100644 index 0000000..6492b54 --- /dev/null +++ b/payloads/library/general/Multi_HID_Pebbles/readme.md @@ -0,0 +1,27 @@ +# :gem: Pebbles? +- Author: Cribbit +- Version: 1.0 +- Target: Mutli OS (GUI based text editior) +- Category: General +- Attackmode: HID +- Props: Dragorn for his help with bash arrays and Bert van Dam's book on AI + +## :mag: Match +pebbles + +## :book: Description +Welcome to the game of pebbles base off of the game NIM. +You vs the Croc. +You move first, the object of the game is not to take the last pebble. + +So after loading onto your croc. Open up a text editor and type `pebbles` + +The more games you play the smarter the croc will seem to get. + +## :mag: Match +resetbrain (play the game but resets any knowledge it has built up) + +## :placard: Change Log +| Version | Changes | +| ------- | --------------- | +| 1.0 | Initial release | \ No newline at end of file From aab09966a44e7d26eb1a2184086d7cb6ff16a208 Mon Sep 17 00:00:00 2001 From: cribb-it <24548670+cribb-it@users.noreply.github.com> Date: Tue, 7 Jan 2025 19:56:56 +0000 Subject: [PATCH 2/7] Delete old ds code --- .../Multi_HID_Pebbles/payloadNimDucky.txt | 885 ------------------ 1 file changed, 885 deletions(-) delete mode 100644 payloads/library/general/Multi_HID_Pebbles/payloadNimDucky.txt diff --git a/payloads/library/general/Multi_HID_Pebbles/payloadNimDucky.txt b/payloads/library/general/Multi_HID_Pebbles/payloadNimDucky.txt deleted file mode 100644 index 676373a..0000000 --- a/payloads/library/general/Multi_HID_Pebbles/payloadNimDucky.txt +++ /dev/null @@ -1,885 +0,0 @@ -ATTACKMODE HID STORAGE -REM TITLE: Nim -REM AUTHOR: Cribbit -REM DESCRIPTION: play a game of nim with a ducky -REM Props: Korben & Bert van Dam -DELAY 2000 -EXTENSION TRANSLATE - REM VERSION 1.0 - - REM This extension acts as a library or collection of helper functions - REM to work with converting variables in your payloads. - REM WHY: - REM Of the many ways to get information about the state of your payload - REM is by injecting static strings effectively as debugging prints - REM However, given the non-static nature of payloads using variables in - REM DuckyScript 3.0 - the ability to decode variables during payload - REM execution and print (inject) representations of their current state - REM can often be a critically helpful development and debugging tool. - - REM Available Functions: - REM TRANSLATE_INT() - var to decimal string - set $INPUT prior to call - REM TRANSLATE_HEX() - var to hexidecimal string - set $INPUT prior to call - REM TRANSLATE_BINARY() - var to binary string - set $INPUT prior to call - REM TRANSLATE_BOOL() - var to boolean string - set $INPUT prior to call - - REM USAGE: - REM set $INPUT to desired var - REM call the correct translate_ function for the expected data type e.g. - REM VAR $myVar = 1234 - REM $INPUT = $myVar - REM TRANSLATE_INT() - REM REM the above code will inject 1234 - - REM begin extension variables - DEFINE PRINT_INT 0 - DEFINE PRINT_HEX 1 - VAR $DIGIT_PRINT_MODE = PRINT_INT - VAR $D = 0 - VAR $IN = 0 - VAR $INPUT = 0 - VAR $MOD = 0 - VAR $P = FALSE - VAR $NL = TRUE - REM end extension variables - - REM REQUIRED for INT/HEX - convert int to char - FUNCTION PRINTDIGIT() - IF ($D == 0) THEN - STRING 0 - ELSE IF ($D == 1) THEN - STRING 1 - ELSE IF ($D == 2) THEN - STRING 2 - ELSE IF ($D == 3) THEN - STRING 3 - ELSE IF ($D == 4) THEN - STRING 4 - ELSE IF ($D == 5) THEN - STRING 5 - ELSE IF ($D == 6) THEN - STRING 6 - ELSE IF ($D == 7) THEN - STRING 7 - ELSE IF ($D == 8) THEN - STRING 8 - ELSE IF ($D == 9) THEN - STRING 9 - ELSE IF ($DIGIT_PRINT_MODE == PRINT_HEX) THEN - IF ($D == 10) THEN - STRING A - ELSE IF ($D == 11) THEN - STRING B - ELSE IF ($D == 12) THEN - STRING C - ELSE IF ($D == 13) THEN - STRING D - ELSE IF ($D == 14) THEN - STRING E - ELSE IF ($D == 15) THEN - STRING F - END_IF - ELSE - STRING ? - END_IF - END_FUNCTION - - REM REQUIRED for INT/HEX- consumes a character / place from the input - FUNCTION CONSUME() - $D = 0 - WHILE ($INPUT >= $MOD) - $D = ($D + 1) - $INPUT = ($INPUT - $MOD) - END_WHILE - IF (($D > 0) || ($P == TRUE)) THEN - $P = TRUE - PRINTDIGIT() - END_IF - END_FUNCTION - - REM ENDIAN SWAPPER helper, (useful for working with VID/PID) - FUNCTION SWAP_ENDIAN() - $INPUT = ((($INPUT >> 8) & 0x00FF) | (($INPUT << 8) & 0xFF00)) - END_FUNCTION - - REM Translates a variable of presumed integer type and attempts to convert - REM and inject a DECIMAL string representation - FUNCTION TRANSLATE_INT() - $DIGIT_PRINT_MODE = PRINT_INT - $P = FALSE - IF ( $INPUT >= 10000) THEN - $MOD = 10000 - CONSUME() - END_IF - IF (($INPUT >= 1000) || ($P == TRUE)) THEN - $MOD = 1000 - CONSUME() - END_IF - IF (($INPUT >= 100) || ($P == TRUE)) THEN - $MOD = 100 - CONSUME() - END_IF - IF (($INPUT >= 10) || ($P == TRUE)) THEN - $MOD = 10 - CONSUME() - END_IF() - $D = $INPUT - PRINTDIGIT() - IF $NL THEN - ENTER - END_IF - END_FUNCTION - - REM Translates a variable of presumed boolean type and attempts to convert - REM and inject a BOOLEAN string representation - FUNCTION TRANSLATE_BOOL() - IF $INPUT THEN - STRING TRUE - ELSE - STRING FALSE - END_IF - IF $NL THEN - ENTER - END_IF - END_FUNCTION - - REM Translates a variable of presumed integer type and attempts to convert - REM and inject a HEX string representation - FUNCTION TRANSLATE_HEX() - $DIGIT_PRINT_MODE = PRINT_HEX - VAR $chars = 0 - VAR $d1 = 0 - VAR $d2 = 0 - VAR $d3 = 0 - VAR $d4 = 0 - WHILE ($INPUT > 0) - IF ($chars == 0) THEN - $d1 = ($INPUT % 16) - ELSE IF ($chars == 1) THEN - $d2 = ($INPUT % 16) - ELSE IF ($chars == 2) THEN - $d3 = ($INPUT % 16) - ELSE IF ($chars == 3) THEN - $d4 = ($INPUT % 16) - END_IF - $chars = ($chars + 1) - $INPUT = ($INPUT / 16) - END_WHILE - VAR $i = 0 - STRING 0x - IF ($chars == 0) THEN - STRING 0x0000 - ELSE IF ($chars == 1) THEN - STRING 000 - $D = $d1 - PRINTDIGIT() - ELSE IF ($chars == 2) THEN - STRING 00 - $D = $d2 - PRINTDIGIT() - $D = $d1 - PRINTDIGIT() - ELSE IF ($chars == 3) THEN - STRING 0 - $D = $d3 - PRINTDIGIT() - $D = $d2 - PRINTDIGIT() - $D = $d1 - PRINTDIGIT() - ELSE IF ($chars == 4) THEN - STRING 0 - $D = $d4 - PRINTDIGIT() - $D = $d3 - PRINTDIGIT() - $D = $d2 - PRINTDIGIT() - $D = $d1 - PRINTDIGIT() - END_IF - IF $NL THEN - ENTER - END_IF - END_FUNCTION - - REM Translates a variable of presumed integer type and attempts to convert - REM and inject a BINARY string representation - FUNCTION TRANSLATE_BINARY() - VAR $I = 16 - WHILE ( $I > 0 ) - $I = ($I - 1) - IF (($INPUT & 0x8000) == 0 ) THEN - STRING 0 - ELSE - STRING 1 - END_IF - $INPUT = ($INPUT << 1) - END_WHILE - IF $NL THEN - ENTER - END_IF - END_FUNCTION -END_EXTENSION -REM Game Variables -VAR $MAX = 21 -VAR $CAPS = $_CAPSLOCK_ON -VAR $SCROLL = $_SCROLLLOCK_ON -VAR $NUM = $_NUMLOCK_ON -VAR $PEBBLES = $MAX -VAR $TAKKEN = 0 -VAR $RUNNING = TRUE -VAR $LASTPOS = 0 -VAR $ROW = 1 -VAR $COLUMN = 1 -VAR $changed = FALSE -VAR $MOVE = 0 -REM Array Variables -VAR $ARRAYINPUT = 0 -VAR $ARRAYOUTPUT = 0 -VAR $POS = 0 -VAR $WRITE = TRUE -REM Array Item Variables -VAR $ZERO = 0 -VAR $ONE = 0 -VAR $TWO = 0 -VAR $THREE = 0 -VAR $FOUR = 0 -VAR $FIVE = 0 -VAR $SIX = 0 -VAR $SEVEN = 0 -VAR $EIGHT = 0 -VAR $NINE = 0 -VAR $TEN = 0 -VAR $ELEVEN = 0 -VAR $TWELVE = 0 -VAR $THIRTEEN = 0 -VAR $FOURTEEN = 0 -VAR $FIFTEEN = 0 -VAR $SIXTEEN = 0 -VAR $SEVENTEEN = 0 -VAR $EIGHTEEN = 0 -VAR $NINETEEN = 0 -VAR $TWENTY = 0 -VAR $TWENTYONE = 0 -VAR $TWENTYTWO = 0 -VAR $TWENTYTHREE = 0 -VAR $TWENTYFOUR = 0 -VAR $TWENTYFIVE = 0 -VAR $TWENTYSIX = 0 -VAR $TWENTYSEVEN = 0 -VAR $TWENTYEIGHT = 0 -VAR $TWENTYNINE = 0 -VAR $THIRTY = 0 -VAR $THIRTYONE = 0 -VAR $THIRTYTWO = 0 -VAR $THIRTYTHREE = 0 -VAR $THIRTYFOUR = 0 -VAR $THIRTYFIVE = 0 -VAR $THIRTYSIX = 0 -VAR $THIRTYSEVEN = 0 -VAR $THIRTYEIGHT = 0 -VAR $THIRTYNINE = 0 -VAR $FORTY = 0 -VAR $FORTYONE = 0 -VAR $FORTYTWO = 0 -VAR $FORTYTHREE = 0 -VAR $FORTYFOUR = 0 -VAR $FORTYFIVE = 0 -VAR $FORTYSIX = 0 -VAR $FORTYSEVEN = 0 -VAR $FORTYEIGHT = 0 -VAR $FORTYNINE = 0 -VAR $FIFTY = 0 -VAR $FIFTYONE = 0 -VAR $FIFTYTWO = 0 -VAR $FIFTYTHREE = 0 -VAR $FIFTYFOUR = 0 -VAR $FIFTYFIVE = 0 -VAR $FIFTYSIX = 0 -VAR $FIFTYSEVEN = 0 -VAR $FIFTYEIGHT = 0 -VAR $FIFTYNINE = 0 -VAR $SIXTY = 0 -VAR $SIXTYONE = 0 -VAR $SIXTYTWO = 0 - -FUNCTION ARRAY() - IF ( $POS == 0 ) THEN - IF ($WRITE == TRUE) THEN - $ZERO = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $ZERO - END_IF - ELSE IF ( $POS == 1 ) THEN - IF ($WRITE == TRUE) THEN - $ONE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $ONE - END_IF - ELSE IF ( $POS == 2 ) THEN - IF ($WRITE == TRUE) THEN - $TWO = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $TWO - END_IF - ELSE IF ( $POS == 3 ) THEN - IF ($WRITE == TRUE) THEN - $THREE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $THREE - END_IF - ELSE IF ( $POS == 4 ) THEN - IF ($WRITE == TRUE) THEN - $FOUR = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FOUR - END_IF - ELSE IF ( $POS == 5 ) THEN - IF ($WRITE == TRUE) THEN - $FIVE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FIVE - END_IF - ELSE IF ( $POS == 6 ) THEN - IF ($WRITE == TRUE) THEN - $SIX = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $SIX - END_IF - ELSE IF ( $POS == 7 ) THEN - IF ($WRITE == TRUE) THEN - $SEVEN = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $SEVEN - END_IF - ELSE IF ( $POS == 8 ) THEN - IF ($WRITE == TRUE) THEN - $EIGHT = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $EIGHT - END_IF - ELSE IF ( $POS == 9 ) THEN - IF ($WRITE == TRUE) THEN - $NINE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $NINE - END_IF - ELSE IF ( $POS == 10 ) THEN - IF ($WRITE == TRUE) THEN - $TEN = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $TEN - END_IF - ELSE IF ( $POS == 11 ) THEN - IF ($WRITE == TRUE) THEN - $ELEVEN = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $ELEVEN - END_IF - ELSE IF ( $POS == 12 ) THEN - IF ($WRITE == TRUE) THEN - $TWELVE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $TWELVE - END_IF - ELSE IF ( $POS == 13 ) THEN - IF ($WRITE == TRUE) THEN - $THIRTEEN = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $THIRTEEN - END_IF - ELSE IF ( $POS == 14 ) THEN - IF ($WRITE == TRUE) THEN - $FOURTEEN = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FOURTEEN - END_IF - ELSE IF ( $POS == 15 ) THEN - IF ($WRITE == TRUE) THEN - $FIFTEEN = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FIFTEEN - END_IF - ELSE IF ( $POS == 16 ) THEN - IF ($WRITE == TRUE) THEN - $SIXTEEN = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $SIXTEEN - END_IF - ELSE IF ( $POS == 17 ) THEN - STRINGLN i'm in 17 - IF ($WRITE == TRUE) THEN - STRING Pre: - $INPUT = $SEVENTEEN - TRANSLATE_INT() - STRING Input: - $INPUT = $ARRAYINPUT - TRANSLATE_INT() - - - $SEVENTEEN = $ARRAYINPUT - - - STRING Post: - $INPUT = $SEVENTEEN - TRANSLATE_INT() - ELSE - STRINGLN i'm read - $ARRAYOUTPUT = $SEVENTEEN - END_IF - ELSE IF ( $POS == 18 ) THEN - IF ($WRITE == TRUE) THEN - $EIGHTEEN = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $EIGHTEEN - END_IF - ELSE IF ( $POS == 19 ) THEN - IF ($WRITE == TRUE) THEN - $NINETEEN = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $NINETEEN - END_IF - ELSE IF ( $POS == 20 ) THEN - IF ($WRITE == TRUE) THEN - $TWENTY = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $TWENTY - END_IF - ELSE IF ( $POS == 21 ) THEN - IF ($WRITE == TRUE) THEN - $TWENTYONE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $TWENTYONE - END_IF - ELSE IF ( $POS == 22 ) THEN - IF ($WRITE == TRUE) THEN - $TWENTYTWO = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $TWENTYTWO - END_IF - ELSE IF ( $POS == 23 ) THEN - IF ($WRITE == TRUE) THEN - $TWENTYTHREE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $TWENTYTHREE - END_IF - ELSE IF ( $POS == 24 ) THEN - IF ($WRITE == TRUE) THEN - $TWENTYFOUR = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $TWENTYFOUR - END_IF - ELSE IF ( $POS == 25 ) THEN - IF ($WRITE == TRUE) THEN - $TWENTYFIVE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $TWENTYFIVE - END_IF - ELSE IF ( $POS == 26 ) THEN - IF ($WRITE == TRUE) THEN - $TWENTYSIX = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $TWENTYSIX - END_IF - ELSE IF ( $POS == 27 ) THEN - IF ($WRITE == TRUE) THEN - $TWENTYSEVEN = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $TWENTYSEVEN - END_IF - ELSE IF ( $POS == 28 ) THEN - IF ($WRITE == TRUE) THEN - $TWENTYEIGHT = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $TWENTYEIGHT - END_IF - ELSE IF ( $POS == 29 ) THEN - IF ($WRITE == TRUE) THEN - $TWENTYNINE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $TWENTYNINE - END_IF - ELSE IF ( $POS == 30 ) THEN - IF ($WRITE == TRUE) THEN - $THIRTY = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $THIRTY - END_IF - ELSE IF ( $POS == 31 ) THEN - IF ($WRITE == TRUE) THEN - $THIRTYONE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $THIRTYONE - END_IF - ELSE IF ( $POS == 32 ) THEN - IF ($WRITE == TRUE) THEN - $THIRTYTWO = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $THIRTYTWO - END_IF - ELSE IF ( $POS == 33 ) THEN - IF ($WRITE == TRUE) THEN - $THIRTYTHREE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $THIRTYTHREE - END_IF - ELSE IF ( $POS == 34 ) THEN - IF ($WRITE == TRUE) THEN - $THIRTYFOUR = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $THIRTYFOUR - END_IF - ELSE IF ( $POS == 35 ) THEN - IF ($WRITE == TRUE) THEN - $THIRTYFIVE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $THIRTYFIVE - END_IF - ELSE IF ( $POS == 36 ) THEN - IF ($WRITE == TRUE) THEN - $THIRTYSIX = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $THIRTYSIX - END_IF - ELSE IF ( $POS == 37 ) THEN - IF ($WRITE == TRUE) THEN - $THIRTYSEVEN = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $THIRTYSEVEN - END_IF - ELSE IF ( $POS == 38 ) THEN - IF ($WRITE == TRUE) THEN - $THIRTYEIGHT = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $THIRTYEIGHT - END_IF - ELSE IF ( $POS == 39 ) THEN - IF ($WRITE == TRUE) THEN - $THIRTYNINE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $THIRTYNINE - END_IF - ELSE IF ( $POS == 40 ) THEN - IF ($WRITE == TRUE) THEN - $FORTY = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FORTY - END_IF - ELSE IF ( $POS == 41 ) THEN - IF ($WRITE == TRUE) THEN - $FORTYONE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FORTYONE - END_IF - ELSE IF ( $POS == 42 ) THEN - IF ($WRITE == TRUE) THEN - $FORTYTWO = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FORTYTWO - END_IF - ELSE IF ( $POS == 43 ) THEN - IF ($WRITE == TRUE) THEN - $FORTYTHREE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FORTYTHREE - END_IF - ELSE IF ( $POS == 44 ) THEN - IF ($WRITE == TRUE) THEN - $FORTYFOUR = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FORTYFOUR - END_IF - ELSE IF ( $POS == 45 ) THEN - IF ($WRITE == TRUE) THEN - $FORTYFIVE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FORTYFIVE - END_IF - ELSE IF ( $POS == 46 ) THEN - IF ($WRITE == TRUE) THEN - $FORTYSIX = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FORTYSIX - END_IF - ELSE IF ( $POS == 47 ) THEN - IF ($WRITE == TRUE) THEN - $FORTYSEVEN = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FORTYSEVEN - END_IF - ELSE IF ( $POS == 48 ) THEN - IF ($WRITE == TRUE) THEN - $FORTYEIGHT = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FORTYEIGHT - END_IF - ELSE IF ( $POS == 49 ) THEN - IF ($WRITE == TRUE) THEN - $FORTYNINE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FORTYNINE - END_IF - ELSE IF ( $POS == 50 ) THEN - IF ($WRITE == TRUE) THEN - $FIFTY = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FIFTY - END_IF - ELSE IF ( $POS == 51 ) THEN - IF ($WRITE == TRUE) THEN - $FIFTYONE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FIFTYONE - END_IF - ELSE IF ( $POS == 52 ) THEN - IF ($WRITE == TRUE) THEN - $FIFTYTWO = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FIFTYTWO - END_IF - ELSE IF ( $POS == 53 ) THEN - IF ($WRITE == TRUE) THEN - $FIFTYTHREE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FIFTYTHREE - END_IF - ELSE IF ( $POS == 54 ) THEN - IF ($WRITE == TRUE) THEN - $FIFTYFOUR = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FIFTYFOUR - END_IF - ELSE IF ( $POS == 55 ) THEN - IF ($WRITE == TRUE) THEN - $FIFTYFIVE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FIFTYFIVE - END_IF - ELSE IF ( $POS == 56 ) THEN - IF ($WRITE == TRUE) THEN - $FIFTYSIX = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FIFTYSIX - END_IF - ELSE IF ( $POS == 57 ) THEN - IF ($WRITE == TRUE) THEN - $FIFTYSEVEN = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FIFTYSEVEN - END_IF - ELSE IF ( $POS == 58 ) THEN - IF ($WRITE == TRUE) THEN - $FIFTYEIGHT = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FIFTYEIGHT - END_IF - ELSE IF ( $POS == 59 ) THEN - IF ($WRITE == TRUE) THEN - $FIFTYNINE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $FIFTYNINE - END_IF - ELSE IF ( $POS == 60 ) THEN - IF ($WRITE == TRUE) THEN - $SIXTY = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $SIXTY - END_IF - ELSE IF ( $POS == 61 ) THEN - IF ($WRITE == TRUE) THEN - $SIXTYONE = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $SIXTYONE - END_IF - ELSE IF ( $POS == 62 ) THEN - IF ($WRITE == TRUE) THEN - $SIXTYTWO = $ARRAYINPUT - ELSE - $ARRAYOUTPUT = $SIXTYTWO - END_IF - END_IF -END_FUNCTION - -FUNCTION SETARRAY() - $COLUMN = 1 - $WRITE = TRUE - WHILE ($COLUMN <= $MAX) - $ROW = 1 - WHILE ($ROW <= 3) - $POS = (((($ROW-1)*$MAX)+$COLUMN)-1) - IF ($COLUMN > $ROW) THEN - $ARRAYINPUT = 1 - ELSE - $ARRAYINPUT = 0 - END_IF - ARRAY() - $ROW = ($ROW + 1) - END_WHILE - $COLUMN = ($COLUMN + 1) - END_WHILE -END_FUNCTION - - -FUNCTION READARRAY() - $COLUMN = 1 - $WRITE = FALSE - WHILE ($COLUMN <= $MAX) - $ROW = 1 - WHILE ($ROW <= 3) - $POS = (((($ROW-1)*$MAX)+$COLUMN)-1) - STRING Pos: - $INPUT = $POS - TRANSLATE_INT() - ARRAY() - STRING Array output: - $INPUT = $ARRAYOUTPUT - TRANSLATE_INT() - $ROW = ($ROW + 1) - END_WHILE - $COLUMN = ($COLUMN + 1) - END_WHILE -END_FUNCTION - -FUNCTION ENSURE_CAPS_OFF() - IF ($_CAPSLOCK_ON == TRUE) THEN - CAPSLOCK - END_IF -END_FUNCTION - -FUNCTION stop_game() - LED_R - $RUNNING = FALSE -END_FUNCTION - -FUNCTION check_input() - $changed = FALSE - ENTER - ENSURE_CAPS_OFF() - STRING Take your pebbles - WHILE( $changed == FALSE) - IF ($CAPS != $_CAPSLOCK_ON) THEN - $CAPS = $_CAPSLOCK_ON - $TAKKEN = 1 - $changed = TRUE - ELSE IF ($SCROLL != $_SCROLLLOCK_ON) THEN - $SCROLL = $_SCROLLLOCK_ON - $TAKKEN = 2 - $changed = TRUE - ELSE IF ($NUM != $_NUMLOCK_ON) - $NUM = $_NUMLOCK_ON - $TAKKEN = 3 - $changed = TRUE - END_IF - END_WHILE -END_FUNCTION - -FUNCTION pebbles_left() - ENTER - ENSURE_CAPS_OFF() - STRING pebble left: - $INPUT = $PEBBLES - TRANSLATE_INT() -END_FUNCTION - - -FUNCTION run() - check_input() - ENSURE_CAPS_OFF() - IF ($PEBBLES <= $TAKKEN) THEN - ENTER - STRING I have won! - ENTER - STRING Commiserations better luck next time. - stop_game() - ELSE - $PEBBLES = ($PEBBLES - $TAKKEN) - pebbles_left() - REM our move - $WRITE = FALSE - $MOVE = 0 - $ROW = 1 - WHILE ($ROW <= 3) - $POS = (((($ROW -1)*$MAX)+$PEBBLES)-1) - REM TEST - STRING pos: - $INPUT = $POS - TRANSLATE_INT() - STRING 17: - $INPUT = $SEVENTEEN - TRANSLATE_INT() - REM END TEST - - ARRAY() - - REM TEST - STRING Array output: - $INPUT = $ARRAYOUTPUT - TRANSLATE_INT() - REM END TEST - - IF ($ARRAYOUTPUT == 1) THEN - $MOVE = $ROW - $LASTPOS = $POS - END_IF - $ROW = ($ROW + 1) - END_WHILE - IF (($MOVE == 0) || (($PEBBLES - $MOVE) == 0)) THEN - ENTER - STRING Congratulations you have won! - ENTER - STRING I will learn from my mistake. - $WRITE = TRUE - $POS = $LASTPOS - $ARRAYINPUT = 0 - ARRAY() - stop_game() - ELSE - $PEBBLES = ($PEBBLES - $MOVE) - ENTER - STRING I take: - $INPUT = $MOVE - TRANSLATE_INT() - pebbles_left() - END_IF - END_IF -END_FUNCTION - -FUNCTION play_game() - STRINGLN generating brain please hold - SETARRAY() - REM READARRAY() - WHILE TRUE - ENSURE_CAPS_OFF() - $CAPS = $_CAPSLOCK_ON - $SCROLL = $_SCROLLLOCK_ON - $NUM = $_NUMLOCK_ON - $PEBBLES = $MAX - $TAKKEN = 0 - LED_G - ENTER - STRINGLN Welcome to the game of NIM - STRINGLN You vs Me - STRINGLN You move first, the object of the game is not to take the last pebble - STRINGLN Caps lock = 1 - STRINGLN Scroll lock = 2 - STRINGLN and Num lock = 3 - ENTER - pebbles_left() - WHILE ($RUNNING == TRUE) - run() - END_WHILE - DELAY 1000 - ENTER - STRING Press CAPS to play again. - WAIT_FOR_CAPS_CHANGE - $RUNNING = TRUE - DELAY 100 - END_WHILE -END_FUNCTION - -BUTTON_DEF - stop_game() -END_BUTTON - -play_game() \ No newline at end of file From 0c64ff4866c94efb5aa98d5be41cc1b18640db91 Mon Sep 17 00:00:00 2001 From: cribb-it <24548670+cribb-it@users.noreply.github.com> Date: Tue, 7 Jan 2025 19:57:27 +0000 Subject: [PATCH 3/7] Rename --- .../library/general/Multi_HID_Pebbles/{pebbles => pebbles.txt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename payloads/library/general/Multi_HID_Pebbles/{pebbles => pebbles.txt} (100%) diff --git a/payloads/library/general/Multi_HID_Pebbles/pebbles b/payloads/library/general/Multi_HID_Pebbles/pebbles.txt similarity index 100% rename from payloads/library/general/Multi_HID_Pebbles/pebbles rename to payloads/library/general/Multi_HID_Pebbles/pebbles.txt From c0135eff5ce849a000937e0502a051d41c3a569c Mon Sep 17 00:00:00 2001 From: cribb-it <24548670+cribb-it@users.noreply.github.com> Date: Tue, 7 Jan 2025 20:03:12 +0000 Subject: [PATCH 4/7] Update Readme --- payloads/library/general/Multi_HID_Pebbles/readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/payloads/library/general/Multi_HID_Pebbles/readme.md b/payloads/library/general/Multi_HID_Pebbles/readme.md index 6492b54..a0de499 100644 --- a/payloads/library/general/Multi_HID_Pebbles/readme.md +++ b/payloads/library/general/Multi_HID_Pebbles/readme.md @@ -10,13 +10,13 @@ pebbles ## :book: Description -Welcome to the game of pebbles base off of the game NIM. -You vs the Croc. +Welcome to the game of pebbles base off of the game NIM.
+You vs the Croc.
You move first, the object of the game is not to take the last pebble. So after loading onto your croc. Open up a text editor and type `pebbles` -The more games you play the smarter the croc will seem to get. +The more games you play the smarter the croc will seem to get as it builds up knowledge. ## :mag: Match resetbrain (play the game but resets any knowledge it has built up) From 6416a2b6bdd5d29261ade650b4b8f4587f615660 Mon Sep 17 00:00:00 2001 From: cribb-it <24548670+cribb-it@users.noreply.github.com> Date: Tue, 7 Jan 2025 20:05:29 +0000 Subject: [PATCH 5/7] Small fixes with text --- .../general/Multi_HID_Pebbles/pebbles.txt | 42 +++++++++---------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/payloads/library/general/Multi_HID_Pebbles/pebbles.txt b/payloads/library/general/Multi_HID_Pebbles/pebbles.txt index 86c0b6a..8b559d2 100644 --- a/payloads/library/general/Multi_HID_Pebbles/pebbles.txt +++ b/payloads/library/general/Multi_HID_Pebbles/pebbles.txt @@ -15,7 +15,7 @@ MATCH resetbrain # location of charlog char=/root/loot/croc_char.log # where the array (it knowledge) is stored when not running -brainFile=/root/loot/brain.hak +brainFile=/root/brain.hak # array of decisions # basiclly if it has a one it can choose this move. # because bash does not have a multi dimensional array we cheat a little and have 3 (largest number of pebbles that can be taken) times the total number of pebbles (21) @@ -26,8 +26,6 @@ pebbles=$max takken=0 running=true lastpos=0 -row=1 -column=1 move=0 save_tofile () { @@ -82,27 +80,27 @@ check_input() } another_game() -{ +{ quack_line "Do you want another game (y/n)?" 1 while true; do command=$( wait_input ) case $command in - y ) + y ) running=true pebbles=$max - lastpos=0 ;; - break ;; + lastpos=0 + break + ;; * ) good_bye ;; esac done } pebbles_left() { - QUACK ENTER - QUACK STRING pebbles left: $pebbles + quack_line "pebbles left: $pebbles" 1 } -good_bye () { +good_bye () { quack_line "Good Bye" 1 exit } @@ -112,29 +110,29 @@ run () check_input if [ "$pebbles" -le "$takken" ]; then quack_line "I have won!" 1 - quack_line "Commiserations better luck next time." 0 + quack_line "Commiserations better luck next time." running=false else pebbles=$(($pebbles-$takken)) pebbles_left move=0 - for i in {1..3} - do - pos=$(((((i-1)*max)+pebbles)-1)) - if [[ ${brainArray[$pos]} -eq 1 ]] ; then - move=$i - lastpos=$pos - fi - done - if [ "$move" -eq 0 -o ($(($pebbles - $move)) -eq 0) ] ; then + for i in {1..3} + do + pos=$(((((i-1)*max)+pebbles)-1)) + if [[ ${brainArray[$pos]} -eq 1 ]] ; then + move=$i + lastpos=$pos + fi + done + if [[ "$move" -eq 0 || $(($pebbles - $move)) -le 0 ]] ; then quack_line "Congratulations you have won!" 1 - quack_line "I will learn from my mistake." 1 + quack_line "I will learn from my mistake." brainArray[$lastpos]=0 save_tofile running=false else pebbles=$(($pebbles - $move)) - quack_line "I take: $move" 1 + quack_line "I take: $move" pebbles_left fi fi From e1ba6357dbba919a0c7b79abcd988b0ee535c03b Mon Sep 17 00:00:00 2001 From: cribb-it <24548670+cribb-it@users.noreply.github.com> Date: Tue, 7 Jan 2025 20:09:55 +0000 Subject: [PATCH 6/7] Update readme --- payloads/library/general/Multi_HID_Pebbles/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/payloads/library/general/Multi_HID_Pebbles/readme.md b/payloads/library/general/Multi_HID_Pebbles/readme.md index a0de499..572cd28 100644 --- a/payloads/library/general/Multi_HID_Pebbles/readme.md +++ b/payloads/library/general/Multi_HID_Pebbles/readme.md @@ -1,4 +1,4 @@ -# :gem: Pebbles? +# :gem: Pebbles - Author: Cribbit - Version: 1.0 - Target: Mutli OS (GUI based text editior) From da3a28874a245a0bd2a566b79e13ea88200dd7bb Mon Sep 17 00:00:00 2001 From: cribb-it <24548670+cribb-it@users.noreply.github.com> Date: Tue, 7 Jan 2025 20:18:07 +0000 Subject: [PATCH 7/7] Update spacings --- payloads/library/general/Multi_HID_Pebbles/pebbles.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/payloads/library/general/Multi_HID_Pebbles/pebbles.txt b/payloads/library/general/Multi_HID_Pebbles/pebbles.txt index 8b559d2..e89ee2b 100644 --- a/payloads/library/general/Multi_HID_Pebbles/pebbles.txt +++ b/payloads/library/general/Multi_HID_Pebbles/pebbles.txt @@ -5,7 +5,7 @@ # Version: 1.0 # Category: General # Prop: Dragorn for his help with bash arrays and Bert van Dam's book on AI -# Thanks: To Hak5 for their 20 year of passing knowledge out into the world and the Hak5 discord members for their friendship, knowledge and support. +# Thanks: To Hak5 for their 20 year of passing knowledge out into the world and the Hak5 discord members for their friendship, knowledge and support. ## Matches MATCH pebbles @@ -128,8 +128,8 @@ run () quack_line "Congratulations you have won!" 1 quack_line "I will learn from my mistake." brainArray[$lastpos]=0 - save_tofile - running=false + save_tofile + running=false else pebbles=$(($pebbles - $move)) quack_line "I take: $move" @@ -145,7 +145,7 @@ play_game() quack_line "You vs Me" quack_line "You move first, the object of the game is not to take the last pebble" pebbles_left - quack_cmds + quack_cmds while [ "$running" == true ]; do run done