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 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