pwn 0.5.520 → 0.5.521

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: f6d0dc923ff782c8b1fcd7ad1ec99996f9d2a07770e6c877c217104f889b5c1c
4
- data.tar.gz: 700f54af4422a4e36080057cfeb221dc51f78e9bb66f0b2f6041ab4878e6c19e
3
+ metadata.gz: cce0727310028c78f7686c7b1712da893ffbfdbc6427af0f00b80345d2bc7383
4
+ data.tar.gz: 2f4927896da9f71369209fd9472c5fc124b020ee5388bbccad3142e2cf8c3915
5
5
  SHA512:
6
- metadata.gz: c65607836b13bdd1c45fd0d2e845855cba2dd8d75180026f71238c2e9ae8a74bca150adf988b641dadbb156772cb1db96cb1e5fc9c9bee3319c3b08279fc6cd1
7
- data.tar.gz: 54146ccf00a69c62116c448f9c143a7e1d14192cf055e41bd5fb272238e8242f734ae57fc9cc37e54798c4bcdc6986eb51e5c11fc9d6feef83345bd064c3cf5d
6
+ metadata.gz: 7194aee01a1df8c5af6101c4c67f38b9221583f93cc25d9f126fdc10a61148279a5aa167eb9b2f147cd0dcc034f6a9dbece57c343b84931eb0a660f924db9e67
7
+ data.tar.gz: e623d208ca8c06bcf38ff4c60c0f6e101019fb7d84395ccd9188d744bef4bb6da8d26df1d92495adf0e1fbff97af54a48b1bbba75dc938be8d877d6edf8a3dad
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.520]:001 >>> PWN.help
40
+ pwn[v0.5.521]: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.4.7@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.5.520]:001 >>> PWN.help
55
+ pwn[v0.5.521]: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.4.7@pwn
62
62
  $ rvmsudo gem uninstall --all --executables pwn
63
63
  $ rvmsudo gem install --verbose pwn
64
64
  $ pwn
65
- pwn[v0.5.520]:001 >>> PWN.help
65
+ pwn[v0.5.521]: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:
@@ -12,6 +12,7 @@ module PWN
12
12
  # rds_resp = PWN::SDR::GQRX.decode_rds(
13
13
  # freq_obj: 'required - GQRX socket object returned from #connect method'
14
14
  # )
15
+
15
16
  public_class_method def self.decode(opts = {})
16
17
  freq_obj = opts[:freq_obj]
17
18
  gqrx_sock = freq_obj[:gqrx_sock]
@@ -36,28 +37,62 @@ module PWN
36
37
  resp_ok: 'RPRT 0'
37
38
  )
38
39
 
39
- # Use TTY::Spinner correctly with a dynamic :title token
40
- spinner = TTY::Spinner.new('[:spinner] :title', format: :arrow_pulse)
41
- spinner.update(title: 'INFO: Decoding FM radio RDS data...')
42
- spinner.auto_spin # Background thread handles smooth animation
40
+ # Spinner setup with dynamic terminal width awareness
41
+ spinner = TTY::Spinner.new(
42
+ '[:spinner] :decoding',
43
+ format: :arrow_pulse,
44
+ clear: true,
45
+ hide_cursor: true
46
+ )
47
+
48
+ # Conservative overhead for spinner animation, colors, and spacing
49
+ spinner_overhead = 12
50
+ max_title_length = [TTY::Screen.width - spinner_overhead, 50].max
51
+
52
+ initial_title = 'INFO: Decoding FM radio RDS data...'
53
+ initial_title = initial_title[0...max_title_length] if initial_title.length > max_title_length
54
+ spinner.update(title: initial_title)
55
+ spinner.auto_spin
43
56
 
44
57
  last_resp = {}
45
58
 
46
59
  loop do
47
60
  rds_resp = {
48
- rds_pi: PWN::SDR::GQRX.gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'p RDS_PI').to_s.strip.chomp,
61
+ rds_pi: PWN::SDR::GQRX.gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'p RDS_PI').to_s.strip.chomp.delete('.'),
49
62
  rds_ps_name: PWN::SDR::GQRX.gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'p RDS_PS_NAME').to_s.strip.chomp,
50
63
  rds_radiotext: PWN::SDR::GQRX.gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'p RDS_RADIOTEXT').to_s.strip.chomp
51
64
  }
52
65
 
53
- # Only update the displayed message when we have new, complete, valid RDS data
66
+ # Only update when we have valid new data
54
67
  if rds_resp[:rds_pi] != '0000' && rds_resp != last_resp
55
- status = "Program ID: #{rds_resp[:rds_pi]} | Station Name: #{rds_resp[:rds_ps_name].ljust(8)} | Radio Text: #{rds_resp[:rds_radiotext]}"
56
- spinner.update(title: status)
68
+ # --- Enforce RDS specification bounds and clean formatting ---
69
+ # PI: 16-bit code >>> exactly 4 uppercase hex digits, zero-padded
70
+ rds_pi = rds_resp[:rds_pi].upcase
71
+ rds_pi = rds_pi.rjust(4, '0')[0, 4]
72
+
73
+ # PS: exactly 8 ASCII characters (pad short with spaces, truncate long)
74
+ rds_ps = "#{rds_resp[:rds_ps_name]} "[0, 8]
75
+
76
+ # RadioText: strip trailing spaces (stations often pad to clear)
77
+ rds_rt = rds_resp[:rds_radiotext].rstrip
78
+
79
+ # Fixed prefix: always exactly 28 characters for predictable layout
80
+ # Breakdown: "PI: " (4) + 4 hex (4) + " | PS: " (7) + 8 chars (8) + " | RT: " (7) = 28
81
+ prefix = "Program ID: #{rds_pi} | Station Name: #{rds_ps} | Radio Txt: "
82
+
83
+ # minimum visibility
84
+ available_for_rt = max_title_length - prefix.length
85
+ available_for_rt = [available_for_rt, 10].max
86
+
87
+ rt_display = rds_rt
88
+ rt_display = "#{rt_display[0...available_for_rt]}..." if rt_display.length > available_for_rt
89
+
90
+ msg = prefix + rt_display
91
+ spinner.update(decoding: msg)
57
92
  last_resp = rds_resp.dup
58
93
  end
59
94
 
60
- # Non-blocking check for ENTER key
95
+ # Non-blocking check for ENTER key to exit
61
96
  if $stdin.wait_readable(0)
62
97
  begin
63
98
  char = $stdin.read_nonblock(1)
@@ -73,7 +108,7 @@ module PWN
73
108
  spinner.error('Decoding failed') if defined?(spinner)
74
109
  raise e
75
110
  ensure
76
- spinner.stop if spinner
111
+ spinner.stop if defined?(spinner) && spinner
77
112
  end
78
113
 
79
114
  # Author(s):: 0day Inc. <support@0dayinc.com>
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.520'
4
+ VERSION = '0.5.521'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.520
4
+ version: 0.5.521
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.