pwn 0.4.459 → 0.4.460

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 34af764fdd574b15da3c45adb4097933e47a3aaca2de6dcb4c8f8005b6608f1d
4
- data.tar.gz: 5bf7e7551c6c62d12a2c2811493034ba31a0545f59aa3a72483aa3701b04b626
3
+ metadata.gz: 4aff2b2297397beff4fba5e51932807f004fc20a7887e841f86a108e2c172963
4
+ data.tar.gz: fd217091245e04376f6355e9ae95f7e78a6611b01446f855291843631cb89891
5
5
  SHA512:
6
- metadata.gz: 95f9def16df7e14a69731c08b4b7f4d3cf5e9e2e4b2c618b7c5b75dfba4bbbeed142f2aa03328ef3412c8bc95bc5ee87292ded504adc2d50d197113ce80c648d
7
- data.tar.gz: 98d0f7cc871533e29b2c1321ae65ef48f56be4debc0bad1cb0617504567e0b12adf1d363c295746c5c1241c3666b42e95a46eaded7028467228cb799d0a33416
6
+ metadata.gz: 3818021d9ceac8a67ecd67d59c71a483cdfff3048f44897f41f7ffb383ce46df038af62a9cebc0e19715fe465839c1dd95a0d6ffe2234ba63fd684cbc21aa6c9
7
+ data.tar.gz: 6c3c935cf2d5bc4590a28b6f8da486db377a16e3880af813835540a0adbdfe54f6e959aea8a9c1083feab9eb4e405e42b38ee3919b7b89f098a0b2bbc6333d39
data/Gemfile CHANGED
@@ -59,7 +59,7 @@ gem 'rex', '2.0.13'
59
59
  gem 'rmagick', '4.2.5'
60
60
  gem 'rspec', '3.11.0'
61
61
  gem 'rtesseract', '3.1.2'
62
- gem 'rubocop', '1.29.1'
62
+ gem 'rubocop', '1.30.0'
63
63
  gem 'rubocop-rake', '0.6.0'
64
64
  gem 'rubocop-rspec', '2.11.1'
65
65
  gem 'ruby-audio', '1.6.1'
data/README.md CHANGED
@@ -37,7 +37,7 @@ $ rvm use ruby-3.1.2@pwn
37
37
  $ rvm list gemsets
38
38
  $ gem install --verbose pwn
39
39
  $ pwn
