pwn 0.5.79 → 0.5.81
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 +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
|
[](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
|