pwn 0.5.79 → 0.5.81
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +5 -5
- data/Gemfile +4 -3
- data/README.md +3 -3
- data/bin/pwn_gqrx_scanner +32 -7
- data/lib/pwn/plugins/gqrx.rb +397 -1
- data/lib/pwn/version.rb +1 -1
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5abdcbe615c1ace43da0c9b750425cd6d33b202974a0ab0f1bcaa923e4400717
|
4
|
+
data.tar.gz: 14229570d88d75bab5e118b7774488e3ffd8ca4865b5cad22b0305f5984be74d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6f517aeb08388facf394722d531d34a9cd4d2eaff5c07551067d73ea3b9c88cf77c93f017f76410239643523590ba696c12728387b2cee29107ad656917962b
|
7
|
+
data.tar.gz: d0d3ba98d7d46093fddc407027327c5fff000b47303fdc615c75b553fe34878eccc343acea44f2c7f8424c56d9499ec8460047aa59362f48e15cadfd9d615378
|
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2024-
|
3
|
+
# on 2024-04-05 20:52:59 UTC using RuboCop version 1.62.1.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
@@ -17,7 +17,7 @@ Layout/LineContinuationSpacing:
|
|
17
17
|
- 'packer/provisioners/wpscan.rb'
|
18
18
|
- 'vagrant/provisioners/beef.rb'
|
19
19
|
|
20
|
-
# Offense count:
|
20
|
+
# Offense count: 21
|
21
21
|
# This cop supports safe autocorrection (--autocorrect).
|
22
22
|
# Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
|
23
23
|
# URISchemes: http, https
|
@@ -41,7 +41,7 @@ Lint/NestedMethodDefinition:
|
|
41
41
|
Exclude:
|
42
42
|
- 'lib/pwn/plugins/repl.rb'
|
43
43
|
|
44
|
-
# Offense count:
|
44
|
+
# Offense count: 310
|
45
45
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
46
46
|
# Configuration parameters: AutoCorrect.
|
47
47
|
Lint/UselessAssignment:
|
@@ -87,10 +87,10 @@ Metrics/ModuleLength:
|
|
87
87
|
- 'lib/pwn/banner/code_cave.rb'
|
88
88
|
- 'lib/pwn/plugins/android.rb'
|
89
89
|
- 'lib/pwn/plugins/black_duck_binary_analysis.rb'
|
90
|
+
- 'lib/pwn/plugins/gqrx.rb'
|
90
91
|
- 'lib/pwn/plugins/ibm_appscan.rb'
|
91
92
|
- 'lib/pwn/plugins/msr206.rb'
|
92
93
|
- 'lib/pwn/plugins/nessus_cloud.rb'
|
93
|
-
- 'lib/pwn/plugins/ollama.rb'
|
94
94
|
- 'lib/pwn/plugins/open_ai.rb'
|
95
95
|
- 'lib/pwn/plugins/packet.rb'
|
96
96
|
|
@@ -142,7 +142,7 @@ Style/RedundantStringEscape:
|
|
142
142
|
- 'lib/pwn/sast/redos.rb'
|
143
143
|
- 'vagrant/provisioners/kali_customize.rb'
|
144
144
|
|
145
|
-
# Offense count:
|
145
|
+
# Offense count: 50
|
146
146
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
147
147
|
Style/SlicingWithRange:
|
148
148
|
Enabled: false
|
data/Gemfile
CHANGED
@@ -34,11 +34,12 @@ gem 'gdb', '1.0.0'
|
|
34
34
|
gem 'gem-wrappers', '1.4.0'
|
35
35
|
gem 'gist', '6.0.0'
|
36
36
|
gem 'gruff', '0.24.0'
|
37
|
+
# gem 'hidapi', '0.1.9'
|
37
38
|
gem 'htmlentities', '4.3.4'
|
38
39
|
gem 'ipaddress', '0.8.3'
|
39
40
|
gem 'jenkins_api_client2', '1.9.0'
|
40
41
|
gem 'js-beautify', '0.1.8'
|
41
|
-
gem 'json', '2.7.
|
42
|
+
gem 'json', '2.7.2'
|
42
43
|
gem 'jsonpath', '1.1.5'
|
43
44
|
gem 'jwt', '2.8.1'
|
44
45
|
gem 'libusb', '0.6.4'
|
@@ -63,7 +64,7 @@ gem 'pdf-reader', '2.12.0'
|
|
63
64
|
gem 'pg', '1.5.6'
|
64
65
|
gem 'pry', '0.14.2'
|
65
66
|
gem 'pry-doc', '1.5.0'
|
66
|
-
gem 'rake', '13.2.
|
67
|
+
gem 'rake', '13.2.1'
|
67
68
|
gem 'rb-readline', '0.5.5'
|
68
69
|
gem 'rbvmomi', '3.0.0'
|
69
70
|
gem 'rdoc', '6.6.3.1'
|
@@ -75,7 +76,7 @@ gem 'rspec', '3.13.0'
|
|
75
76
|
gem 'rtesseract', '3.1.3'
|
76
77
|
gem 'rubocop', '1.62.1'
|
77
78
|
gem 'rubocop-rake', '0.6.0'
|
78
|
-
gem 'rubocop-rspec', '2.
|
79
|
+
gem 'rubocop-rspec', '2.29.1'
|
79
80
|
gem 'ruby-audio', '1.6.1'
|
80
81
|
gem 'ruby-nmap', '1.0.3'
|
81
82
|
gem 'ruby-saml', '1.16.0'
|
data/README.md
CHANGED
@@ -37,7 +37,7 @@ $ cd /opt/pwn
|
|
37
37
|
$ ./install.sh
|
38
38
|
$ ./install.sh ruby-gem
|
39
39
|
$ pwn
|
40
|
-
pwn[v0.5.
|
40
|
+
pwn[v0.5.81]: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.3.0@pwn
|
|
52
52
|
$ gem uninstall --all --executables pwn
|
53
53
|
$ gem install --verbose pwn
|
54
54
|
$ pwn
|
55
|
-
pwn[v0.5.
|
55
|
+
pwn[v0.5.81]:001 >>> PWN.help
|
56
56
|
```
|
57
57
|
|
58
58
|
If you're using a multi-user install of RVM do:
|
@@ -62,7 +62,7 @@ $ rvm use ruby-3.3.0@pwn
|
|
62
62
|
$ rvmsudo gem uninstall --all --executables pwn
|
63
63
|
$ rvmsudo gem install --verbose pwn
|
64
64
|
$ pwn
|
65
|
-
pwn[v0.5.
|
65
|
+
pwn[v0.5.81]:001 >>> PWN.help
|
66
66
|
```
|
67
67
|
|
68
68
|
PWN periodically upgrades to the latest version of Ruby which is reflected in `/opt/pwn/.ruby-version`. The easiest way to upgrade to the latest version of Ruby from a previous PWN installation is to run the following script:
|
data/bin/pwn_gqrx_scanner
CHANGED
@@ -11,7 +11,15 @@ OptionParser.new do |options|
|
|
11
11
|
#{$PROGRAM_NAME} [opts]
|
12
12
|
"
|
13
13
|
|
14
|
-
options.on('-
|
14
|
+
options.on('-aPROFILE', '--assume-profile=PROFILE', '<Required if "--target-freq" is Nil - Profile to assume for common radio protocols. Use "--list-profiles" to display supported protocols (Defaults to nil)') do |p|
|
15
|
+
opts[:profile] = p
|
16
|
+
end
|
17
|
+
|
18
|
+
options.on('-l', '--list-profiles', '<Optional - List supported profiles and exit>') do |l|
|
19
|
+
opts[:list_profiles] = l
|
20
|
+
end
|
21
|
+
|
22
|
+
options.on('-tFREQ', '--target-freq=FREQ', '<Required if "--assume-profile" is Nil - Frequency to Conclude Scanning (e.g. 900.000.000 == 900 mHz>') do |e|
|
15
23
|
opts[:target_freq] = e
|
16
24
|
end
|
17
25
|
|
@@ -35,7 +43,7 @@ OptionParser.new do |options|
|
|
35
43
|
opts[:bandwidth] = b
|
36
44
|
end
|
37
45
|
|
38
|
-
options.on('-DMODE', '--demodulator-mode=MODE', '<Optional - Set Demodulator
|
46
|
+
options.on('-DMODE', '--demodulator-mode=MODE', '<Optional - Set Demodulator Mode OFF | RAW | AM | FM | WFM | WFM_ST | WFM_ST_OIRT | LSB | USB | CW | CWL | CWU (Defaults to WFM_ST)>') do |d|
|
39
47
|
opts[:demodulator_mode] = d
|
40
48
|
end
|
41
49
|
|
@@ -77,10 +85,20 @@ begin
|
|
77
85
|
pwn_provider = 'ruby-gem'
|
78
86
|
pwn_provider = ENV.fetch('PWN_PROVIDER') if ENV.keys.any? { |s| s == 'PWN_PROVIDER' }
|
79
87
|
|
88
|
+
list_profiles = opts[:list_profiles]
|
89
|
+
if list_profiles
|
90
|
+
profiles_available = PWN::Plugins::GQRX.list_profiles
|
91
|
+
puts JSON.pretty_generate(profiles_available)
|
92
|
+
exit 0
|
93
|
+
end
|
94
|
+
|
95
|
+
profile = opts[:profile]
|
96
|
+
opts = PWN::Plugins::GQRX.assume_profile(profile: profile) unless profile.nil?
|
97
|
+
|
80
98
|
target_freq = opts[:target_freq]
|
81
99
|
target_freq = target_freq.to_s.delete('.') unless target_freq.nil?
|
82
100
|
target_freq = target_freq.to_i
|
83
|
-
raise
|
101
|
+
raise 'ERROR: --assume-profile || --target-freq is required.' if target_freq.zero? && profile.nil?
|
84
102
|
|
85
103
|
host = opts[:host]
|
86
104
|
port = opts[:port]
|
@@ -91,11 +109,18 @@ begin
|
|
91
109
|
start_freq = opts[:start_freq]
|
92
110
|
start_freq = start_freq.to_s.delete('.') unless start_freq.nil?
|
93
111
|
start_freq = start_freq.to_i
|
94
|
-
|
112
|
+
if start_freq.zero?
|
113
|
+
start_freq = PWN::Plugins::GQRX.gqrx_cmd(
|
114
|
+
gqrx_sock: gqrx_sock, cmd: 'f',
|
115
|
+
resp_ok: 'RPRT 0'
|
116
|
+
).to_i
|
117
|
+
end
|
95
118
|
|
96
119
|
demodulator_mode = opts[:demodulator_mode] ||= 'WFM_ST'
|
97
|
-
demodulator_mode
|
98
|
-
|
120
|
+
puts "Demodulator Mode: #{demodulator_mode}"
|
121
|
+
# demodulator_mode.upcase! if opts[:demodulator_mode]
|
122
|
+
demodulator_modes = %i[OFF RAW AM FM WFM WFM_ST WFM_ST_OIRT LSB USB CW CWL CWU]
|
123
|
+
raise "ERROR: Invalid demodulator mode: #{demodulator_mode}" unless demodulator_modes.include?(demodulator_mode)
|
99
124
|
|
100
125
|
bandwidth = opts[:bandwidth] ||= '200.000'
|
101
126
|
|
@@ -178,5 +203,5 @@ rescue StandardError => e
|
|
178
203
|
rescue Interrupt, SystemExit
|
179
204
|
puts "\nGoodbye."
|
180
205
|
ensure
|
181
|
-
gqrx_sock = PWN::Plugins::GQRX.disconnect(gqrx_sock: gqrx_sock)
|
206
|
+
gqrx_sock = PWN::Plugins::GQRX.disconnect(gqrx_sock: gqrx_sock) unless gqrx_sock.nil?
|
182
207
|
end
|
data/lib/pwn/plugins/gqrx.rb
CHANGED
@@ -23,7 +23,7 @@ module PWN
|
|
23
23
|
# Supported Method Parameters::
|
24
24
|
# gqrx_resp = PWN::Plugins::GQRX.gqrx_cmd(
|
25
25
|
# gqrx_sock: 'required - GQRX socket object returned from #connect method',
|
26
|
-
# cmd: 'required - GQRX command to execute'
|
26
|
+
# cmd: 'required - GQRX command to execute',
|
27
27
|
# resp_ok: 'optional - Expected response from GQRX to indicate success'
|
28
28
|
# )
|
29
29
|
|
@@ -328,6 +328,362 @@ module PWN
|
|
328
328
|
end
|
329
329
|
end
|
330
330
|
|
331
|
+
# Supported Method Parameters::
|
332
|
+
# profiles = PWN::Plugins::GQRX.list_profiles
|
333
|
+
public_class_method def self.list_profiles
|
334
|
+
# TODO: Wifi5 / Wifi6 profiles,
|
335
|
+
# migrate to a YAML file, and add
|
336
|
+
# rSpec test to ensure all profiles
|
337
|
+
# contain consistent key-value pairs
|
338
|
+
{
|
339
|
+
ads_b978: {
|
340
|
+
start_freq: '978.000.000',
|
341
|
+
target_freq: '979.000.000',
|
342
|
+
demodulator_mode: :RAW,
|
343
|
+
bandwidth: '1.000.000',
|
344
|
+
precision: 5
|
345
|
+
},
|
346
|
+
ads_b1090: {
|
347
|
+
start_freq: '1.090.000.000',
|
348
|
+
target_freq: '1.091.000.000',
|
349
|
+
demodulator_mode: :RAW,
|
350
|
+
bandwidth: '1.000.000',
|
351
|
+
precision: 5
|
352
|
+
},
|
353
|
+
analog_tv_vhf: {
|
354
|
+
start_freq: '54.000.000',
|
355
|
+
target_freq: '216.000.000',
|
356
|
+
demodulator_mode: :WFM,
|
357
|
+
bandwidth: '6.000',
|
358
|
+
precision: 5
|
359
|
+
},
|
360
|
+
analog_tv_uhf: {
|
361
|
+
start_freq: '470.000.000',
|
362
|
+
target_freq: '890.000.000',
|
363
|
+
demodulator_mode: :WFM,
|
364
|
+
bandwidth: '6.000',
|
365
|
+
precision: 5
|
366
|
+
},
|
367
|
+
am_radio: {
|
368
|
+
start_freq: '540.000',
|
369
|
+
target_freq: '1.700.000',
|
370
|
+
demodulator_mode: :AM,
|
371
|
+
bandwidth: '10.000',
|
372
|
+
precision: 4
|
373
|
+
},
|
374
|
+
bluetooth: {
|
375
|
+
start_freq: '2.400.000.000',
|
376
|
+
target_freq: '2.485.000.000',
|
377
|
+
demodulator_mode: :RAW,
|
378
|
+
bandwidth: '1.000.000',
|
379
|
+
precision: 5
|
380
|
+
},
|
381
|
+
cdma: {
|
382
|
+
start_freq: '824.000.000',
|
383
|
+
target_freq: '849.000.000',
|
384
|
+
demodulator_mode: :RAW,
|
385
|
+
bandwidth: '1.250.000',
|
386
|
+
precision: 6
|
387
|
+
},
|
388
|
+
cw20: {
|
389
|
+
start_freq: '14.000.000',
|
390
|
+
target_freq: '14.350.000',
|
391
|
+
demodulator_mode: :CW,
|
392
|
+
bandwidth: '150',
|
393
|
+
precision: 3
|
394
|
+
},
|
395
|
+
cw40: {
|
396
|
+
start_freq: '7.000.000',
|
397
|
+
target_freq: '7.300.000',
|
398
|
+
demodulator_mode: :CW,
|
399
|
+
bandwidth: '150',
|
400
|
+
precision: 3
|
401
|
+
},
|
402
|
+
cw80: {
|
403
|
+
start_freq: '3.500.000',
|
404
|
+
target_freq: '3.800.000',
|
405
|
+
demodulator_mode: :CW,
|
406
|
+
bandwidth: '150',
|
407
|
+
precision: 3
|
408
|
+
},
|
409
|
+
gps12: {
|
410
|
+
start_freq: '1.227.600.000',
|
411
|
+
target_freq: '1.227.700.000',
|
412
|
+
demodulator_mode: :RAW,
|
413
|
+
bandwidth: '2.000.000',
|
414
|
+
precision: 6
|
415
|
+
},
|
416
|
+
gps15: {
|
417
|
+
start_freq: '1.575.420.000',
|
418
|
+
target_freq: '1.575.450.000',
|
419
|
+
demodulator_mode: :RAW,
|
420
|
+
bandwidth: '2.000.000',
|
421
|
+
precision: 6
|
422
|
+
},
|
423
|
+
gsm: {
|
424
|
+
start_freq: '935.000.000',
|
425
|
+
target_freq: '960.000.000',
|
426
|
+
demodulator_mode: :RAW,
|
427
|
+
bandwidth: '200.000',
|
428
|
+
precision: 4
|
429
|
+
},
|
430
|
+
fm_radio: {
|
431
|
+
start_freq: '88.000.000',
|
432
|
+
target_freq: '108.000.000',
|
433
|
+
demodulator_mode: :WFM,
|
434
|
+
bandwidth: '200.000',
|
435
|
+
precision: 5
|
436
|
+
},
|
437
|
+
high_rfid: {
|
438
|
+
start_freq: '13.560.000',
|
439
|
+
target_freq: '13.570.000',
|
440
|
+
demodulator_mode: :RAW,
|
441
|
+
bandwidth: '2.000.000',
|
442
|
+
precision: 3
|
443
|
+
},
|
444
|
+
lora433: {
|
445
|
+
start_freq: '432.000.000',
|
446
|
+
target_freq: '434.000.000',
|
447
|
+
demodulator_mode: :RAW,
|
448
|
+
bandwidth: '500.000',
|
449
|
+
precision: 3
|
450
|
+
},
|
451
|
+
lora915: {
|
452
|
+
start_freq: '914.000.000',
|
453
|
+
target_freq: '916.000.000',
|
454
|
+
demodulator_mode: :RAW,
|
455
|
+
bandwidth: '500.000',
|
456
|
+
precision: 3
|
457
|
+
},
|
458
|
+
low_rfid: {
|
459
|
+
start_freq: '125.000',
|
460
|
+
target_freq: '125.100',
|
461
|
+
demodulator_mode: :RAW,
|
462
|
+
bandwidth: '200.000',
|
463
|
+
precision: 1
|
464
|
+
},
|
465
|
+
keyfob300: {
|
466
|
+
start_freq: '300.000.000',
|
467
|
+
target_freq: '300.100.000',
|
468
|
+
demodulator_mode: :RAW,
|
469
|
+
bandwidth: '50.000',
|
470
|
+
precision: 4
|
471
|
+
},
|
472
|
+
keyfob310: {
|
473
|
+
start_freq: '310.000.000',
|
474
|
+
target_freq: '310.100.000',
|
475
|
+
demodulator_mode: :RAW,
|
476
|
+
bandwidth: '50.000',
|
477
|
+
precision: 4
|
478
|
+
},
|
479
|
+
keyfob315: {
|
480
|
+
start_freq: '315.000.000',
|
481
|
+
target_freq: '315.100.000',
|
482
|
+
demodulator_mode: :RAW,
|
483
|
+
bandwidth: '50.000',
|
484
|
+
precision: 4
|
485
|
+
},
|
486
|
+
keyfob390: {
|
487
|
+
start_freq: '390.000.000',
|
488
|
+
target_freq: '390.100.000',
|
489
|
+
demodulator_mode: :RAW,
|
490
|
+
bandwidth: '50.000',
|
491
|
+
precision: 4
|
492
|
+
},
|
493
|
+
rtty20: {
|
494
|
+
start_freq: '14.000.000',
|
495
|
+
target_freq: '14.350.000',
|
496
|
+
demodulator_mode: :RTTY,
|
497
|
+
bandwidth: '170',
|
498
|
+
precision: 3
|
499
|
+
},
|
500
|
+
rtty40: {
|
501
|
+
start_freq: '7.000.000',
|
502
|
+
target_freq: '7.300.000',
|
503
|
+
demodulator_mode: :RTTY,
|
504
|
+
bandwidth: '170',
|
505
|
+
precision: 3
|
506
|
+
},
|
507
|
+
rtty80: {
|
508
|
+
start_freq: '3.500.000',
|
509
|
+
target_freq: '3.800.000',
|
510
|
+
demodulator_mode: :RTTY,
|
511
|
+
bandwidth: '170',
|
512
|
+
precision: 3
|
513
|
+
},
|
514
|
+
ssb10: {
|
515
|
+
start_freq: '28.000.000',
|
516
|
+
target_freq: '29.700.000',
|
517
|
+
demodulator_mode: :USB,
|
518
|
+
bandwidth: '2.700',
|
519
|
+
precision: 6
|
520
|
+
},
|
521
|
+
ssb12: {
|
522
|
+
start_freq: '24.890.000',
|
523
|
+
target_freq: '24.990.000',
|
524
|
+
demodulator_mode: :USB,
|
525
|
+
bandwidth: '2.700',
|
526
|
+
precision: 6
|
527
|
+
},
|
528
|
+
ssb15: {
|
529
|
+
start_freq: '21.000.000',
|
530
|
+
target_freq: '21.450.000',
|
531
|
+
demodulator_mode: :USB,
|
532
|
+
bandwidth: '2.700',
|
533
|
+
precision: 6
|
534
|
+
},
|
535
|
+
ssb17: {
|
536
|
+
start_freq: '18.068.000',
|
537
|
+
target_freq: '18.168.000',
|
538
|
+
demodulator_mode: :USB,
|
539
|
+
bandwidth: '2.700',
|
540
|
+
precision: 6
|
541
|
+
},
|
542
|
+
ssb20: {
|
543
|
+
start_freq: '14.000.000',
|
544
|
+
target_freq: '14.350.000',
|
545
|
+
demodulator_mode: :USB,
|
546
|
+
bandwidth: '2.700',
|
547
|
+
precision: 6
|
548
|
+
},
|
549
|
+
ssb40: {
|
550
|
+
start_freq: '7.000.000',
|
551
|
+
target_freq: '7.300.000',
|
552
|
+
demodulator_mode: :LSB,
|
553
|
+
bandwidth: '2.700',
|
554
|
+
precision: 6
|
555
|
+
},
|
556
|
+
ssb80: {
|
557
|
+
start_freq: '3.500.000',
|
558
|
+
target_freq: '3.800.000',
|
559
|
+
demodulator_mode: :LSB,
|
560
|
+
bandwidth: '2.700',
|
561
|
+
precision: 6
|
562
|
+
},
|
563
|
+
ssb160: {
|
564
|
+
start_freq: '1.800.000',
|
565
|
+
target_freq: '2.000.000',
|
566
|
+
demodulator_mode: :LSB,
|
567
|
+
bandwidth: '2.700',
|
568
|
+
precision: 6
|
569
|
+
},
|
570
|
+
tempest: {
|
571
|
+
start_freq: '400.000.000',
|
572
|
+
target_freq: '430.000.000',
|
573
|
+
demodulator_mode: :WFM,
|
574
|
+
bandwidth: '200.000',
|
575
|
+
precision: 4
|
576
|
+
},
|
577
|
+
wifi24: {
|
578
|
+
start_freq: '2.400.000.000',
|
579
|
+
target_freq: '2.500.000.000',
|
580
|
+
demodulator_mode: :RAW,
|
581
|
+
bandwidth: '20.000.000',
|
582
|
+
precision: 7
|
583
|
+
},
|
584
|
+
zigbee: {
|
585
|
+
start_freq: '2.405.000.000',
|
586
|
+
target_freq: '2.485.000.000',
|
587
|
+
demodulator_mode: :RAW,
|
588
|
+
bandwidth: '2.000.000',
|
589
|
+
precision: 7
|
590
|
+
}
|
591
|
+
}
|
592
|
+
rescue StandardError => e
|
593
|
+
raise e
|
594
|
+
end
|
595
|
+
|
596
|
+
# Supported Method Parameters::
|
597
|
+
# opts = PWN::Plugins::GQRX.assume_profile(
|
598
|
+
# profile: 'required - valid GQRX profile name returned from #list_profiles method'
|
599
|
+
# )
|
600
|
+
public_class_method def self.assume_profile(opts = {})
|
601
|
+
profile = opts[:profile].to_s.to_sym
|
602
|
+
|
603
|
+
profiles_available = list_profiles
|
604
|
+
opts = {}
|
605
|
+
case profile
|
606
|
+
when :ads_b978
|
607
|
+
opts = profiles_available[:ads_b978]
|
608
|
+
when :ads_b1090
|
609
|
+
opts = profiles_available[:ads_b1090]
|
610
|
+
when :analog_tv_vhf
|
611
|
+
opts = profiles_available[:analog_tv_vhf]
|
612
|
+
when :analog_tv_uhf
|
613
|
+
opts = profiles_available[:analog_tv_uhf]
|
614
|
+
when :am_radio
|
615
|
+
opts = profiles_available[:am_radio]
|
616
|
+
when :bluetooth
|
617
|
+
opts = profiles_available[:bluetooth]
|
618
|
+
when :cdma
|
619
|
+
opts = profiles_available[:cdma]
|
620
|
+
when :cw20
|
621
|
+
opts = profiles_available[:cw20]
|
622
|
+
when :cw40
|
623
|
+
opts = profiles_available[:cw40]
|
624
|
+
when :cw80
|
625
|
+
opts = profiles_available[:cw80]
|
626
|
+
when :gps12
|
627
|
+
opts = profiles_available[:gps12]
|
628
|
+
when :gps15
|
629
|
+
opts = profiles_available[:gps15]
|
630
|
+
when :gsm
|
631
|
+
opts = profiles_available[:gsm]
|
632
|
+
when :fm_radio
|
633
|
+
opts = profiles_available[:fm_radio]
|
634
|
+
when :high_rfid
|
635
|
+
opts = profiles_available[:high_rfid]
|
636
|
+
when :lora433
|
637
|
+
opts = profiles_available[:lora433]
|
638
|
+
when :lora915
|
639
|
+
opts = profiles_available[:lora915]
|
640
|
+
when :low_rfid
|
641
|
+
opts = profiles_available[:low_rfid]
|
642
|
+
when :keyfob300
|
643
|
+
opts = profiles_available[:keyfob300]
|
644
|
+
when :keyfob310
|
645
|
+
opts = profiles_available[:keyfob310]
|
646
|
+
when :keyfob315
|
647
|
+
opts = profiles_available[:keyfob315]
|
648
|
+
when :keyfob390
|
649
|
+
opts = profiles_available[:keyfob390]
|
650
|
+
when :rtty20
|
651
|
+
opts = profiles_available[:rtty20]
|
652
|
+
when :rtty40
|
653
|
+
opts = profiles_available[:rtty40]
|
654
|
+
when :rtty80
|
655
|
+
opts = profiles_available[:rtty80]
|
656
|
+
when :ssb10
|
657
|
+
opts = profiles_available[:ssb10]
|
658
|
+
when :ssb12
|
659
|
+
opts = profiles_available[:ssb12]
|
660
|
+
when :ssb15
|
661
|
+
opts = profiles_available[:ssb15]
|
662
|
+
when :ssb17
|
663
|
+
opts = profiles_available[:ssb17]
|
664
|
+
when :ssb20
|
665
|
+
opts = profiles_available[:ssb20]
|
666
|
+
when :ssb40
|
667
|
+
opts = profiles_available[:ssb40]
|
668
|
+
when :ssb80
|
669
|
+
opts = profiles_available[:ssb80]
|
670
|
+
when :ssb160
|
671
|
+
opts = profiles_available[:ssb160]
|
672
|
+
when :tempest
|
673
|
+
opts = profiles_available[:tempest]
|
674
|
+
when :wifi24
|
675
|
+
opts = profiles_available[:wifi24]
|
676
|
+
when :zigbee
|
677
|
+
opts = profiles_available[:zigbee]
|
678
|
+
else
|
679
|
+
raise "ERROR: Invalid profile: #{profile}"
|
680
|
+
end
|
681
|
+
|
682
|
+
opts
|
683
|
+
rescue StandardError => e
|
684
|
+
raise e
|
685
|
+
end
|
686
|
+
|
331
687
|
# Supported Method Parameters::
|
332
688
|
# PWN::Plugins::GQRX.disconnect(
|
333
689
|
# gqrx_sock: 'required - GQRX socket object returned from #connect method'
|
@@ -352,6 +708,46 @@ module PWN
|
|
352
708
|
|
353
709
|
public_class_method def self.help
|
354
710
|
puts "USAGE:
|
711
|
+
gqrx_sock = #{self}.connect(
|
712
|
+
target: 'optional - GQRX target IP address (defaults to 127.0.0.1)',
|
713
|
+
port: 'optional - GQRX target port (defaults to 7356)'
|
714
|
+
)
|
715
|
+
|
716
|
+
#{self}.gqrx_cmd(
|
717
|
+
gqrx_sock: 'required - GQRX socket object returned from #connect method',
|
718
|
+
cmd: 'required - GQRX command to execute',
|
719
|
+
resp_ok: 'optional - Expected response from GQRX to indicate success'
|
720
|
+
)
|
721
|
+
|
722
|
+
#{self}.init_freq(
|
723
|
+
gqrx_sock: 'required - GQRX socket object returned from #connect method',
|
724
|
+
freq: 'required - Frequency to set',
|
725
|
+
demodulator_mode: 'optional - Demodulator mode (defaults to WFM)',
|
726
|
+
bandwidth: 'optional - Bandwidth (defaults to 200000)',
|
727
|
+
lock_freq_duration: 'optional - Lock frequency duration (defaults to 0.5)',
|
728
|
+
strength_lock: 'optional - Strength lock (defaults to -60.0)'
|
729
|
+
)
|
730
|
+
|
731
|
+
#{self}.scan_range(
|
732
|
+
gqrx_sock: 'required - GQRX socket object returned from #connect method',
|
733
|
+
demodulator_mode: 'required - Demodulator mode',
|
734
|
+
bandwidth: 'required - Bandwidth',
|
735
|
+
start_freq: 'required - Starting frequency',
|
736
|
+
target_freq: 'required - Target frequency',
|
737
|
+
precision: 'required - Precision',
|
738
|
+
lock_freq_duration: 'optional - Lock frequency duration (defaults to 0.5)',
|
739
|
+
strength_lock: 'optional - Strength lock (defaults to -60.0)'
|
740
|
+
)
|
741
|
+
|
742
|
+
profiles = #{self}.list_profiles
|
743
|
+
|
744
|
+
opts = #{self}.assume_profile(
|
745
|
+
profile: 'required - valid GQRX profile name returned from #list_profiles method'
|
746
|
+
)
|
747
|
+
|
748
|
+
#{self}.disconnect(
|
749
|
+
gqrx_sock: 'required - GQRX socket object returned from #connect method'
|
750
|
+
)
|
355
751
|
|
356
752
|
#{self}.authors
|
357
753
|
"
|
data/lib/pwn/version.rb
CHANGED
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.5.
|
4
|
+
version: 0.5.81
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 0day Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-04-
|
11
|
+
date: 2024-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -380,14 +380,14 @@ dependencies:
|
|
380
380
|
requirements:
|
381
381
|
- - '='
|
382
382
|
- !ruby/object:Gem::Version
|
383
|
-
version: 2.7.
|
383
|
+
version: 2.7.2
|
384
384
|
type: :runtime
|
385
385
|
prerelease: false
|
386
386
|
version_requirements: !ruby/object:Gem::Requirement
|
387
387
|
requirements:
|
388
388
|
- - '='
|
389
389
|
- !ruby/object:Gem::Version
|
390
|
-
version: 2.7.
|
390
|
+
version: 2.7.2
|
391
391
|
- !ruby/object:Gem::Dependency
|
392
392
|
name: jsonpath
|
393
393
|
requirement: !ruby/object:Gem::Requirement
|
@@ -716,14 +716,14 @@ dependencies:
|
|
716
716
|
requirements:
|
717
717
|
- - '='
|
718
718
|
- !ruby/object:Gem::Version
|
719
|
-
version: 13.2.
|
719
|
+
version: 13.2.1
|
720
720
|
type: :development
|
721
721
|
prerelease: false
|
722
722
|
version_requirements: !ruby/object:Gem::Requirement
|
723
723
|
requirements:
|
724
724
|
- - '='
|
725
725
|
- !ruby/object:Gem::Version
|
726
|
-
version: 13.2.
|
726
|
+
version: 13.2.1
|
727
727
|
- !ruby/object:Gem::Dependency
|
728
728
|
name: rb-readline
|
729
729
|
requirement: !ruby/object:Gem::Requirement
|
@@ -884,14 +884,14 @@ dependencies:
|
|
884
884
|
requirements:
|
885
885
|
- - '='
|
886
886
|
- !ruby/object:Gem::Version
|
887
|
-
version: 2.
|
887
|
+
version: 2.29.1
|
888
888
|
type: :runtime
|
889
889
|
prerelease: false
|
890
890
|
version_requirements: !ruby/object:Gem::Requirement
|
891
891
|
requirements:
|
892
892
|
- - '='
|
893
893
|
- !ruby/object:Gem::Version
|
894
|
-
version: 2.
|
894
|
+
version: 2.29.1
|
895
895
|
- !ruby/object:Gem::Dependency
|
896
896
|
name: ruby-audio
|
897
897
|
requirement: !ruby/object:Gem::Requirement
|