40
- pwn[v0.4.459]:001 >>> PWN.help
40
+ pwn[v0.4.460]:001 >>> PWN.help
41
41
  ```
42
42
 
43
43
  [![Installing the pwn Security Automation Framework](https://raw.githubusercontent.com/0dayInc/pwn/master/documentation/pwn_install.png)](https://youtu.be/G7iLUY4FzsI)
@@ -52,7 +52,7 @@ $ rvm use ruby-3.1.2@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.4.459]:001 >>> PWN.help
55
+ pwn[v0.4.460]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
 
@@ -35,7 +35,7 @@ serial_obj = PWN::Plugins::Serial.connect
35
35
 
36
36
  PWN::Plugins::Serial.request(
37
37
  serial_obj: serial_obj,
38
- request: "ATDT#{voicemail_num};\r\n"
38
+ payload: "ATDT#{voicemail_num};\r\n"
39
39
  )
40
40
 
41
41
  # TODO: Loop until data received indicates call picked up instead of sleep
@@ -44,18 +44,18 @@ sleep 13
44
44
  voicemail_pin.each_char do |pin_char|
45
45
  PWN::Plugins::Serial.request(
46
46
  serial_obj: serial_obj,
47
- request: "AT+VTS=#{pin_char}\r\n"
47
+ payload: "AT+VTS=#{pin_char}\r\n"
48
48
  )
49
49
  end
50
50
 
51
51
  PWN::Plugins::Serial.request(
52
52
  serial_obj: serial_obj,
53
- request: "AT+VTS=#\r\n"
53
+ payload: "AT+VTS=#\r\n"
54
54
  )
55
55
 
56
56
  PWN::Plugins::Serial.request(
57
57
  serial_obj: serial_obj,
58
- request: "AT+CHUP;\r\n"
58
+ payload: "AT+CHUP;\r\n"
59
59
  )
60
60
 
61
61
  session_data = PWN::Plugins::Serial.dump_session_data
@@ -7,7 +7,7 @@ serial_obj = PWN::Plugins::Serial.connect
7
7
 
8
8
  PWN::Plugins::Serial.request(
9
9
  serial_obj: serial_obj,
10
- request: "AT+CLAC\r\n"
10
+ payload: "AT+CLAC\r\n"
11
11
  )
12
12
 
13
13
  session_data = PWN::Plugins::Serial.dump_session_data
@@ -63,28 +63,28 @@ module PWN
63
63
  case mode
64
64
  when 'BBI01'
65
65
  # Enter reset binary mode
66
- PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, request: '\x00')
66
+ PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, byte_arr: [0x00])
67
67
  when 'SPI1'
68
68
  # Enter binary SPI mode
69
- PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, request: '\x01')
69
+ PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, byte_arr: [0x01])
70
70
  when 'I2C1'
71
71
  # Enter I2C mode
72
- PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, request: '\x02')
72
+ PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, byte_arr: [0x02])
73
73
  when 'ART1'
74
74
  # Enter UART mode
75
- PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, request: '\x03')
75
+ PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, byte_arr: [0x03])
76
76
  when '1W01'
77
77
  # Enter 1-Wire mode
78
- PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, request: '\x04')
78
+ PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, byte_arr: [0x04])
79
79
  when 'RAW1'
80
80
  # Enter raw-wire mode
81
- PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, request: '\x05')
81
+ PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, byte_arr: [0x05])
82
82
  when 'RESET'
83
83
  # Reset Bus Pirate
84
- PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, request: '\x0F')
84
+ PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, byte_arr: [0x0F])
85
85
  when 'STEST'
86
86
  # Bus Pirate self-tests
87
- PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, request: '\x10')
87
+ PWN::Plugins::Serial.request(serial_obj: bus_pirate_obj, byte_arr: [0x10])
88
88
  else
89
89
  raise "Invalid mode: #{mode}"
90
90
  end
@@ -9,15 +9,18 @@ module PWN
9
9
  # msr206_obj = PWN::Plugins::MSR206.connect(
10
10
  # block_dev: 'optional - serial block device path (defaults to /dev/ttyUSB0)',
11
11
  # baud: 'optional - (defaults to 9600)',
12
- # data_bits: 'optional - (defaults to 8)',
12
+ # data_bits: 'optional - (defaults to 7)',
13
13
  # stop_bits: 'optional - (defaults to 1)',
14
- # parity: 'optional - (defaults to SerialPort::NONE)',
14
+ # parity: 'optional - (defaults to SerialPort::ODD)',
15
15
  # flow_control: 'optional - (defaults to SerialPort::HARD) SerialPort::NONE|SerialPort::SOFT|SerialPort::HARD'
16
16
  # )
17
17
 
18
18
  public_class_method def self.connect(opts = {})
19
19
  # Default Baud Rate for this Device is 19200
20
- opts[:baud] = 19_200 if opts[:baud].nil?
20
+ opts[:baud] = 9_600 unless opts[:baud]
21
+ opts[:data_bits] = 7 unless opts[:data_bits]
22
+ opts[:stop_bits] = 1 unless opts[:stop_bits]
23
+ opts[:parity] = :odd unless opts[:parity]
21
24
  msr206_obj = PWN::Plugins::Serial.connect(opts)
22
25
  rescue StandardError => e
23
26
  disconnect(msr206_obj: msr206_obj) unless msr206_obj.nil?
@@ -88,47 +91,6 @@ module PWN
88
91
  raise e
89
92
  end
90
93
 
91
- # Supported Method Parameters::
92
- # cmd_response_arr = get_cmd_responses(
93
- # msr206_obj: 'required - msr206_obj returned from #connect method'
94
- # )
95
-
96
- public_class_method def self.get_cmd_responses(opts = {})
97
- msr206_obj = opts[:msr206_obj]
98
-
99
- raw_byte_arr = PWN::Plugins::Serial.dump_session_data(
100
- serial_obj: msr206_obj
101
- )
102
-
103
- hex_esc_raw_resp = ''
104
- raw_byte_arr.each do |byte|
105
- this_byte = byte.unpack1('H*')
106
- # Needed when #unpack1 returns 2 bytes instead of one
107
- # e.g."ް" translates to deb0 (that's not a double quote ")
108
- # instead of de b0
109
- # this condition is ghetto-hacker-ish.
110
- if this_byte.length == 4
111
- byte_one = this_byte[1..2]
112
- byte_two = this_byte[-2..-1]
113
- hex_esc_raw_resp = "#{hex_esc_raw_resp}\s#{byte_one}"
114
- hex_esc_raw_resp = "#{hex_esc_raw_resp}\s#{byte_two}"
115
- else
116
- hex_esc_raw_resp = "#{hex_esc_raw_resp}\s#{this_byte}"
117
- end
118
- end
119
-
120
- # Return command response array in space-delimited hex
121
- cmd_response_arr = hex_esc_raw_resp.upcase.strip.split(/(?=FF)/)
122
- cmd_response_arr.map(&:strip)
123
- rescue StandardError => e
124
- # Flush Responses for Next Request
125
- PWN::Plugins::Serial.flush_session_data(
126
- serial_obj: msr206_obj
127
- )
128
-
129
- raise e
130
- end
131
-
132
94
  # Supported Method Parameters::
133
95
  # parsed_cmd_resp_arr = parse_responses(
134
96
  # cmd_resp: 'required - command response string'
@@ -150,10 +112,9 @@ module PWN
150
112
 
151
113
  while keep_parsing_responses
152
114
  until next_response_detected
153
- all_cmd_responses = get_cmd_responses(
154
- msr206_obj: msr206_obj
155
- )
156
- # bytes_in_cmd_resp = cmd_resp.split.length if cmd_resp
115
+ all_cmd_responses = PWN::Plugins::Serial.response(serial_obj: msr206_obj)
116
+ cmd_resp = all_cmd_responses.last
117
+ bytes_in_cmd_resp = cmd_resp.split.length if cmd_resp
157
118
  a_cmd_r_len = all_cmd_responses.length
158
119
 
159
120
  next_response_detected = true if a_cmd_r_len > last_a_cmd_r_len
@@ -175,9 +136,7 @@ module PWN
175
136
  raise e
176
137
  ensure
177
138
  # Flush Responses for Next Request
178
- PWN::Plugins::Serial.flush_session_data(
179
- serial_obj: msr206_obj
180
- )
139
+ PWN::Plugins::Serial.flush_session_data
181
140
  end
182
141
 
183
142
  # Supported Method Parameters::
@@ -211,8 +170,6 @@ module PWN
211
170
  cmd_bytes = [0x29]
212
171
  when :version_report
213
172
  cmd_bytes = [0x39]
214
- when :power_on_report
215
- cmd_bytes = [0x3A]
216
173
  when :set_write_density
217
174
  cmd_bytes = [0x3B]
218
175
  when :set_temp_write_current
@@ -304,9 +261,10 @@ module PWN
304
261
  # If parameters to a command are set, append them.
305
262
  cmd_bytes += params_bytes unless params_bytes.empty?
306
263
  # Execute the command.
307
- cmd_bytes.each do |byte|
308
- msr206_obj[:serial_conn].putc(byte)
309
- end
264
+ PWN::Plugins::Serial.request(
265
+ serial_obj: msr206_obj,
266
+ payload: cmd_bytes
267
+ )
310
268
 
311
269
  # Parse commands response(s).
312
270
  # Return an array of hashes.
@@ -316,6 +274,9 @@ module PWN
316
274
  )
317
275
  rescue StandardError => e
318
276
  raise e
277
+ ensure
278
+ # Flush Responses for Next Request
279
+ PWN::Plugins::Serial.flush_session_data
319
280
  end
320
281
 
321
282
  # Supported Method Parameters::
@@ -346,9 +307,9 @@ module PWN
346
307
  msr206_obj = #{self}.connect(
347
308
  block_dev: 'optional serial block device path (defaults to /dev/ttyUSB0)',
348
309
  baud: 'optional (defaults to 9600)',
349
- data_bits: 'optional (defaults to 8)',
310
+ data_bits: 'optional (defaults to 7)',
350
311
  stop_bits: 'optional (defaults to 1)',
351
- parity: 'optional (defaults to SerialPort::NONE)',
312
+ parity: 'optional (defaults to SerialPort::ODD)',
352
313
  flow_control: 'optional (defaults to SerialPort::NONE)'
353
314
  )
354
315
 
@@ -8,7 +8,6 @@ module PWN
8
8
  # This plugin is used for interacting with serial devices including, but not limited to,
9
9
  # modems (including cellphone radios), legacy equipment, arduinos, & other misc ftdi devices
10
10
  module Serial
11
- # @session_data = ""
12
11
  @session_data = []
13
12
 
14
13
  # Supported Method Parameters::
@@ -45,17 +44,27 @@ module PWN
45
44
  opts[:stop_bits].to_i
46
45
  end
47
46
 
48
- parity = if opts[:parity].nil?
49
- SerialPort::NONE
50
- else
51
- opts[:parity]
52
- end
47
+ case opts[:parity]
48
+ when :even
49
+ parity = SerialPort::EVEN
50
+ when :mark
51
+ parity = SerialPort::MARK
52
+ when :odd
53
+ parity = SerialPort::ODD
54
+ when :space
55
+ parity = SerialPort::SPACE
56
+ else
57
+ parity = SerialPort::NONE
58
+ end
53
59
 
54
- flow_control = if opts[:flow_control].nil?
55
- SerialPort::HARD
56
- else
57
- opts[:flow_control]
58
- end
60
+ case opts[:flow_control]
61
+ when :hard
62
+ flow_control = SerialPort::HARD
63
+ when :soft
64
+ flow_control = SerialPort::SOFT
65
+ else
66
+ flow_control = SerialPort::NONE
67
+ end
59
68
 
60
69
  serial_conn = SerialPort.new(
61
70
  block_dev,
@@ -138,21 +147,39 @@ module PWN
138
147
  # Supported Method Parameters::
139
148
  # PWN::Plugins::Serial.request(
140
149
  # serial_obj: 'required serial_obj returned from #connect method',
141
- # request: 'required - string to write to serial device'
150
+ # payload: 'required - array of bytes OR string to write to serial device (e.g. [0x00, 0x41, 0x90, 0x00] OR "ATDT+15555555\r\n"'
142
151
  # )
143
152
 
144
153
  public_class_method def self.request(opts = {})
145
154
  serial_obj = opts[:serial_obj]
146
- request = opts[:request].to_s.scrub
155
+ payload = opts[:payload]
147
156
  serial_conn = serial_obj[:serial_conn]
148
- chars_written = serial_conn.write(request)
157
+
158
+ byte_arr = payload
159
+ byte_arr = payload.chars if payload.instance_of?(String)
160
+
161
+ byte_arr.each do |byte|
162
+ serial_conn.putc(byte)
163
+ end
164
+
149
165
  serial_conn.flush
150
- chars_written
151
166
  rescue StandardError => e
152
167
  disconnect(serial_obj: serial_obj) unless serial_obj.nil?
153
168
  raise e
154
169
  end
155
170
 
171
+ # public_class_method def self.request(opts = {})
172
+ # serial_obj = opts[:serial_obj]
173
+ # request = opts[:request].to_s.scrub
174
+ # serial_conn = serial_obj[:serial_conn]
175
+ # chars_written = serial_conn.write(request)
176
+ # serial_conn.flush
177
+ # chars_written
178
+ # rescue StandardError => e
179
+ # disconnect(serial_obj: serial_obj) unless serial_obj.nil?
180
+ # raise e
181
+ # end
182
+
156
183
  # Supported Method Parameters::
157
184
  # PWN::Plugins::Serial.response(
158
185
  # serial_obj: 'required - serial_obj returned from #connect method'
@@ -160,37 +187,60 @@ module PWN
160
187
 
161
188
  public_class_method def self.response(opts = {})
162
189
  serial_obj = opts[:serial_obj]
163
- @session_data.last
190
+
191
+ raw_byte_arr = dump_session_data
192
+
193
+ hex_esc_raw_resp = ''
194
+ raw_byte_arr.each do |byte|
195
+ # this_byte = "\s#{byte.unpack1('H*')}"
196
+ this_byte = byte.unpack1('H*')
197
+ # Needed when #unpack1 returns 2 bytes instead of one
198
+ # e.g."ް" translates to deb0 (that's not a double quote ")
199
+ # instead of de b0
200
+ # this condition is ghetto-hacker-ish.
201
+ if this_byte.length == 4
202
+ byte_one = this_byte[1..2]
203
+ byte_two = this_byte[-2..-1]
204
+ hex_esc_raw_resp = "#{hex_esc_raw_resp}\s#{byte_one}"
205
+ hex_esc_raw_resp = "#{hex_esc_raw_resp}\s#{byte_two}"
206
+ else
207
+ hex_esc_raw_resp = "#{hex_esc_raw_resp}\s#{this_byte}"
208
+ end
209
+ end
210
+
211
+ # Return command response array in space-delimited hex
212
+ cmd_response_arr = hex_esc_raw_resp.upcase.strip.split(/(?=FF)/)
213
+ cmd_response_arr.map(&:strip)
164
214
  rescue StandardError => e
165
- disconnect(serial_obj: serial_obj) unless serial_obj.nil?
215
+ # Flush Responses for Next Request
216
+ flush_session_data(serial_obj: serial_obj)
217
+
166
218
  raise e
167
219
  end
168
220
 
169
- # Supported Method Parameters::
170
- # session_data = PWN::Plugins::Serial.dump_session_data(
171
- # serial_obj: 'required - serial_obj returned from #connect method'
172
- # )
221
+ # public_class_method def self.response(opts = {})
222
+ # serial_obj = opts[:serial_obj]
223
+ # @session_data.last
224
+ # rescue StandardError => e
225
+ # disconnect(serial_obj: serial_obj) unless serial_obj.nil?
226
+ # raise e
227
+ # end
173
228
 
174
- public_class_method def self.dump_session_data(opts = {})
175
- serial_obj = opts[:serial_obj]
229
+ # Supported Method Parameters::
230
+ # session_data = PWN::Plugins::Serial.dump_session_data
176
231
 
232
+ public_class_method def self.dump_session_data
177
233
  @session_data
178
234
  rescue StandardError => e
179
- disconnect(serial_obj: serial_obj) unless serial_obj.nil?
180
235
  raise e
181
236
  end
182
237
 
183
238
  # Supported Method Parameters::
184
- # session_data = PWN::Plugins::Serial.flush_session_data(
185
- # serial_obj: 'required - serial_obj returned from #connect method'
186
- # )
187
-
188
- public_class_method def self.flush_session_data(opts = {})
189
- serial_obj = opts[:serial_obj]
239
+ # session_data = PWN::Plugins::Serial.flush_session_data
190
240
 
241
+ public_class_method def self.flush_session_data
191
242
  @session_data.clear
192
243
  rescue StandardError => e
193
- disconnect(serial_obj: serial_obj) unless serial_obj.nil?
194
244
  raise e
195
245
  end
196
246
 
@@ -203,7 +253,7 @@ module PWN
203
253
  serial_obj = opts[:serial_obj]
204
254
  serial_conn = serial_obj[:serial_conn]
205
255
  session_thread = serial_obj[:session_thread]
206
- flush_session_data(serial_obj: serial_obj)
256
+ flush_session_data
207
257
  session_thread.terminate
208
258
  serial_conn.close
209
259
  serial_conn = nil
@@ -242,20 +292,16 @@ module PWN
242
292
 
243
293
  #{self}.request(
244
294
  serial_obj: 'required serial_obj returned from #connect method',
245
- request: 'required string to write to serial device'
295
+ payload: 'required - array of bytes OR string to write to serial device (e.g. [0x00, 0x41, 0x90, 0x00] OR \"ATDT+15555555\r\n\"'
246
296
  )
247
297
 
248
298
  #{self}.response(
249
299
  serial_obj: 'required serial_obj returned from #connect method'
250
300
  )
251
301
 
252
- session_data_arr = #{self}.dump_session_data(
253
- serial_obj: 'required serial_obj returned from #connect method'
254
- )
302
+ session_data_arr = #{self}.dump_session_data
255
303
 
256
304
  #{self}.flush_session_data
257
- serial_obj: 'required serial_obj returned from #connect method'
258
- )
259
305
 
260
306
  #{self}.disconnect(
261
307
  serial_obj: 'required serial_obj returned from #connect method'
@@ -8,7 +8,7 @@ module PWN
8
8
  # Supported Method Parameters::
9
9
  # son_micro_rfid_obj = PWN::Plugins::SonMicroRFID.connect(
10
10
  # block_dev: 'optional - serial block device path (defaults to /dev/ttyUSB0)',
11
- # baud: 'optional - (defaults to 9600)',
11
+ # baud: 'optional - (defaults to 19_200)',
12
12
  # data_bits: 'optional - (defaults to 8)',
13
13
  # stop_bits: 'optional - (defaults to 1)',
14
14
  # parity: 'optional - (defaults to SerialPort::NONE)',
@@ -17,7 +17,10 @@ module PWN
17
17
 
18
18
  public_class_method def self.connect(opts = {})
19
19
  # Default Baud Rate for this Device is 19200
20
- opts[:baud] = 19_200 if opts[:baud].nil?
20
+ opts[:baud] = 19_200 unless opts[:baud]
21
+ opts[:data_bits] = 8 unless opts[:data_bits]
22
+ opts[:stop_bits] = 1 unless opts[:stop_bits]
23
+ opts[:parity] = :none unless opts[:parity]
21
24
  son_micro_rfid_obj = PWN::Plugins::Serial.connect(opts)
22
25
  rescue StandardError => e
23
26
  disconnect(son_micro_rfid_obj: son_micro_rfid_obj) unless son_micro_rfid_obj.nil?
@@ -108,50 +111,9 @@ module PWN
108
111
  raise e
109
112
  end
110
113
 
111
- # Supported Method Parameters::
112
- # cmd_response_arr = get_cmd_responses(
113
- # son_micro_rfid_obj: 'required - son_micro_rfid_obj returned from #connect method'
114
- # )
115
-
116
- public_class_method def self.get_cmd_responses(opts = {})
117
- son_micro_rfid_obj = opts[:son_micro_rfid_obj]
118
-
119
- raw_byte_arr = PWN::Plugins::Serial.dump_session_data(
120
- serial_obj: son_micro_rfid_obj
121
- )
122
-
123
- hex_esc_raw_resp = ''
124
- raw_byte_arr.each do |byte|
125
- # this_byte = "\s#{byte.unpack1('H*')}"
126
- this_byte = byte.unpack1('H*')
127
- # Needed when #unpack1 returns 2 bytes instead of one
128
- # e.g."ް" translates to deb0 (that's not a double quote ")
129
- # instead of de b0
130
- # this condition is ghetto-hacker-ish.
131
- if this_byte.length == 4
132
- byte_one = this_byte[1..2]
133
- byte_two = this_byte[-2..-1]
134
- hex_esc_raw_resp = "#{hex_esc_raw_resp}\s#{byte_one}"
135
- hex_esc_raw_resp = "#{hex_esc_raw_resp}\s#{byte_two}"
136
- else
137
- hex_esc_raw_resp = "#{hex_esc_raw_resp}\s#{this_byte}"
138
- end
139
- end
140
-
141
- # Return command response array in space-delimited hex
142
- cmd_response_arr = hex_esc_raw_resp.upcase.strip.split(/(?=FF)/)
143
- cmd_response_arr.map(&:strip)
144
- rescue StandardError => e
145
- # Flush Responses for Next Request
146
- PWN::Plugins::Serial.flush_session_data(
147
- serial_obj: son_micro_rfid_obj
148
- )
149
-
150
- raise e
151
- end
152
-
153
114
  # Supported Method Parameters::
154
115
  # parsed_cmd_resp_arr = parse_responses(
116
+ # son_micro_rfid_obj: 'required - son_micro_rfid_obj returned from #connect method'
155
117
  # cmd_resp: 'required - command response string'
156
118
  # )
157
119
 
@@ -173,13 +135,14 @@ module PWN
173
135
  while keep_parsing_responses
174
136
  until next_response_detected
175
137
  print '.'
176
- all_cmd_responses = get_cmd_responses(
177
- son_micro_rfid_obj: son_micro_rfid_obj
138
+ all_cmd_responses = PWN::Plugins::Serial.response(
139
+ serial_obj: son_micro_rfid_obj
178
140
  )
179
141
  cmd_resp = all_cmd_responses.last
180
142
  bytes_in_cmd_resp = cmd_resp.split.length if cmd_resp
181
143
  a_cmd_r_len = all_cmd_responses.length
182
144
 
145
+ # Dont proceed until the expected_cmd_resp_byte_len byte appears
183
146
  next_response_detected = true if bytes_in_cmd_resp > 3 &&
184
147
  a_cmd_r_len > last_a_cmd_r_len
185
148
  end
@@ -194,8 +157,8 @@ module PWN
194
157
  cmd_hex = cmd_resp.split[3]
195
158
 
196
159
  while bytes_in_cmd_resp < expected_cmd_resp_byte_len
197
- all_cmd_responses = get_cmd_responses(
198
- son_micro_rfid_obj: son_micro_rfid_obj
160
+ all_cmd_responses = PWN::Plugins::Serial.response(
161
+ serial_obj: son_micro_rfid_obj
199
162
  )
200
163
 
201
164
  cmd_resp = all_cmd_responses.last
@@ -210,6 +173,7 @@ module PWN
210
173
  puts "#{all_cmd_responses}\n\n\n"
211
174
 
212
175
  parsed_cmd_resp_hash = {}
176
+ parsed_cmd_resp_hash[:raw_resp] = PWN::Plugins::Serial.dump_session_data.inspect
213
177
  parsed_cmd_resp_hash[:hex_resp] = cmd_resp
214
178
  parsed_cmd_resp_hash[:cmd_hex] = cmd_hex
215
179
  parsed_cmd_resp_hash[:cmd_desc] = cmd.to_sym
@@ -268,9 +232,7 @@ module PWN
268
232
  raise e
269
233
  ensure
270
234
  # Flush Responses for Next Request
271
- PWN::Plugins::Serial.flush_session_data(
272
- serial_obj: son_micro_rfid_obj
273
- )
235
+ PWN::Plugins::Serial.flush_session_data
274
236
  end
275
237
 
276
238
  # Supported Method Parameters::
@@ -355,9 +317,10 @@ module PWN
355
317
  # If parameters to a command are set, append them.
356
318
  cmd_bytes += params_bytes unless params_bytes.empty?
357
319
  # Execute the command.
358
- cmd_bytes.each do |byte|
359
- son_micro_rfid_obj[:serial_conn].putc(byte)
360
- end
320
+ PWN::Plugins::Serial.request(
321
+ serial_obj: son_micro_rfid_obj,
322
+ payload: cmd_bytes
323
+ )
361
324
 
362
325
  # Parse commands response(s).
363
326
  # Return an array of hashes.
@@ -369,9 +332,7 @@ module PWN
369
332
  raise e
370
333
  ensure
371
334
  # Flush Responses for Next Request
372
- PWN::Plugins::Serial.flush_session_data(
373
- serial_obj: son_micro_rfid_obj
374
- )
335
+ PWN::Plugins::Serial.flush_session_data
375
336
  end
376
337
 
377
338
  # Supported Method Parameters::
@@ -401,7 +362,7 @@ module PWN
401
362
  puts "USAGE:
402
363
  son_micro_rfid_obj = #{self}.connect(
403
364
  block_dev: 'optional serial block device path (defaults to /dev/ttyUSB0)',
404
- baud: 'optional (defaults to 9600)',
365
+ baud: 'optional (defaults to 19_200)',
405
366
  data_bits: 'optional (defaults to 8)',
406
367
  stop_bits: 'optional (defaults to 1)',
407
368
  parity: 'optional (defaults to SerialPort::NONE)',
data/lib/pwn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PWN
4
- VERSION = '0.4.459'
4
+ VERSION = '0.4.460'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.459
4
+ version: 0.4.460
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-25 00:00:00.000000000 Z
11
+ date: 2022-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -674,14 +674,14 @@ dependencies:
674
674
  requirements:
675
675
  - - '='
676
676
  - !ruby/object:Gem::Version
677
- version: 1.29.1
677
+ version: 1.30.0
678
678
  type: :runtime
679
679
  prerelease: false
680
680
  version_requirements: !ruby/object:Gem::Requirement
681
681
  requirements:
682
682
  - - '='
683
683
  - !ruby/object:Gem::Version
684
- version: 1.29.1
684
+ version: 1.30.0
685
685
  - !ruby/object:Gem::Dependency
686
686
  name: rubocop-rake
687
687
  requirement: !ruby/object:Gem::Requirement