rubber-ducky 1.1 → 1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/gem-push.yml +23 -24
- data/Gemfile +2 -3
- data/README.md +1 -0
- data/examples/example1.rb +1 -1
- data/lib/languages/ar.json +182 -0
- data/lib/languages/se.json +41 -30
- data/lib/languages/si.json +44 -33
- data/lib/languages/sk.json +57 -45
- data/lib/languages/us.json +107 -1
- data/lib/rubber-ducky/decoder.rb +63 -19
- data/lib/rubber-ducky/version.rb +1 -0
- data/lib/rubber-ducky.rb +2 -1
- data/rubber-ducky.gemspec +2 -4
- metadata +6 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 455228bb92e303419712f5822167864f3a267948c99d5268e15828a8976b74ee
|
4
|
+
data.tar.gz: 3cf3c94d7fe77a10dd6e84113b2b9bf5a2b7932211f2f176a55ccf3940b76b91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c01ac49bd08f1e2df98d72d59a24cd21d2716ae2afd0fed09af8d516ad8d065145516ee904a498d15b9b1143d070498def376d3e1550e836c5bdfe3659c1f331
|
7
|
+
data.tar.gz: '048357cddb9874b82bdcdbee303640c9c73af71a8fbed5ae9207ecc205cd3b46f942421d360e35955e1d09f51eeb82da9d5794e964f384d3c02d13d3927dd2f9'
|
@@ -16,31 +16,30 @@ jobs:
|
|
16
16
|
|
17
17
|
steps:
|
18
18
|
- uses: actions/checkout@v4
|
19
|
-
|
20
|
-
- name: Set up Ruby
|
19
|
+
|
20
|
+
- name: Set up Ruby
|
21
21
|
uses: ruby/setup-ruby@v1
|
22
22
|
with:
|
23
|
-
ruby-version:
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
gem push *.gem
|
23
|
+
ruby-version: 3.1.0
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
- name: Check Ruby version
|
28
|
+
run: ruby --version
|
29
|
+
|
30
|
+
- name: Check gem version
|
31
|
+
run: gem --version
|
32
|
+
|
33
|
+
- name: Install Bundler with verbose output
|
34
|
+
run: gem install bundler --no-document --verbose
|
35
|
+
|
36
|
+
- name: Verify Bundler installation
|
37
|
+
run: bundler --version
|
38
|
+
|
39
|
+
- name: Build the gem
|
40
|
+
run: gem build *.gemspec
|
41
|
+
|
42
|
+
- name: Push to RubyGems
|
43
|
+
run: gem push *.gem
|
45
44
|
env:
|
46
45
|
GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -175,3 +175,4 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
|
|
175
175
|
|
176
176
|
Whether you're automating tasks with a Rubber Ducky or exploring new ways to interact with devices, the `rubber-ducky` Ruby library offers a powerful and flexible toolset to get the job done. Happy coding!
|
177
177
|
# rubber-ducky
|
178
|
+
# rubber-ducky
|
data/examples/example1.rb
CHANGED
@@ -0,0 +1,182 @@
|
|
1
|
+
{
|
2
|
+
"__comment":"ducktoolkit/languages/ar.json",
|
3
|
+
"__comment":"All numbers here are in hex format and 0x is ignored.",
|
4
|
+
"__comment":" ",
|
5
|
+
"__comment":"This list is in ascending order of 3rd byte (HID Usage ID).",
|
6
|
+
"__comment":" See section 10 Keyboard/Keypad Page (0x07)",
|
7
|
+
"__comment":" of document USB HID Usage Tables Version 1.12.",
|
8
|
+
"__comment":" ",
|
9
|
+
"__comment":"Definition of these 3 bytes can be found",
|
10
|
+
"__comment":" in section B.1 Protocol 1 (Keyboard)",
|
11
|
+
"__comment":" of document Device Class Definition for HID Version 1.11",
|
12
|
+
"__comment":" ",
|
13
|
+
"__comment":" - byte 1: Modifier keys",
|
14
|
+
"__comment":" - byte 2: Reserved",
|
15
|
+
"__comment":" - byte 3: Keycode 1",
|
16
|
+
"__comment":" ",
|
17
|
+
"__comment":"Both documents can be obtained from link here",
|
18
|
+
"__comment":" http://www.usb.org/developers/hidpage/",
|
19
|
+
"__comment":" ",
|
20
|
+
"__comment":"A = LeftShift + a, { = LeftShift + [",
|
21
|
+
"__comment":" ",
|
22
|
+
"a":"00,00,04",
|
23
|
+
"b":"00,00,05",
|
24
|
+
"c":"00,00,06",
|
25
|
+
"d":"00,00,07",
|
26
|
+
"e":"00,00,08",
|
27
|
+
"f":"00,00,09",
|
28
|
+
"g":"00,00,0a",
|
29
|
+
"h":"00,00,0b",
|
30
|
+
"i":"00,00,0c",
|
31
|
+
"j":"00,00,0d",
|
32
|
+
"k":"00,00,0e",
|
33
|
+
"l":"00,00,0f",
|
34
|
+
"m":"00,00,10",
|
35
|
+
"n":"00,00,11",
|
36
|
+
"o":"00,00,12",
|
37
|
+
"p":"00,00,13",
|
38
|
+
"q":"00,00,14",
|
39
|
+
"r":"00,00,15",
|
40
|
+
"s":"00,00,16",
|
41
|
+
"t":"00,00,17",
|
42
|
+
"u":"00,00,18",
|
43
|
+
"v":"00,00,19",
|
44
|
+
"w":"00,00,1a",
|
45
|
+
"x":"00,00,1b",
|
46
|
+
"y":"00,00,1c",
|
47
|
+
"z":"00,00,1d",
|
48
|
+
"1":"00,00,1e",
|
49
|
+
"2":"00,00,1f",
|
50
|
+
"3":"00,00,20",
|
51
|
+
"4":"00,00,21",
|
52
|
+
"5":"00,00,22",
|
53
|
+
"6":"00,00,23",
|
54
|
+
"7":"00,00,24",
|
55
|
+
"8":"00,00,25",
|
56
|
+
"9":"00,00,26",
|
57
|
+
"0":"00,00,27",
|
58
|
+
"ENTER":"00,00,28",
|
59
|
+
"ESC":"00,00,29",
|
60
|
+
"ESCAPE":"00,00,29",
|
61
|
+
"TAB":"00,00,2b",
|
62
|
+
" ":"00,00,2c",
|
63
|
+
"SPACE":"00,00,2c",
|
64
|
+
"-":"00,00,2d",
|
65
|
+
"=":"00,00,2e",
|
66
|
+
"[":"00,00,2f",
|
67
|
+
"]":"00,00,30",
|
68
|
+
"\\":"00,00,31",
|
69
|
+
";":"00,00,33",
|
70
|
+
"'":"00,00,34",
|
71
|
+
"`":"00,00,35",
|
72
|
+
",":"00,00,36",
|
73
|
+
".":"00,00,37",
|
74
|
+
"/":"00,00,38",
|
75
|
+
"CAPSLOCK":"00,00,39",
|
76
|
+
"F1":"00,00,3a",
|
77
|
+
"F2":"00,00,3b",
|
78
|
+
"F3":"00,00,3c",
|
79
|
+
"F4":"00,00,3d",
|
80
|
+
"F5":"00,00,3e",
|
81
|
+
"F6":"00,00,3f",
|
82
|
+
"F7":"00,00,40",
|
83
|
+
"F8":"00,00,41",
|
84
|
+
"F9":"00,00,42",
|
85
|
+
"F10":"00,00,43",
|
86
|
+
"F11":"00,00,44",
|
87
|
+
"F12":"00,00,45",
|
88
|
+
"PRINTSCREEN":"00,00,46",
|
89
|
+
"SCROLLLOCK":"00,00,47",
|
90
|
+
"BREAK":"00,00,48",
|
91
|
+
"PAUSE":"00,00,48",
|
92
|
+
"INSERT":"00,00,49",
|
93
|
+
"HOME":"00,00,4a",
|
94
|
+
"PAGEUP":"00,00,4b",
|
95
|
+
"DEL":"00,00,4c",
|
96
|
+
"DELETE":"00,00,4c",
|
97
|
+
"END":"00,00,4d",
|
98
|
+
"PAGEDOWN":"00,00,4e",
|
99
|
+
"RIGHT":"00,00,4f",
|
100
|
+
"RIGHTARROW":"00,00,4f",
|
101
|
+
"LEFT":"00,00,50",
|
102
|
+
"LEFTARROW":"00,00,50",
|
103
|
+
"DOWN":"00,00,51",
|
104
|
+
"DOWNARROW":"00,00,51",
|
105
|
+
"UP":"00,00,52",
|
106
|
+
"UPARROW":"00,00,52",
|
107
|
+
"APP":"00,00,65",
|
108
|
+
"MENU":"00,00,65",
|
109
|
+
"ALT-TAB":"00,00,71",
|
110
|
+
"CONTROL":"01,00,00",
|
111
|
+
"CTRL":"01,00,00",
|
112
|
+
"SHIFT":"02,00,00",
|
113
|
+
"A":"02,00,04",
|
114
|
+
"B":"02,00,05",
|
115
|
+
"C":"02,00,06",
|
116
|
+
"D":"02,00,07",
|
117
|
+
"E":"02,00,08",
|
118
|
+
"F":"02,00,09",
|
119
|
+
"G":"02,00,0a",
|
120
|
+
"H":"02,00,0b",
|
121
|
+
"I":"02,00,0c",
|
122
|
+
"J":"02,00,0d",
|
123
|
+
"K":"02,00,0e",
|
124
|
+
"L":"02,00,0f",
|
125
|
+
"M":"02,00,10",
|
126
|
+
"N":"02,00,11",
|
127
|
+
"O":"02,00,12",
|
128
|
+
"P":"02,00,13",
|
129
|
+
"Q":"02,00,14",
|
130
|
+
"R":"02,00,15",
|
131
|
+
"S":"02,00,16",
|
132
|
+
"T":"02,00,17",
|
133
|
+
"U":"02,00,18",
|
134
|
+
"V":"02,00,19",
|
135
|
+
"W":"02,00,1a",
|
136
|
+
"X":"02,00,1b",
|
137
|
+
"Y":"02,00,1c",
|
138
|
+
"Z":"02,00,1d",
|
139
|
+
"!":"02,00,1e",
|
140
|
+
"@":"02,00,1f",
|
141
|
+
"#":"02,00,20",
|
142
|
+
"$":"02,00,21",
|
143
|
+
"%":"02,00,22",
|
144
|
+
"^":"02,00,23",
|
145
|
+
"&":"02,00,24",
|
146
|
+
"*":"02,00,25",
|
147
|
+
"(":"02,00,26",
|
148
|
+
")":"02,00,27",
|
149
|
+
"_":"02,00,2d",
|
150
|
+
"+":"02,00,2e",
|
151
|
+
"{":"02,00,2f",
|
152
|
+
"}":"02,00,30",
|
153
|
+
"|":"02,00,31",
|
154
|
+
":":"02,00,33",
|
155
|
+
"\"":"02,00,34",
|
156
|
+
"~":"02,00,35",
|
157
|
+
"<":"02,00,36",
|
158
|
+
">":"02,00,37",
|
159
|
+
"?":"02,00,38",
|
160
|
+
"CTRL-SHIFT":"03,00,00",
|
161
|
+
"ALT":"04,00,00",
|
162
|
+
"CTRL-ALT":"05,00,00",
|
163
|
+
"ALT-SHIFT":"06,00,00",
|
164
|
+
"COMMAND":"08,00,00",
|
165
|
+
"GUI":"08,00,00",
|
166
|
+
"WINDOWS":"08,00,00",
|
167
|
+
"COMMAND-OPTION":"12,00,00",
|
168
|
+
"COMMAND-CTRL-SHIFT":"12,00,00",
|
169
|
+
"COMMAND-CTRL":"12,00,00",
|
170
|
+
"GUI R": "08,00,15",
|
171
|
+
"GUI D": "08,00,07",
|
172
|
+
"CTRL S": "01,00,16",
|
173
|
+
"CTRL V": "01,00,19",
|
174
|
+
"CTRL X": "01,00,1B",
|
175
|
+
"CTRL Z": "01,00,1D",
|
176
|
+
"CTRL C": "01,00,06",
|
177
|
+
"ALT F4": "04,00,3D",
|
178
|
+
"WAKE": "00,00,83",
|
179
|
+
"SLEEP": "00,00,82",
|
180
|
+
"STOP": "00,00,78",
|
181
|
+
"POWER": "00,00,66"
|
182
|
+
}
|
data/lib/languages/se.json
CHANGED
@@ -59,11 +59,17 @@
|
|
59
59
|
"TAB":"00,00,2b",
|
60
60
|
" ":"00,00,2c",
|
61
61
|
"SPACE":"00,00,2c",
|
62
|
-
"
|
63
|
-
"
|
62
|
+
"-":"00,00,2d",
|
63
|
+
"=":"00,00,2e",
|
64
|
+
"[":"00,00,2f",
|
65
|
+
"]":"00,00,30",
|
66
|
+
"\\":"00,00,31",
|
67
|
+
";":"00,00,33",
|
68
|
+
"'":"00,00,34",
|
69
|
+
"`":"00,00,35",
|
64
70
|
",":"00,00,36",
|
65
71
|
".":"00,00,37",
|
66
|
-
"
|
72
|
+
"/":"00,00,38",
|
67
73
|
"CAPSLOCK":"00,00,39",
|
68
74
|
"F1":"00,00,3a",
|
69
75
|
"F2":"00,00,3b",
|
@@ -96,7 +102,6 @@
|
|
96
102
|
"DOWNARROW":"00,00,51",
|
97
103
|
"UP":"00,00,52",
|
98
104
|
"UPARROW":"00,00,52",
|
99
|
-
"<":"00,00,64",
|
100
105
|
"APP":"00,00,65",
|
101
106
|
"MENU":"00,00,65",
|
102
107
|
"ALT-TAB":"00,00,71",
|
@@ -130,23 +135,26 @@
|
|
130
135
|
"Y":"02,00,1c",
|
131
136
|
"Z":"02,00,1d",
|
132
137
|
"!":"02,00,1e",
|
133
|
-
"
|
138
|
+
"@":"02,00,1f",
|
134
139
|
"#":"02,00,20",
|
135
|
-
"
|
140
|
+
"$":"02,00,21",
|
136
141
|
"%":"02,00,22",
|
137
|
-
"
|
138
|
-
"
|
139
|
-
"
|
140
|
-
"
|
141
|
-
"
|
142
|
-
"
|
143
|
-
"
|
144
|
-
"
|
145
|
-
"
|
146
|
-
"
|
147
|
-
":":"02,00,
|
148
|
-
"
|
149
|
-
"
|
142
|
+
"^":"02,00,23",
|
143
|
+
"&":"02,00,24",
|
144
|
+
"*":"02,00,25",
|
145
|
+
"(":"02,00,26",
|
146
|
+
")":"02,00,27",
|
147
|
+
"_":"02,00,2d",
|
148
|
+
"+":"02,00,2e",
|
149
|
+
"{":"02,00,2f",
|
150
|
+
"}":"02,00,30",
|
151
|
+
"|":"02,00,31",
|
152
|
+
":":"02,00,33",
|
153
|
+
"\"":"02,00,34",
|
154
|
+
"~":"02,00,35",
|
155
|
+
"<":"02,00,36",
|
156
|
+
">":"02,00,37",
|
157
|
+
"?":"02,00,38",
|
150
158
|
"CTRL-SHIFT":"03,00,00",
|
151
159
|
"ALT":"04,00,00",
|
152
160
|
"CTRL-ALT":"05,00,00",
|
@@ -155,15 +163,18 @@
|
|
155
163
|
"GUI":"08,00,00",
|
156
164
|
"WINDOWS":"08,00,00",
|
157
165
|
"COMMAND-OPTION":"12,00,00",
|
158
|
-
"
|
159
|
-
"
|
160
|
-
"
|
161
|
-
"
|
162
|
-
"
|
163
|
-
"
|
164
|
-
"
|
165
|
-
"
|
166
|
-
"
|
167
|
-
"
|
168
|
-
"
|
166
|
+
"COMMAND-CTRL-SHIFT":"12,00,00",
|
167
|
+
"COMMAND-CTRL":"12,00,00",
|
168
|
+
"GUI R": "08,00,15",
|
169
|
+
"GUI D": "08,00,07",
|
170
|
+
"CTRL S": "01,00,16",
|
171
|
+
"CTRL V": "01,00,19",
|
172
|
+
"CTRL X": "01,00,1B",
|
173
|
+
"CTRL Z": "01,00,1D",
|
174
|
+
"CTRL C": "01,00,06",
|
175
|
+
"ALT F4": "04,00,3D",
|
176
|
+
"WAKE": "00,00,83",
|
177
|
+
"SLEEP": "00,00,82",
|
178
|
+
"STOP": "00,00,78",
|
179
|
+
"POWER": "00,00,66"
|
169
180
|
}
|
data/lib/languages/si.json
CHANGED
@@ -41,8 +41,8 @@
|
|
41
41
|
"v":"00,00,19",
|
42
42
|
"w":"00,00,1a",
|
43
43
|
"x":"00,00,1b",
|
44
|
-
"
|
45
|
-
"
|
44
|
+
"y":"00,00,1c",
|
45
|
+
"z":"00,00,1d",
|
46
46
|
"1":"00,00,1e",
|
47
47
|
"2":"00,00,1f",
|
48
48
|
"3":"00,00,20",
|
@@ -59,11 +59,17 @@
|
|
59
59
|
"TAB":"00,00,2b",
|
60
60
|
" ":"00,00,2c",
|
61
61
|
"SPACE":"00,00,2c",
|
62
|
-
"
|
63
|
-
"
|
62
|
+
"-":"00,00,2d",
|
63
|
+
"=":"00,00,2e",
|
64
|
+
"[":"00,00,2f",
|
65
|
+
"]":"00,00,30",
|
66
|
+
"\\":"00,00,31",
|
67
|
+
";":"00,00,33",
|
68
|
+
"'":"00,00,34",
|
69
|
+
"`":"00,00,35",
|
64
70
|
",":"00,00,36",
|
65
71
|
".":"00,00,37",
|
66
|
-
"
|
72
|
+
"/":"00,00,38",
|
67
73
|
"CAPSLOCK":"00,00,39",
|
68
74
|
"F1":"00,00,3a",
|
69
75
|
"F2":"00,00,3b",
|
@@ -96,7 +102,6 @@
|
|
96
102
|
"DOWNARROW":"00,00,51",
|
97
103
|
"UP":"00,00,52",
|
98
104
|
"UPARROW":"00,00,52",
|
99
|
-
"<":"00,00,64",
|
100
105
|
"APP":"00,00,65",
|
101
106
|
"MENU":"00,00,65",
|
102
107
|
"ALT-TAB":"00,00,71",
|
@@ -127,24 +132,29 @@
|
|
127
132
|
"V":"02,00,19",
|
128
133
|
"W":"02,00,1a",
|
129
134
|
"X":"02,00,1b",
|
130
|
-
"
|
131
|
-
"
|
135
|
+
"Y":"02,00,1c",
|
136
|
+
"Z":"02,00,1d",
|
132
137
|
"!":"02,00,1e",
|
133
|
-
"
|
138
|
+
"@":"02,00,1f",
|
134
139
|
"#":"02,00,20",
|
135
140
|
"$":"02,00,21",
|
136
141
|
"%":"02,00,22",
|
137
|
-
"
|
138
|
-
"
|
139
|
-
"
|
140
|
-
"
|
141
|
-
"
|
142
|
-
"
|
143
|
-
"
|
144
|
-
"
|
145
|
-
"
|
146
|
-
"
|
147
|
-
"
|
142
|
+
"^":"02,00,23",
|
143
|
+
"&":"02,00,24",
|
144
|
+
"*":"02,00,25",
|
145
|
+
"(":"02,00,26",
|
146
|
+
")":"02,00,27",
|
147
|
+
"_":"02,00,2d",
|
148
|
+
"+":"02,00,2e",
|
149
|
+
"{":"02,00,2f",
|
150
|
+
"}":"02,00,30",
|
151
|
+
"|":"02,00,31",
|
152
|
+
":":"02,00,33",
|
153
|
+
"\"":"02,00,34",
|
154
|
+
"~":"02,00,35",
|
155
|
+
"<":"02,00,36",
|
156
|
+
">":"02,00,37",
|
157
|
+
"?":"02,00,38",
|
148
158
|
"CTRL-SHIFT":"03,00,00",
|
149
159
|
"ALT":"04,00,00",
|
150
160
|
"CTRL-ALT":"05,00,00",
|
@@ -153,17 +163,18 @@
|
|
153
163
|
"GUI":"08,00,00",
|
154
164
|
"WINDOWS":"08,00,00",
|
155
165
|
"COMMAND-OPTION":"12,00,00",
|
156
|
-
"
|
157
|
-
"
|
158
|
-
"
|
159
|
-
"
|
160
|
-
"
|
161
|
-
"
|
162
|
-
"
|
163
|
-
"
|
164
|
-
"
|
165
|
-
"
|
166
|
-
"
|
167
|
-
"
|
168
|
-
"
|
166
|
+
"COMMAND-CTRL-SHIFT":"12,00,00",
|
167
|
+
"COMMAND-CTRL":"12,00,00",
|
168
|
+
"GUI R": "08,00,15",
|
169
|
+
"GUI D": "08,00,07",
|
170
|
+
"CTRL S": "01,00,16",
|
171
|
+
"CTRL V": "01,00,19",
|
172
|
+
"CTRL X": "01,00,1B",
|
173
|
+
"CTRL Z": "01,00,1D",
|
174
|
+
"CTRL C": "01,00,06",
|
175
|
+
"ALT F4": "04,00,3D",
|
176
|
+
"WAKE": "00,00,83",
|
177
|
+
"SLEEP": "00,00,82",
|
178
|
+
"STOP": "00,00,78",
|
179
|
+
"POWER": "00,00,66"
|
169
180
|
}
|
data/lib/languages/sk.json
CHANGED
@@ -42,21 +42,35 @@
|
|
42
42
|
"v":"00,00,19",
|
43
43
|
"w":"00,00,1a",
|
44
44
|
"x":"00,00,1b",
|
45
|
-
"
|
46
|
-
"
|
47
|
-
"
|
45
|
+
"y":"00,00,1c",
|
46
|
+
"z":"00,00,1d",
|
47
|
+
"1":"00,00,1e",
|
48
|
+
"2":"00,00,1f",
|
49
|
+
"3":"00,00,20",
|
50
|
+
"4":"00,00,21",
|
51
|
+
"5":"00,00,22",
|
52
|
+
"6":"00,00,23",
|
53
|
+
"7":"00,00,24",
|
54
|
+
"8":"00,00,25",
|
55
|
+
"9":"00,00,26",
|
56
|
+
"0":"00,00,27",
|
48
57
|
"ENTER":"00,00,28",
|
49
58
|
"ESC":"00,00,29",
|
50
59
|
"ESCAPE":"00,00,29",
|
51
60
|
"TAB":"00,00,2b",
|
52
61
|
" ":"00,00,2c",
|
53
62
|
"SPACE":"00,00,2c",
|
54
|
-
"
|
55
|
-
"=":"00,00,
|
56
|
-
"
|
63
|
+
"-":"00,00,2d",
|
64
|
+
"=":"00,00,2e",
|
65
|
+
"[":"00,00,2f",
|
66
|
+
"]":"00,00,30",
|
67
|
+
"\\":"00,00,31",
|
68
|
+
";":"00,00,33",
|
69
|
+
"'":"00,00,34",
|
70
|
+
"`":"00,00,35",
|
57
71
|
",":"00,00,36",
|
58
72
|
".":"00,00,37",
|
59
|
-
"
|
73
|
+
"/":"00,00,38",
|
60
74
|
"CAPSLOCK":"00,00,39",
|
61
75
|
"F1":"00,00,3a",
|
62
76
|
"F2":"00,00,3b",
|
@@ -119,45 +133,32 @@
|
|
119
133
|
"V":"02,00,19",
|
120
134
|
"W":"02,00,1a",
|
121
135
|
"X":"02,00,1b",
|
122
|
-
"
|
123
|
-
"
|
124
|
-
"
|
125
|
-
"
|
126
|
-
"
|
127
|
-
"
|
128
|
-
"
|
129
|
-
"
|
130
|
-
"
|
131
|
-
"
|
132
|
-
"
|
133
|
-
"
|
134
|
-
"
|
135
|
-
"
|
136
|
-
"
|
137
|
-
"
|
138
|
-
"
|
139
|
-
"
|
140
|
-
"\"":"02,00,
|
141
|
-
"
|
142
|
-
"
|
143
|
-
"
|
144
|
-
"
|
145
|
-
"|":"05,00,1a",
|
146
|
-
"#":"05,00,1b",
|
147
|
-
"&":"05,00,06",
|
148
|
-
"@":"05,00,19",
|
149
|
-
"$":"05,00,33",
|
150
|
-
"*":"05,00,38",
|
151
|
-
"{":"05,00,05",
|
152
|
-
"}":"05,00,11",
|
153
|
-
"[":"05,00,09",
|
154
|
-
"]":"05,00,0a",
|
155
|
-
"~":"05,00,1e",
|
156
|
-
"^":"05,00,20",
|
157
|
-
"<":"05,00,36",
|
158
|
-
">":"05,00,37",
|
136
|
+
"Y":"02,00,1c",
|
137
|
+
"Z":"02,00,1d",
|
138
|
+
"!":"02,00,1e",
|
139
|
+
"@":"02,00,1f",
|
140
|
+
"#":"02,00,20",
|
141
|
+
"$":"02,00,21",
|
142
|
+
"%":"02,00,22",
|
143
|
+
"^":"02,00,23",
|
144
|
+
"&":"02,00,24",
|
145
|
+
"*":"02,00,25",
|
146
|
+
"(":"02,00,26",
|
147
|
+
")":"02,00,27",
|
148
|
+
"_":"02,00,2d",
|
149
|
+
"+":"02,00,2e",
|
150
|
+
"{":"02,00,2f",
|
151
|
+
"}":"02,00,30",
|
152
|
+
"|":"02,00,31",
|
153
|
+
":":"02,00,33",
|
154
|
+
"\"":"02,00,34",
|
155
|
+
"~":"02,00,35",
|
156
|
+
"<":"02,00,36",
|
157
|
+
">":"02,00,37",
|
158
|
+
"?":"02,00,38",
|
159
159
|
"CTRL-SHIFT":"03,00,00",
|
160
160
|
"ALT":"04,00,00",
|
161
|
+
"CTRL-ALT":"05,00,00",
|
161
162
|
"ALT-SHIFT":"06,00,00",
|
162
163
|
"COMMAND":"08,00,00",
|
163
164
|
"GUI":"08,00,00",
|
@@ -165,5 +166,16 @@
|
|
165
166
|
"COMMAND-OPTION":"12,00,00",
|
166
167
|
"COMMAND-CTRL-SHIFT":"12,00,00",
|
167
168
|
"COMMAND-CTRL":"12,00,00",
|
168
|
-
"
|
169
|
+
"GUI R": "08,00,15",
|
170
|
+
"GUI D": "08,00,07",
|
171
|
+
"CTRL S": "01,00,16",
|
172
|
+
"CTRL V": "01,00,19",
|
173
|
+
"CTRL X": "01,00,1B",
|
174
|
+
"CTRL Z": "01,00,1D",
|
175
|
+
"CTRL C": "01,00,06",
|
176
|
+
"ALT F4": "04,00,3D",
|
177
|
+
"WAKE": "00,00,83",
|
178
|
+
"SLEEP": "00,00,82",
|
179
|
+
"STOP": "00,00,78",
|
180
|
+
"POWER": "00,00,66"
|
169
181
|
}
|
data/lib/languages/us.json
CHANGED
@@ -9,6 +9,7 @@
|
|
9
9
|
"__comment":"Definition of these 3 bytes can be found",
|
10
10
|
"__comment":" in section B.1 Protocol 1 (Keyboard)",
|
11
11
|
"__comment":" of document Device Class Definition for HID Version 1.11",
|
12
|
+
"__comment":" ",
|
12
13
|
"__comment":" - byte 1: Modifier keys",
|
13
14
|
"__comment":" - byte 2: Reserved",
|
14
15
|
"__comment":" - byte 3: Keycode 1",
|
@@ -166,5 +167,110 @@
|
|
166
167
|
"COMMAND-OPTION":"12,00,00",
|
167
168
|
"COMMAND-CTRL-SHIFT":"12,00,00",
|
168
169
|
"COMMAND-CTRL":"12,00,00",
|
169
|
-
"
|
170
|
+
"GUI R": "08,00,15",
|
171
|
+
"GUI D": "08,00,07",
|
172
|
+
"CTRL S": "01,00,16",
|
173
|
+
"CTRL V": "01,00,19",
|
174
|
+
"CTRL X": "01,00,1B",
|
175
|
+
"CTRL Z": "01,00,1D",
|
176
|
+
"CTRL C": "01,00,06",
|
177
|
+
"ALT F4": "04,00,3D",
|
178
|
+
"WAKE": "00,00,83",
|
179
|
+
"SLEEP": "00,00,82",
|
180
|
+
"STOP": "00,00,78",
|
181
|
+
"POWER": "00,00,66",
|
182
|
+
"GUI R": "08,00,15",
|
183
|
+
"GUI D": "08,00,07",
|
184
|
+
"GUI E": "08,00,08",
|
185
|
+
"GUI L": "08,00,0F",
|
186
|
+
"GUI X": "08,00,1B",
|
187
|
+
"GUI I": "08,00,0C",
|
188
|
+
"GUI V": "08,00,19",
|
189
|
+
"GUI TAB": "08,00,2B",
|
190
|
+
"GUI SPACE": "08,00,2C",
|
191
|
+
"GUI DOT": "08,00,37",
|
192
|
+
"GUI PRINTSCREEN": "08,00,46",
|
193
|
+
"COMMAND SPACE": "08,00,2C",
|
194
|
+
"COMMAND TAB": "08,00,2B",
|
195
|
+
"COMMAND Q": "08,00,14",
|
196
|
+
"COMMAND W": "08,00,1A",
|
197
|
+
"COMMAND N": "08,00,11",
|
198
|
+
"COMMAND C": "08,00,06",
|
199
|
+
"COMMAND V": "08,00,19",
|
200
|
+
"COMMAND X": "08,00,1B",
|
201
|
+
"COMMAND Z": "08,00,1D",
|
202
|
+
"COMMAND SHIFT 3": "0A,00,20",
|
203
|
+
"COMMAND SHIFT 4": "0A,00,21",
|
204
|
+
"CTRL S": "01,00,16",
|
205
|
+
"CTRL O": "01,00,12",
|
206
|
+
"CTRL N": "01,00,11",
|
207
|
+
"CTRL P": "01,00,13",
|
208
|
+
"CTRL F": "01,00,09",
|
209
|
+
"CTRL H": "01,00,0B",
|
210
|
+
"CTRL A": "01,00,04",
|
211
|
+
"CTRL C": "01,00,06",
|
212
|
+
"CTRL V": "01,00,19",
|
213
|
+
"CTRL X": "01,00,1B",
|
214
|
+
"CTRL Z": "01,00,1D",
|
215
|
+
"CTRL Y": "01,00,1C",
|
216
|
+
"CTRL ESC": "01,00,29",
|
217
|
+
"CTRL ALT T": "05,00,17",
|
218
|
+
"CTRL ALT DEL": "05,00,4C",
|
219
|
+
"ALT F4": "04,00,3D",
|
220
|
+
"ALT TAB": "04,00,2B",
|
221
|
+
"ALT SPACE": "04,00,2C",
|
222
|
+
"ALT ENTER": "04,00,28",
|
223
|
+
"F1": "00,00,3A",
|
224
|
+
"F2": "00,00,3B",
|
225
|
+
"F3": "00,00,3C",
|
226
|
+
"F4": "00,00,3D",
|
227
|
+
"F5": "00,00,3E",
|
228
|
+
"F6": "00,00,3F",
|
229
|
+
"F11": "00,00,44",
|
230
|
+
"F12": "00,00,45",
|
231
|
+
"POWER": "00,00,66",
|
232
|
+
"SLEEP": "00,00,82",
|
233
|
+
"WAKE": "00,00,83",
|
234
|
+
"STOP": "00,00,78",
|
235
|
+
"VOLUMEUP": "00,00,80",
|
236
|
+
"VOLUMEDOWN": "00,00,81",
|
237
|
+
"MUTE": "00,00,7F",
|
238
|
+
"PLAYPAUSE": "00,00,7C",
|
239
|
+
"NEXTTRACK": "00,00,7D",
|
240
|
+
"PREVTRACK": "00,00,7E",
|
241
|
+
"HOME": "00,00,4A",
|
242
|
+
"MENU": "00,00,65",
|
243
|
+
"APP_SWITCH": "00,00,71",
|
244
|
+
"SEARCH": "00,00,70",
|
245
|
+
"CTRL SHIFT": "03,00,00",
|
246
|
+
"GUI SHIFT": "0A,00,00",
|
247
|
+
"CTRL ALT": "05,00,00",
|
248
|
+
"CTRL GUI": "09,00,00",
|
249
|
+
"ALT GUI": "0C,00,00",
|
250
|
+
"BRIGHTNESSUP": "00,00,6F",
|
251
|
+
"BRIGHTNESSDOWN": "00,00,70",
|
252
|
+
"EJECT": "00,00,68",
|
253
|
+
"CALCULATOR": "00,00,67",
|
254
|
+
"BROWSER_BACK": "00,00,8A",
|
255
|
+
"BROWSER_FWD": "00,00,8B",
|
256
|
+
"BROWSER_REF": "00,00,8C",
|
257
|
+
"BROWSER_HOME": "00,00,8D",
|
258
|
+
"F13": "00,00,68",
|
259
|
+
"F14": "00,00,69",
|
260
|
+
"F15": "00,00,6A",
|
261
|
+
"F16": "00,00,6B",
|
262
|
+
"F17": "00,00,6C",
|
263
|
+
"F18": "00,00,6D",
|
264
|
+
"F19": "00,00,6E",
|
265
|
+
"SYSTEM_POWER": "00,00,66",
|
266
|
+
"SYSTEM_SLEEP": "00,00,82",
|
267
|
+
"SYSTEM_WAKE": "00,00,83",
|
268
|
+
"cmdDELAY": "00,00,00",
|
269
|
+
"netsh": "00,00,01",
|
270
|
+
"advfirewall": "00,00,02",
|
271
|
+
"set": "00,00,03",
|
272
|
+
"allprofiles": "00,00,04",
|
273
|
+
"state": "00,00,05",
|
274
|
+
"offENTER": "00,00,06"
|
275
|
+
|
170
276
|
}
|
data/lib/rubber-ducky/decoder.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
+
# lib/rubber-ducky/decoder.rb
|
2
|
+
|
1
3
|
require 'json'
|
2
|
-
require 'base64'
|
3
4
|
require_relative 'common'
|
4
5
|
|
5
6
|
module Rubber
|
@@ -7,45 +8,88 @@ module Rubber
|
|
7
8
|
module Decoder
|
8
9
|
def self.decode(content, language)
|
9
10
|
lang_file = Common.load_language(language)
|
10
|
-
ducky_hex = content.unpack1('H*')
|
11
|
+
ducky_hex = content.unpack1('H*').upcase
|
11
12
|
decoded_bin = ""
|
12
|
-
|
13
|
+
current_string = ""
|
14
|
+
i = 0
|
13
15
|
|
14
|
-
|
15
|
-
decoded_key =
|
16
|
-
last_key = duck_decoded
|
16
|
+
while i < ducky_hex.length
|
17
|
+
decoded_key = nil
|
17
18
|
duck_decoded = ducky_hex[i, 4]
|
18
19
|
|
20
|
+
if duck_decoded == "00FF"
|
21
|
+
delay_value = 0
|
22
|
+
while duck_decoded == "00FF"
|
23
|
+
delay_value += 255
|
24
|
+
i += 4
|
25
|
+
duck_decoded = ducky_hex[i, 4] || "0000"
|
26
|
+
end
|
27
|
+
if duck_decoded[0, 2] == "00"
|
28
|
+
delay_byte = duck_decoded[2, 2]
|
29
|
+
delay_value += delay_byte.to_i(16)
|
30
|
+
i += 4
|
31
|
+
end
|
32
|
+
if current_string != ""
|
33
|
+
decoded_bin += "STRING #{current_string}\n"
|
34
|
+
current_string = ""
|
35
|
+
end
|
36
|
+
decoded_bin += "DELAY #{delay_value}\n"
|
37
|
+
next
|
38
|
+
end
|
39
|
+
|
19
40
|
lang_file.each do |key, value|
|
20
41
|
begin
|
21
42
|
new_value = value.split(',')
|
22
43
|
if new_value.length == 3
|
23
44
|
value = "#{new_value[2]}#{new_value[0]}"
|
24
45
|
end
|
25
|
-
rescue
|
46
|
+
rescue
|
26
47
|
next
|
27
48
|
end
|
28
49
|
|
29
|
-
|
50
|
+
value = value.upcase
|
51
|
+
|
52
|
+
if duck_decoded == "2C00"
|
30
53
|
decoded_key = " "
|
31
|
-
|
32
|
-
decoded_key = "DELAY"
|
54
|
+
break
|
33
55
|
elsif duck_decoded == value
|
34
56
|
decoded_key = key
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
end
|
40
|
-
end
|
57
|
+
break
|
58
|
+
elsif duck_decoded[-2, 2] == "00" && value[-2,2] == "00" && duck_decoded[0,2] == value[0,2]
|
59
|
+
decoded_key = key if key.length == 1
|
60
|
+
break
|
41
61
|
end
|
42
62
|
end
|
43
63
|
|
44
|
-
if
|
45
|
-
|
64
|
+
if decoded_key
|
65
|
+
if Common::DECODER_COMMAND_KEYS.include?(decoded_key.upcase)
|
66
|
+
if current_string != ""
|
67
|
+
decoded_bin += "STRING #{current_string}\n"
|
68
|
+
current_string = ""
|
69
|
+
end
|
70
|
+
decoded_bin += "#{decoded_key.upcase}\n"
|
71
|
+
elsif decoded_key.length == 1 || decoded_key == " "
|
72
|
+
current_string += decoded_key
|
73
|
+
else
|
74
|
+
if current_string != ""
|
75
|
+
decoded_bin += "STRING #{current_string}\n"
|
76
|
+
current_string = ""
|
77
|
+
end
|
78
|
+
decoded_bin += "#{decoded_key}\n"
|
79
|
+
end
|
46
80
|
else
|
47
|
-
|
81
|
+
if current_string != ""
|
82
|
+
decoded_bin += "STRING #{current_string}\n"
|
83
|
+
current_string = ""
|
84
|
+
end
|
85
|
+
decoded_bin += "UNKNOWN\n"
|
48
86
|
end
|
87
|
+
|
88
|
+
i += 4
|
89
|
+
end
|
90
|
+
|
91
|
+
if current_string != ""
|
92
|
+
decoded_bin += "STRING #{current_string}\n"
|
49
93
|
end
|
50
94
|
|
51
95
|
decoded_bin
|
data/lib/rubber-ducky/version.rb
CHANGED
data/lib/rubber-ducky.rb
CHANGED
data/rubber-ducky.gemspec
CHANGED
@@ -2,15 +2,14 @@ require File.expand_path('lib/rubber-ducky/version', __dir__)
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'rubber-ducky'
|
5
|
-
spec.version =
|
5
|
+
spec.version = '1.3'
|
6
6
|
spec.authors = 'MAVEN'
|
7
|
-
spec.email = 'aszda33@gmail.com'
|
8
7
|
spec.summary = 'A Ruby library for encoding and decoding Rubber Ducky scripts.'
|
9
8
|
spec.description = 'This gem allows you to encode and decode Rubber Ducky scripts for penetration testing purposes.'
|
10
9
|
spec.homepage = 'https://github.com/Abo5/rubber-ducky'
|
11
10
|
spec.license = 'MIT'
|
12
11
|
spec.platform = Gem::Platform::RUBY
|
13
|
-
spec.required_ruby_version = '>= 2.
|
12
|
+
spec.required_ruby_version = '>= 2.5.0'
|
14
13
|
|
15
14
|
# Include all files from git tracking, excluding test, spec, and features
|
16
15
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
@@ -24,7 +23,6 @@ Gem::Specification.new do |spec|
|
|
24
23
|
|
25
24
|
# Define runtime and development dependencies
|
26
25
|
spec.add_runtime_dependency 'json', '~> 2.0'
|
27
|
-
spec.add_runtime_dependency 'base64', '~> 2.7.1'
|
28
26
|
|
29
27
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
30
28
|
spec.add_development_dependency 'rake', '~> 13.0'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubber-ducky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MAVEN
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: base64
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 2.7.1
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 2.7.1
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: bundler
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,7 +68,7 @@ dependencies:
|
|
82
68
|
version: '3.0'
|
83
69
|
description: This gem allows you to encode and decode Rubber Ducky scripts for penetration
|
84
70
|
testing purposes.
|
85
|
-
email:
|
71
|
+
email:
|
86
72
|
executables: []
|
87
73
|
extensions: []
|
88
74
|
extra_rdoc_files: []
|
@@ -98,6 +84,7 @@ files:
|
|
98
84
|
- README.md
|
99
85
|
- Rakefile
|
100
86
|
- examples/example1.rb
|
87
|
+
- lib/languages/ar.json
|
101
88
|
- lib/languages/be.json
|
102
89
|
- lib/languages/br.json
|
103
90
|
- lib/languages/ca-fr.json
|
@@ -138,14 +125,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
138
125
|
requirements:
|
139
126
|
- - ">="
|
140
127
|
- !ruby/object:Gem::Version
|
141
|
-
version: 2.
|
128
|
+
version: 2.5.0
|
142
129
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
130
|
requirements:
|
144
131
|
- - ">="
|
145
132
|
- !ruby/object:Gem::Version
|
146
133
|
version: '0'
|
147
134
|
requirements: []
|
148
|
-
rubygems_version: 3.
|
135
|
+
rubygems_version: 3.3.3
|
149
136
|
signing_key:
|
150
137
|
specification_version: 4
|
151
138
|
summary: A Ruby library for encoding and decoding Rubber Ducky scripts.
|