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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ddea38642ae143a1497175f362a68dab5ea7c73fb6e5e11c290ba31c66b8737a
4
- data.tar.gz: 57ad2b8405af577767442e1fd0b62e2ae7984cb02bf4957498310006e1ab72d6
3
+ metadata.gz: 5abdcbe615c1ace43da0c9b750425cd6d33b202974a0ab0f1bcaa923e4400717
4
+ data.tar.gz: 14229570d88d75bab5e118b7774488e3ffd8ca4865b5cad22b0305f5984be74d
5
5
  SHA512:
6
- metadata.gz: 0ca4bbdeb63f5bdba25b389411bd61dffe8b6c225a79a13b249890244e85a4b889db75f3a34c95355bb6ebc0e23cbb5c9d44e625d4230c5b2d2e3e9fcff8bd21
7
- data.tar.gz: 2eddb633e58ba9bdf3513bca1de16d31fb48a94d5260b522b47f89e4a498bd886bcdea0e514d73f2cda1b790018e9768a123a67892271c2ebd6b565c009dc94b
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-03-26 16:48:38 UTC using RuboCop version 1.62.1.
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: 24
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: 311
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: 51
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.1'
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.0'
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.28.0'
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.79]:001 >>> PWN.help
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.79]:001 >>> PWN.help
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.79]:001 >>> PWN.help
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('-tFREQ', '--target-freq=FREQ', '<Required - Frequency to Conclude Scanning (e.g. 900000000 == 900 mHz>') do |e|
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 ModeOFF | RAW | AM | FM | WFM | WFM_ST | WFM_ST_OIRT | LSB |USB | CW | CWL | CWU (Defaults to WFM_ST)>') do |d|
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 "ERROR: Invalid target frequency #{target_freq}" if target_freq.zero?
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
- start_freq = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'f', resp_ok: 'RPRT 0').to_i if start_freq.zero?
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.upcase!
98
- raise "ERROR: Invalid demodulator mode: #{demodulator_mode}" unless %w[OFF RAW AM FM WFM WFM_ST WFM_ST_OIRT LSB USB CW CWL CWU].include?(demodulator_mode)
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
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PWN
4
- VERSION = '0.5.79'
4
+ VERSION = '0.5.81'
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.5.79
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-03 00:00:00.000000000 Z
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.1
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.1
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.0
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.0
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.28.0
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.28.0
894
+ version: 2.29.1
895
895
  - !ruby/object:Gem::Dependency
896
896
  name: ruby-audio
897
897
  requirement: !ruby/object:Gem::Requirement