Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
hak5
GitHub Repository: hak5/usbrubberducky-payloads
Path: blob/master/payloads/library/general/Multi_HID_The-Penny-Drops/Payload.txt
2968 views
1
REM TITLE The Penny Drops
2
REM AUTHOR Cribbit
3
REM DESCRIPTION Little arcade coin drop / pachinko style game
4
REM VERSION 1.0
5
REM PROPS Darren & Korben
6
EXTENSION TRANSLATE
7
REM VERSION 1.0
8
9
REM This extension acts as a library or collection of helper functions
10
REM to work with converting variables in your payloads.
11
REM WHY:
12
REM Of the many ways to get information about the state of your payload
13
REM is by injecting static strings effectively as debugging prints
14
REM However, given the non-static nature of payloads using variables in
15
REM DuckyScript 3.0 - the ability to decode variables during payload
16
REM execution and print (inject) representations of their current state
17
REM can often be a critically helpful development and debugging tool.
18
19
REM Available Functions:
20
REM TRANSLATE_INT() - var to decimal string - set $INPUT prior to call
21
REM TRANSLATE_HEX() - var to hexidecimal string - set $INPUT prior to call
22
REM TRANSLATE_BINARY() - var to binary string - set $INPUT prior to call
23
REM TRANSLATE_BOOL() - var to boolean string - set $INPUT prior to call
24
25
REM USAGE:
26
REM set $INPUT to desired var
27
REM call the correct translate_ function for the expected data type e.g.
28
REM VAR $myVar = 1234
29
REM $INPUT = $myVar
30
REM TRANSLATE_INT()
31
REM REM the above code will inject 1234
32
33
REM begin extension variables
34
DEFINE PRINT_INT 0
35
DEFINE PRINT_HEX 1
36
VAR $DIGIT_PRINT_MODE = PRINT_INT
37
VAR $D = 0
38
VAR $IN = 0
39
VAR $INPUT = 0
40
VAR $MOD = 0
41
VAR $P = FALSE
42
VAR $NL = TRUE
43
REM end extension variables
44
45
REM REQUIRED for INT/HEX - convert int to char
46
FUNCTION PRINTDIGIT()
47
IF ($D == 0) THEN
48
STRING 0
49
ELSE IF ($D == 1) THEN
50
STRING 1
51
ELSE IF ($D == 2) THEN
52
STRING 2
53
ELSE IF ($D == 3) THEN
54
STRING 3
55
ELSE IF ($D == 4) THEN
56
STRING 4
57
ELSE IF ($D == 5) THEN
58
STRING 5
59
ELSE IF ($D == 6) THEN
60
STRING 6
61
ELSE IF ($D == 7) THEN
62
STRING 7
63
ELSE IF ($D == 8) THEN
64
STRING 8
65
ELSE IF ($D == 9) THEN
66
STRING 9
67
ELSE IF ($DIGIT_PRINT_MODE == PRINT_HEX) THEN
68
IF ($D == 10) THEN
69
STRING A
70
ELSE IF ($D == 11) THEN
71
STRING B
72
ELSE IF ($D == 12) THEN
73
STRING C
74
ELSE IF ($D == 13) THEN
75
STRING D
76
ELSE IF ($D == 14) THEN
77
STRING E
78
ELSE IF ($D == 15) THEN
79
STRING F
80
END_IF
81
ELSE
82
STRING ?
83
END_IF
84
END_FUNCTION
85
86
REM REQUIRED for INT/HEX- consumes a character / place from the input
87
FUNCTION CONSUME()
88
$D = 0
89
WHILE ($INPUT >= $MOD)
90
$D = ($D + 1)
91
$INPUT = ($INPUT - $MOD)
92
END_WHILE
93
IF (($D > 0) || ($P == TRUE)) THEN
94
$P = TRUE
95
PRINTDIGIT()
96
END_IF
97
END_FUNCTION
98
99
REM ENDIAN SWAPPER helper, (useful for working with VID/PID)
100
FUNCTION SWAP_ENDIAN()
101
$INPUT = ((($INPUT >> 8) & 0x00FF) | (($INPUT << 8) & 0xFF00))
102
END_FUNCTION
103
104
REM Translates a variable of presumed integer type and attempts to convert
105
REM and inject a DECIMAL string representation
106
FUNCTION TRANSLATE_INT()
107
$DIGIT_PRINT_MODE = PRINT_INT
108
$P = FALSE
109
IF ( $INPUT >= 10000) THEN
110
$MOD = 10000
111
CONSUME()
112
END_IF
113
IF (($INPUT >= 1000) || ($P == TRUE)) THEN
114
$MOD = 1000
115
CONSUME()
116
END_IF
117
IF (($INPUT >= 100) || ($P == TRUE)) THEN
118
$MOD = 100
119
CONSUME()
120
END_IF
121
IF (($INPUT >= 10) || ($P == TRUE)) THEN
122
$MOD = 10
123
CONSUME()
124
END_IF()
125
$D = $INPUT
126
PRINTDIGIT()
127
IF $NL THEN
128
ENTER
129
END_IF
130
END_FUNCTION
131
132
REM Translates a variable of presumed boolean type and attempts to convert
133
REM and inject a BOOLEAN string representation
134
FUNCTION TRANSLATE_BOOL()
135
IF $INPUT THEN
136
STRING TRUE
137
ELSE
138
STRING FALSE
139
END_IF
140
IF $NL THEN
141
ENTER
142
END_IF
143
END_FUNCTION
144
145
REM Translates a variable of presumed integer type and attempts to convert
146
REM and inject a HEX string representation
147
FUNCTION TRANSLATE_HEX()
148
$DIGIT_PRINT_MODE = PRINT_HEX
149
VAR $chars = 0
150
VAR $d1 = 0
151
VAR $d2 = 0
152
VAR $d3 = 0
153
VAR $d4 = 0
154
WHILE ($INPUT > 0)
155
IF ($chars == 0) THEN
156
$d1 = ($INPUT % 16)
157
ELSE IF ($chars == 1) THEN
158
$d2 = ($INPUT % 16)
159
ELSE IF ($chars == 2) THEN
160
$d3 = ($INPUT % 16)
161
ELSE IF ($chars == 3) THEN
162
$d4 = ($INPUT % 16)
163
END_IF
164
$chars = ($chars + 1)
165
$INPUT = ($INPUT / 16)
166
END_WHILE
167
VAR $i = 0
168
STRING 0x
169
IF ($chars == 0) THEN
170
STRING 0x0000
171
ELSE IF ($chars == 1) THEN
172
STRING 000
173
$D = $d1
174
PRINTDIGIT()
175
ELSE IF ($chars == 2) THEN
176
STRING 00
177
$D = $d2
178
PRINTDIGIT()
179
$D = $d1
180
PRINTDIGIT()
181
ELSE IF ($chars == 3) THEN
182
STRING 0
183
$D = $d3
184
PRINTDIGIT()
185
$D = $d2
186
PRINTDIGIT()
187
$D = $d1
188
PRINTDIGIT()
189
ELSE IF ($chars == 4) THEN
190
STRING 0
191
$D = $d4
192
PRINTDIGIT()
193
$D = $d3
194
PRINTDIGIT()
195
$D = $d2
196
PRINTDIGIT()
197
$D = $d1
198
PRINTDIGIT()
199
END_IF
200
IF $NL THEN
201
ENTER
202
END_IF
203
END_FUNCTION
204
205
REM Translates a variable of presumed integer type and attempts to convert
206
REM and inject a BINARY string representation
207
FUNCTION TRANSLATE_BINARY()
208
VAR $I = 16
209
WHILE ( $I > 0 )
210
$I = ($I - 1)
211
IF (($INPUT & 0x8000) == 0 ) THEN
212
STRING 0
213
ELSE
214
STRING 1
215
END_IF
216
$INPUT = ($INPUT << 1)
217
END_WHILE
218
IF $NL THEN
219
ENTER
220
END_IF
221
END_FUNCTION
222
END_EXTENSION
223
224
ATTACKMODE HID
225
DELAY 3000
226
DEFINE GAME_SPEED 500
227
VAR $SCORE = 0
228
VAR $COIN = 6
229
VAR $MAX = 9999
230
VAR $RUNNING = TRUE
231
VAR $INPUT = 0
232
$NL = FALSE
233
234
FUNCTION move()
235
SHIFT LEFTARROW
236
SPACE
237
DOWNARROW
238
IF (($_RANDOM_INT % 2) == 0) THEN
239
$COIN = ($COIN + 1)
240
RIGHTARROW
241
ELSE
242
$COIN = ($COIN - 1)
243
LEFTARROW
244
END_IF
245
SHIFT LEFTARROW
246
STRING 0
247
END_FUNCTION
248
249
FUNCTION drop()
250
VAR $A = 4
251
WHILE ($A > 0)
252
move()
253
DELAY GAME_SPEED
254
$A = ($A - 1)
255
END_WHILE
256
SHIFT LEFTARROW
257
SPACE
258
DOWNARROW
259
SHIFT LEFTARROW
260
STRING 0
261
DELAY GAME_SPEED
262
SHIFT LEFTARROW
263
SPACE
264
END_FUNCTION
265
266
FUNCTION write_score()
267
DOWNARROW
268
DOWNARROW
269
END
270
SHIFT HOME
271
VAR $POINTS = 1
272
IF ($COIN == 6) THEN
273
$POINTS = 5
274
ELSE IF (($COIN == 4) || ($COIN == 8)) THEN
275
$POINTS = 2
276
END_IF
277
278
IF ($POINTS > ($MAX - $SCORE)) THEN
279
$SCORE = ($POINTS - ($MAX - $SCORE))
280
ELSE
281
$SCORE = ($SCORE + $POINTS)
282
END_IF
283
284
STRING SCORE:
285
$INPUT = $SCORE
286
TRANSLATE_INT()
287
END_FUNCTION
288
289
FUNCTION end_game()
290
LED_R
291
$RUNNING = FALSE
292
END_FUNCTION
293
294
FUNCTION reset()
295
UPARROW
296
UPARROW
297
UPARROW
298
UPARROW
299
UPARROW
300
UPARROW
301
UPARROW
302
END
303
LEFTARROW
304
LEFTARROW
305
LEFTARROW
306
LEFTARROW
307
LEFTARROW
308
SHIFT LEFTARROW
309
STRING 0
310
$COIN = 6
311
END_FUNCTION
312
313
FUNCTION play_game()
314
STRINGLN Penny drop / pachinko style game.
315
STRINGLN Press scroll lock to drop a coin.
316
ENTER
317
STRINGLN _(PENNY)_
318
STRINGLN / 0 \
319
STRINGLN | . |
320
STRINGLN | . . |
321
STRINGLN | . . . |
322
STRINGLN | . . . . |
323
STRINGLN | | | | | |
324
STRINGLN |1|2|5|2|1|
325
reset()
326
WAIT_FOR_SCROLL_CHANGE
327
WHILE ($RUNNING == TRUE)
328
drop()
329
write_score()
330
reset()
331
WAIT_FOR_SCROLL_CHANGE
332
END_WHILE
333
ATTACKMODE HID STORAGE
334
END_FUNCTION
335
336
BUTTON_DEF
337
end_game()
338
END_BUTTON
339
340
play_game()
341
342