pwn 0.5.617 → 0.5.620

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.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/README.md +101 -83
  4. data/bin/pwn_gqrx_scanner +25 -5
  5. data/documentation/AI-Integration.md +42 -26
  6. data/documentation/AWS.md +57 -0
  7. data/documentation/Agent-Tool-Registry.md +56 -0
  8. data/documentation/Banner.md +17 -0
  9. data/documentation/Blockchain.md +18 -0
  10. data/documentation/Bounty.md +21 -0
  11. data/documentation/BurpSuite.md +41 -16
  12. data/documentation/CLI-Drivers.md +58 -0
  13. data/documentation/Configuration.md +66 -0
  14. data/documentation/Contributing.md +33 -19
  15. data/documentation/Cron.md +47 -0
  16. data/documentation/Diagrams.md +6 -2
  17. data/documentation/Drivers.md +43 -16
  18. data/documentation/Extrospection.md +73 -0
  19. data/documentation/FFI.md +14 -0
  20. data/documentation/Fuzzing.md +36 -0
  21. data/documentation/Hardware.md +40 -0
  22. data/documentation/Home.md +5 -4
  23. data/documentation/How-PWN-Works.md +7 -4
  24. data/documentation/Metasploit.md +34 -0
  25. data/documentation/Mistakes.md +96 -0
  26. data/documentation/NmapIt.md +18 -12
  27. data/documentation/PWN.png +0 -0
  28. data/documentation/PWN_Contributors_and_Users.png +0 -0
  29. data/documentation/Persistence.md +40 -0
  30. data/documentation/Plugins.md +97 -47
  31. data/documentation/Reporting.md +25 -18
  32. data/documentation/SAST.md +39 -22
  33. data/documentation/SDR.md +58 -0
  34. data/documentation/Sessions.md +39 -0
  35. data/documentation/Skills-Memory-Learning.md +59 -29
  36. data/documentation/Swarm.md +71 -0
  37. data/documentation/Transparent-Browser.md +26 -22
  38. data/documentation/Troubleshooting.md +44 -25
  39. data/documentation/WWW.md +32 -0
  40. data/documentation/diagrams/agent-tool-registry.svg +286 -0
  41. data/documentation/diagrams/aws-cloud-security.svg +166 -0
  42. data/documentation/diagrams/cron-scheduling.svg +148 -0
  43. data/documentation/diagrams/dot/agent-tool-registry.dot +2 -2
  44. data/documentation/diagrams/dot/extrospection-world-awareness.dot +9 -7
  45. data/documentation/diagrams/dot/hardware-hacking.dot +48 -0
  46. data/documentation/diagrams/dot/memory-skills-detailed.dot +12 -5
  47. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +93 -0
  48. data/documentation/diagrams/dot/overall-pwn-architecture.dot +7 -5
  49. data/documentation/diagrams/dot/persistence-filesystem.dot +30 -0
  50. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +19 -7
  51. data/documentation/diagrams/dot/sdr-radio-flow.dot +13 -11
  52. data/documentation/diagrams/extrospection-world-awareness.svg +203 -0
  53. data/documentation/diagrams/hardware-hacking.svg +163 -0
  54. data/documentation/diagrams/memory-skills-detailed.svg +146 -97
  55. data/documentation/diagrams/mistakes-negative-feedback.svg +266 -0
  56. data/documentation/diagrams/overall-pwn-architecture.svg +184 -173
  57. data/documentation/diagrams/persistence-filesystem.svg +189 -0
  58. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +217 -149
  59. data/documentation/diagrams/sdr-radio-flow.svg +166 -0
  60. data/documentation/diagrams/swarm-multi-agent.svg +225 -0
  61. data/documentation/fax-spectrogram.png +0 -0
  62. data/documentation/fax-waveform.png +0 -0
  63. data/documentation/pwn-REPL.md +40 -24
  64. data/documentation/pwn-ai-Agent.md +72 -30
  65. data/documentation/pwn_android_war_dialer_session.png +0 -0
  66. data/documentation/pwn_install.png +0 -0
  67. data/documentation/pwn_wallpaper.jpg +0 -0
  68. data/documentation/ringing-spectrogram.png +0 -0
  69. data/documentation/ringing-waveform.png +0 -0
  70. data/lib/pwn/ai/agent/extrospection.rb +65 -6
  71. data/lib/pwn/ai/agent/learning.rb +67 -7
  72. data/lib/pwn/ai/agent/loop.rb +72 -6
  73. data/lib/pwn/ai/agent/mistakes.rb +369 -0
  74. data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
  75. data/lib/pwn/ai/agent/tools/extrospection.rb +2 -2
  76. data/lib/pwn/ai/agent/tools/mistakes.rb +132 -0
  77. data/lib/pwn/ai/agent.rb +1 -0
  78. data/lib/pwn/plugins/jira_data_center.rb +2 -2
  79. data/lib/pwn/sdr/decoder/adsb.rb +101 -0
  80. data/lib/pwn/sdr/decoder/apt.rb +75 -0
  81. data/lib/pwn/sdr/decoder/bluetooth.rb +78 -0
  82. data/lib/pwn/sdr/decoder/dect.rb +84 -0
  83. data/lib/pwn/sdr/decoder/gps.rb +83 -0
  84. data/lib/pwn/sdr/decoder/gsm.rb +50 -29
  85. data/lib/pwn/sdr/decoder/iridium.rb +81 -0
  86. data/lib/pwn/sdr/decoder/lora.rb +87 -0
  87. data/lib/pwn/sdr/decoder/lte.rb +88 -0
  88. data/lib/pwn/sdr/decoder/morse.rb +64 -0
  89. data/lib/pwn/sdr/decoder/p25.rb +71 -0
  90. data/lib/pwn/sdr/decoder/pager.rb +77 -0
  91. data/lib/pwn/sdr/decoder/pocsag.rb +26 -11
  92. data/lib/pwn/sdr/decoder/rfid.rb +88 -0
  93. data/lib/pwn/sdr/decoder/rtl433.rb +95 -0
  94. data/lib/pwn/sdr/decoder/rtty.rb +66 -0
  95. data/lib/pwn/sdr/decoder/wifi.rb +98 -0
  96. data/lib/pwn/sdr/decoder/zigbee.rb +96 -0
  97. data/lib/pwn/sdr/decoder.rb +67 -7
  98. data/lib/pwn/sdr/frequency_allocation.rb +82 -41
  99. data/lib/pwn/sdr/gqrx.rb +186 -95
  100. data/lib/pwn/version.rb +1 -1
  101. data/spec/lib/pwn/ai/agent/mistakes_spec.rb +36 -0
  102. data/spec/lib/pwn/ai/agent/tools/mistakes_spec.rb +12 -0
  103. data/spec/lib/pwn/sdr/decoder/adsb_spec.rb +15 -0
  104. data/spec/lib/pwn/sdr/decoder/apt_spec.rb +15 -0
  105. data/spec/lib/pwn/sdr/decoder/bluetooth_spec.rb +15 -0
  106. data/spec/lib/pwn/sdr/decoder/dect_spec.rb +15 -0
  107. data/spec/lib/pwn/sdr/decoder/gps_spec.rb +15 -0
  108. data/spec/lib/pwn/sdr/decoder/iridium_spec.rb +15 -0
  109. data/spec/lib/pwn/sdr/decoder/lora_spec.rb +15 -0
  110. data/spec/lib/pwn/sdr/decoder/lte_spec.rb +15 -0
  111. data/spec/lib/pwn/sdr/decoder/morse_spec.rb +15 -0
  112. data/spec/lib/pwn/sdr/decoder/p25_spec.rb +15 -0
  113. data/spec/lib/pwn/sdr/decoder/pager_spec.rb +15 -0
  114. data/spec/lib/pwn/sdr/decoder/rfid_spec.rb +15 -0
  115. data/spec/lib/pwn/sdr/decoder/rtl433_spec.rb +15 -0
  116. data/spec/lib/pwn/sdr/decoder/rtty_spec.rb +15 -0
  117. data/spec/lib/pwn/sdr/decoder/wifi_spec.rb +15 -0
  118. data/spec/lib/pwn/sdr/decoder/zigbee_spec.rb +15 -0
  119. data/third_party/pwn_rdoc.jsonl +114 -8
  120. metadata +81 -5
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'shellwords'
4
+
5
+ module PWN
6
+ module SDR
7
+ module Decoder
8
+ # 802.11 (WiFi) beacon/probe decoder for the 2.4 / 5 / 6 GHz bands.
9
+ #
10
+ # 20+ MHz OFDM cannot be recovered from a general-purpose SDR at
11
+ # bit-level in real time, so this module drives an existing monitor-mode
12
+ # NIC via `tshark` (or `airodump-ng`) instead — freq_obj[:mon_iface]
13
+ # selects the interface, freq_obj[:freq] is mapped to a WLAN channel.
14
+ module WiFi
15
+ TSHARK_FIELDS = %w[
16
+ frame.time_relative
17
+ wlan.fc.type_subtype
18
+ wlan.bssid
19
+ wlan.sa
20
+ wlan.da
21
+ wlan_radio.channel
22
+ wlan_radio.signal_dbm
23
+ wlan.ssid
24
+ ].freeze
25
+
26
+ # Supported Method Parameters::
27
+ # PWN::SDR::Decoder::WiFi.decode(
28
+ # freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'
29
+ # )
30
+
31
+ public_class_method def self.decode(opts = {})
32
+ freq_obj = opts[:freq_obj]
33
+ raise 'ERROR: :freq_obj is required' unless freq_obj.is_a?(Hash)
34
+
35
+ iface = (freq_obj[:mon_iface] || 'wlan0mon').to_s
36
+ hz = PWN::SDR.hz_to_i(freq: freq_obj[:freq])
37
+ mhz = (hz / 1_000_000.0).round
38
+
39
+ tshark = ['tshark', '-i', iface, '-I', '-l', '-n',
40
+ '-Y', 'wlan.fc.type == 0',
41
+ '-T', 'fields', '-E', 'separator=|']
42
+ TSHARK_FIELDS.each { |f| tshark.push('-e', f) }
43
+
44
+ inner = "iw dev #{Shellwords.escape(iface)} set freq #{mhz} 2>/dev/null; " \
45
+ "exec #{Shellwords.join(tshark)}"
46
+ direct_cmd = "bash -c #{Shellwords.escape(inner)}"
47
+
48
+ PWN::SDR::Decoder::Base.run_pipeline(
49
+ freq_obj: freq_obj,
50
+ protocol: 'WiFi-802.11',
51
+ required_bins: %w[tshark iw],
52
+ direct_cmd: direct_cmd,
53
+ line_match: /\S/,
54
+ parser: proc { |line| parse_line(line: line) }
55
+ )
56
+ end
57
+
58
+ # Supported Method Parameters::
59
+ # PWN::SDR::Decoder::WiFi.parse_line(line: 't|subtype|bssid|sa|da|ch|rssi|ssid')
60
+
61
+ public_class_method def self.parse_line(opts = {})
62
+ f = opts[:line].to_s.split('|', -1)
63
+ out = {
64
+ protocol: 'WiFi',
65
+ subtype: f[1], bssid: f[2], sa: f[3], da: f[4],
66
+ channel: f[5], rssi_dbm: f[6], ssid: f[7]
67
+ }.reject { |_, v| v.to_s.empty? }
68
+ out[:summary] = "WiFi ch#{out[:channel]} #{out[:bssid]} '#{out[:ssid]}' #{out[:rssi_dbm]}dBm"
69
+ out
70
+ end
71
+
72
+ # Author(s):: 0day Inc. <support@0dayinc.com>
73
+
74
+ public_class_method def self.authors
75
+ "AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
76
+ end
77
+
78
+ # Display Usage for this Module
79
+
80
+ public_class_method def self.help
81
+ puts "USAGE:
82
+ #{self}.decode(
83
+ freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'
84
+ )
85
+
86
+ NOTE: Requires a monitor-mode WLAN interface (freq_obj[:mon_iface],
87
+ default 'wlan0mon'), `iw`, and `tshark`. General SDRs cannot
88
+ demodulate 802.11 OFDM in real time.
89
+
90
+ #{self}.parse_line(line: '0.1|8|aa:bb:..|aa:bb:..|ff:ff:..|6|-42|linksys')
91
+
92
+ #{self}.authors
93
+ "
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'shellwords'
4
+
5
+ module PWN
6
+ module SDR
7
+ module Decoder
8
+ # IEEE 802.15.4 / ZigBee decoder for the 2.405–2.480 GHz allocation.
9
+ # 250 kbit/s O-QPSK requires raw I/Q; this drives KillerBee's `zbdump`
10
+ # (with any supported adapter — CC2531, ApiMote, RZUSB, HackRF via
11
+ # gr-ieee802-15-4) or falls back to `whsniff` piped through `tshark`
12
+ # for structured PAN/src/dst/cmd extraction.
13
+ module ZigBee
14
+ TSHARK_FIELDS = %w[
15
+ frame.time_relative
16
+ wpan.src16
17
+ wpan.dst16
18
+ wpan.src64
19
+ wpan.dst64
20
+ wpan.dst_pan
21
+ wpan.frame_type
22
+ zbee_nwk.cmd.id
23
+ wpan.seq_no
24
+ ].freeze
25
+
26
+ # Supported Method Parameters::
27
+ # PWN::SDR::Decoder::ZigBee.decode(
28
+ # freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'
29
+ # )
30
+
31
+ public_class_method def self.decode(opts = {})
32
+ freq_obj = opts[:freq_obj]
33
+ raise 'ERROR: :freq_obj is required' unless freq_obj.is_a?(Hash)
34
+
35
+ hz = PWN::SDR.hz_to_i(freq: freq_obj[:freq])
36
+ # 802.15.4 ch11..26 → 2405 + 5*(ch-11) MHz
37
+ ch = (((hz - 2_405_000_000) / 5_000_000.0).round + 11).clamp(11, 26)
38
+
39
+ tshark = ['tshark', '-r', '-', '-l', '-T', 'fields', '-E', 'separator=|']
40
+ TSHARK_FIELDS.each { |f| tshark.push('-e', f) }
41
+
42
+ inner = "whsniff -c #{ch} 2>/dev/null | #{Shellwords.join(tshark)}"
43
+ direct_cmd = "bash -c #{Shellwords.escape(inner)}"
44
+
45
+ PWN::SDR::Decoder::Base.run_pipeline(
46
+ freq_obj: freq_obj,
47
+ protocol: 'ZigBee',
48
+ required_bins: %w[whsniff tshark],
49
+ direct_cmd: direct_cmd,
50
+ line_match: /\S/,
51
+ parser: proc { |line| parse_line(line: line) }
52
+ )
53
+ end
54
+
55
+ # Supported Method Parameters::
56
+ # PWN::SDR::Decoder::ZigBee.parse_line(line: 't|src16|dst16|src64|dst64|pan|type|cmd|seq')
57
+
58
+ public_class_method def self.parse_line(opts = {})
59
+ f = opts[:line].to_s.split('|', -1)
60
+ out = {
61
+ protocol: 'ZigBee',
62
+ src16: f[1], dst16: f[2],
63
+ src64: f[3], dst64: f[4],
64
+ pan_id: f[5], frame_type: f[6],
65
+ nwk_cmd: f[7], seq: f[8]
66
+ }.reject { |_, v| v.to_s.empty? }
67
+ out[:summary] = "ZigBee PAN=#{out[:pan_id]} #{out[:src16] || out[:src64]}→#{out[:dst16] || out[:dst64]} type=#{out[:frame_type]}"
68
+ out
69
+ end
70
+
71
+ # Author(s):: 0day Inc. <support@0dayinc.com>
72
+
73
+ public_class_method def self.authors
74
+ "AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
75
+ end
76
+
77
+ # Display Usage for this Module
78
+
79
+ public_class_method def self.help
80
+ puts "USAGE:
81
+ #{self}.decode(
82
+ freq_obj: 'required - freq_obj returned from PWN::SDR::GQRX.init_freq'
83
+ )
84
+
85
+ NOTE: Requires `whsniff` (CC2531) or KillerBee, plus `tshark`.
86
+ Channel is derived from freq_obj[:freq] (11–26).
87
+
88
+ #{self}.parse_line(line: '0.1|0x0001|0xffff||||0x01||42')
89
+
90
+ #{self}.authors
91
+ "
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -5,15 +5,73 @@ module PWN
5
5
  # into memory only when they're needed. For more information, see:
6
6
  # http://www.rubyinside.com/ruby-techniques-revealed-autoload-1652.html
7
7
  module SDR
8
- # Deocder Module for SDR signals.
8
+ # Decoder namespace for SDR signals. Every child module exposes a
9
+ # uniform `.decode(freq_obj:)` entry point (see PWN::SDR::Decoder::Base)
10
+ # so PWN::SDR::GQRX can dispatch on a `decoder:` key from
11
+ # PWN::SDR::FrequencyAllocation.band_plans.
9
12
  module Decoder
10
- autoload :Base, 'pwn/sdr/decoder/base'
11
- autoload :Flex, 'pwn/sdr/decoder/flex'
12
- autoload :GSM, 'pwn/sdr/decoder/gsm'
13
- autoload :POCSAG, 'pwn/sdr/decoder/pocsag'
14
- autoload :RDS, 'pwn/sdr/decoder/rds'
13
+ autoload :ADSB, 'pwn/sdr/decoder/adsb'
14
+ autoload :APT, 'pwn/sdr/decoder/apt'
15
+ autoload :Base, 'pwn/sdr/decoder/base'
16
+ autoload :Bluetooth, 'pwn/sdr/decoder/bluetooth'
17
+ autoload :DECT, 'pwn/sdr/decoder/dect'
18
+ autoload :Flex, 'pwn/sdr/decoder/flex'
19
+ autoload :GPS, 'pwn/sdr/decoder/gps'
20
+ autoload :GSM, 'pwn/sdr/decoder/gsm'
21
+ autoload :Iridium, 'pwn/sdr/decoder/iridium'
22
+ autoload :LTE, 'pwn/sdr/decoder/lte'
23
+ autoload :LoRa, 'pwn/sdr/decoder/lora'
24
+ autoload :Morse, 'pwn/sdr/decoder/morse'
25
+ autoload :P25, 'pwn/sdr/decoder/p25'
26
+ autoload :POCSAG, 'pwn/sdr/decoder/pocsag'
27
+ autoload :Pager, 'pwn/sdr/decoder/pager'
28
+ autoload :RDS, 'pwn/sdr/decoder/rds'
29
+ autoload :RFID, 'pwn/sdr/decoder/rfid'
30
+ autoload :RTL433, 'pwn/sdr/decoder/rtl433'
31
+ autoload :RTTY, 'pwn/sdr/decoder/rtty'
32
+ autoload :WiFi, 'pwn/sdr/decoder/wifi'
33
+ autoload :ZigBee, 'pwn/sdr/decoder/zigbee'
15
34
 
16
- # Display a List of Every PWN::AI Module
35
+ # symbol → module map. Keys are what a band_plan's :decoder value (or
36
+ # PWN::SDR::GQRX.init_freq's decoder: kwarg) may be set to.
37
+ REGISTRY = {
38
+ adsb: :ADSB,
39
+ apt: :APT,
40
+ bluetooth: :Bluetooth,
41
+ dect: :DECT,
42
+ flex: :Flex,
43
+ gprs: :GSM,
44
+ gps: :GPS,
45
+ gsm: :GSM,
46
+ iridium: :Iridium,
47
+ ism: :RTL433,
48
+ keyfob: :RTL433,
49
+ lora: :LoRa,
50
+ lte: :LTE,
51
+ morse: :Morse,
52
+ p25: :P25,
53
+ pager: :Pager,
54
+ pocsag: :POCSAG,
55
+ rds: :RDS,
56
+ rfid: :RFID,
57
+ rtl433: :RTL433,
58
+ rtty: :RTTY,
59
+ wifi: :WiFi,
60
+ zigbee: :ZigBee
61
+ }.freeze
62
+
63
+ # Supported Method Parameters::
64
+ # mod = PWN::SDR::Decoder.resolve(
65
+ # decoder: 'required - Symbol/String key from REGISTRY (e.g. :pocsag)'
66
+ # )
67
+
68
+ public_class_method def self.resolve(opts = {})
69
+ key = opts[:decoder].to_s.downcase.to_sym
70
+ const = REGISTRY[key]
71
+ raise "ERROR: Unknown decoder key #{key.inspect}. Supported: #{REGISTRY.keys.sort.join(', ')}" unless const
72
+
73
+ const_get(const)
74
+ end
17
75
 
18
76
  # Author(s):: 0day Inc. <support@0dayinc.com>
19
77
 
@@ -21,6 +79,8 @@ module PWN
21
79
  "AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
22
80
  end
23
81
 
82
+ # Display a List of Every PWN::SDR::Decoder Module
83
+
24
84
  public_class_method def self.help
25
85
  constants.sort
26
86
  end
@@ -14,7 +14,8 @@ module PWN
14
14
  ],
15
15
  demodulator_mode: :RAW,
16
16
  bandwidth: '100.000',
17
- precision: 5
17
+ precision: 5,
18
+ decoder: :adsb
18
19
  },
19
20
  ads_b1090: {
20
21
  ranges: [
@@ -22,7 +23,8 @@ module PWN
22
23
  ],
23
24
  demodulator_mode: :RAW,
24
25
  bandwidth: '100.000',
25
- precision: 5
26
+ precision: 5,
27
+ decoder: :adsb
26
28
  },
27
29
  aeronautical_lf: {
28
30
  ranges: [
@@ -70,7 +72,8 @@ module PWN
70
72
  ],
71
73
  demodulator_mode: :CW,
72
74
  bandwidth: '150',
73
- precision: 3
75
+ precision: 3,
76
+ decoder: :morse
74
77
  },
75
78
  amateur_60m: {
76
79
  ranges: [
@@ -142,7 +145,8 @@ module PWN
142
145
  ],
143
146
  demodulator_mode: :RAW,
144
147
  bandwidth: '200.000',
145
- precision: 6
148
+ precision: 6,
149
+ decoder: :lte
146
150
  },
147
151
  bluetooth: {
148
152
  ranges: [
@@ -150,7 +154,8 @@ module PWN
150
154
  ],
151
155
  demodulator_mode: :RAW,
152
156
  bandwidth: '1.000.000',
153
- precision: 5
157
+ precision: 5,
158
+ decoder: :bluetooth
154
159
  },
155
160
  cb: {
156
161
  ranges: [
@@ -166,7 +171,8 @@ module PWN
166
171
  ],
167
172
  demodulator_mode: :RAW,
168
173
  bandwidth: '1.250.000',
169
- precision: 6
174
+ precision: 6,
175
+ decoder: :lte
170
176
  },
171
177
  cw20: {
172
178
  ranges: [
@@ -174,7 +180,8 @@ module PWN
174
180
  ],
175
181
  demodulator_mode: :CW,
176
182
  bandwidth: '150',
177
- precision: 3
183
+ precision: 3,
184
+ decoder: :morse
178
185
  },
179
186
  cw40: {
180
187
  ranges: [
@@ -182,7 +189,8 @@ module PWN
182
189
  ],
183
190
  demodulator_mode: :CW,
184
191
  bandwidth: '150',
185
- precision: 3
192
+ precision: 3,
193
+ decoder: :morse
186
194
  },
187
195
  cw80: {
188
196
  ranges: [
@@ -190,7 +198,8 @@ module PWN
190
198
  ],
191
199
  demodulator_mode: :CW,
192
200
  bandwidth: '150',
193
- precision: 3
201
+ precision: 3,
202
+ decoder: :morse
194
203
  },
195
204
  dect: {
196
205
  ranges: [
@@ -198,7 +207,8 @@ module PWN
198
207
  ],
199
208
  demodulator_mode: :RAW,
200
209
  bandwidth: '100.000',
201
- precision: 5
210
+ precision: 5,
211
+ decoder: :dect
202
212
  },
203
213
  fm_radio: {
204
214
  ranges: [
@@ -231,7 +241,8 @@ module PWN
231
241
  ],
232
242
  demodulator_mode: :RAW,
233
243
  bandwidth: '171.200',
234
- precision: 4
244
+ precision: 4,
245
+ decoder: :gsm
235
246
  },
236
247
  gps_l1: {
237
248
  ranges: [
@@ -239,7 +250,8 @@ module PWN
239
250
  ],
240
251
  demodulator_mode: :RAW,
241
252
  bandwidth: '30.000.000',
242
- precision: 6
253
+ precision: 6,
254
+ decoder: :gps
243
255
  },
244
256
  gps_l2: {
245
257
  ranges: [
@@ -247,7 +259,8 @@ module PWN
247
259
  ],
248
260
  demodulator_mode: :RAW,
249
261
  bandwidth: '11.000.000',
250
- precision: 6
262
+ precision: 6,
263
+ decoder: :gps
251
264
  },
252
265
  gsm: {
253
266
  ranges: [
@@ -255,7 +268,8 @@ module PWN
255
268
  ],
256
269
  demodulator_mode: :RAW,
257
270
  bandwidth: '200.000',
258
- precision: 4
271
+ precision: 4,
272
+ decoder: :gsm
259
273
  },
260
274
  high_rfid: {
261
275
  ranges: [
@@ -263,7 +277,8 @@ module PWN
263
277
  ],
264
278
  demodulator_mode: :RAW,
265
279
  bandwidth: '400.000',
266
- precision: 3
280
+ precision: 3,
281
+ decoder: :rfid
267
282
  },
268
283
  iridium: {
269
284
  ranges: [
@@ -271,7 +286,8 @@ module PWN
271
286
  ],
272
287
  demodulator_mode: :RAW,
273
288
  bandwidth: '704.000',
274
- precision: 6
289
+ precision: 6,
290
+ decoder: :iridium
275
291
  },
276
292
  ism_5g: {
277
293
  ranges: [
@@ -279,7 +295,8 @@ module PWN
279
295
  ],
280
296
  demodulator_mode: :RAW,
281
297
  bandwidth: '150.000.000',
282
- precision: 7
298
+ precision: 7,
299
+ decoder: :rtl433
283
300
  },
284
301
  ism_902: {
285
302
  ranges: [
@@ -287,7 +304,8 @@ module PWN
287
304
  ],
288
305
  demodulator_mode: :RAW,
289
306
  bandwidth: '26.000.000',
290
- precision: 3
307
+ precision: 3,
308
+ decoder: :rtl433
291
309
  },
292
310
  keyfob300: {
293
311
  ranges: [
@@ -295,7 +313,8 @@ module PWN
295
313
  ],
296
314
  demodulator_mode: :RAW,
297
315
  bandwidth: '50.000',
298
- precision: 4
316
+ precision: 4,
317
+ decoder: :rtl433
299
318
  },
300
319
  keyfob310: {
301
320
  ranges: [
@@ -303,7 +322,8 @@ module PWN
303
322
  ],
304
323
  demodulator_mode: :RAW,
305
324
  bandwidth: '50.000',
306
- precision: 4
325
+ precision: 4,
326
+ decoder: :rtl433
307
327
  },
308
328
  keyfob315: {
309
329
  ranges: [
@@ -311,7 +331,8 @@ module PWN
311
331
  ],
312
332
  demodulator_mode: :RAW,
313
333
  bandwidth: '50.000',
314
- precision: 4
334
+ precision: 4,
335
+ decoder: :rtl433
315
336
  },
316
337
  keyfob390: {
317
338
  ranges: [
@@ -319,7 +340,8 @@ module PWN
319
340
  ],
320
341
  demodulator_mode: :RAW,
321
342
  bandwidth: '50.000',
322
- precision: 4
343
+ precision: 4,
344
+ decoder: :rtl433
323
345
  },
324
346
  keyfob433: {
325
347
  ranges: [
@@ -327,7 +349,8 @@ module PWN
327
349
  ],
328
350
  demodulator_mode: :RAW,
329
351
  bandwidth: '50.000',
330
- precision: 4
352
+ precision: 4,
353
+ decoder: :rtl433
331
354
  },
332
355
  keyfob868: {
333
356
  ranges: [
@@ -335,7 +358,8 @@ module PWN
335
358
  ],
336
359
  demodulator_mode: :RAW,
337
360
  bandwidth: '50.000',
338
- precision: 4
361
+ precision: 4,
362
+ decoder: :rtl433
339
363
  },
340
364
  land_mobile_uhf: {
341
365
  ranges: [
@@ -367,7 +391,8 @@ module PWN
367
391
  ],
368
392
  demodulator_mode: :RAW,
369
393
  bandwidth: '500.000',
370
- precision: 3
394
+ precision: 3,
395
+ decoder: :lora
371
396
  },
372
397
  lora8x: {
373
398
  ranges: [
@@ -375,7 +400,8 @@ module PWN
375
400
  ],
376
401
  demodulator_mode: :RAW,
377
402
  bandwidth: '500.000',
378
- precision: 3
403
+ precision: 3,
404
+ decoder: :lora
379
405
  },
380
406
  lora9x: {
381
407
  ranges: [
@@ -383,7 +409,8 @@ module PWN
383
409
  ],
384
410
  demodulator_mode: :RAW,
385
411
  bandwidth: '500.000',
386
- precision: 3
412
+ precision: 3,
413
+ decoder: :lora
387
414
  },
388
415
  low_rfid: {
389
416
  ranges: [
@@ -391,7 +418,8 @@ module PWN
391
418
  ],
392
419
  demodulator_mode: :RAW,
393
420
  bandwidth: '40.000',
394
- precision: 1
421
+ precision: 1,
422
+ decoder: :rfid
395
423
  },
396
424
  marine_vhf: {
397
425
  ranges: [
@@ -449,7 +477,8 @@ module PWN
449
477
  ],
450
478
  demodulator_mode: :FM,
451
479
  bandwidth: '25.000',
452
- precision: 4
480
+ precision: 4,
481
+ decoder: :pager
453
482
  },
454
483
  pager_flex: {
455
484
  ranges: [
@@ -487,7 +516,8 @@ module PWN
487
516
  ],
488
517
  demodulator_mode: :RAW,
489
518
  bandwidth: '200.000',
490
- precision: 6
519
+ precision: 6,
520
+ decoder: :lte
491
521
  },
492
522
  public_safety_700: {
493
523
  ranges: [
@@ -495,7 +525,8 @@ module PWN
495
525
  ],
496
526
  demodulator_mode: :FM,
497
527
  bandwidth: '25.000',
498
- precision: 4
528
+ precision: 4,
529
+ decoder: :p25
499
530
  },
500
531
  rtty20: {
501
532
  ranges: [
@@ -503,7 +534,8 @@ module PWN
503
534
  ],
504
535
  demodulator_mode: :FM,
505
536
  bandwidth: '170',
506
- precision: 3
537
+ precision: 3,
538
+ decoder: :rtty
507
539
  },
508
540
  rtty40: {
509
541
  ranges: [
@@ -511,7 +543,8 @@ module PWN
511
543
  ],
512
544
  demodulator_mode: :FM,
513
545
  bandwidth: '170',
514
- precision: 3
546
+ precision: 3,
547
+ decoder: :rtty
515
548
  },
516
549
  rtty80: {
517
550
  ranges: [
@@ -519,7 +552,8 @@ module PWN
519
552
  ],
520
553
  demodulator_mode: :FM,
521
554
  bandwidth: '170',
522
- precision: 3
555
+ precision: 3,
556
+ decoder: :rtty
523
557
  },
524
558
  shortwave1: {
525
559
  ranges: [
@@ -671,7 +705,8 @@ module PWN
671
705
  ],
672
706
  demodulator_mode: :RAW,
673
707
  bandwidth: '400.000',
674
- precision: 5
708
+ precision: 5,
709
+ decoder: :rfid
675
710
  },
676
711
  umts: {
677
712
  ranges: [
@@ -679,7 +714,8 @@ module PWN
679
714
  ],
680
715
  demodulator_mode: :RAW,
681
716
  bandwidth: '5.000.000',
682
- precision: 6
717
+ precision: 6,
718
+ decoder: :lte
683
719
  },
684
720
  weather_sat: {
685
721
  ranges: [
@@ -687,7 +723,8 @@ module PWN
687
723
  ],
688
724
  demodulator_mode: :FM,
689
725
  bandwidth: '15.000',
690
- precision: 5
726
+ precision: 5,
727
+ decoder: :apt
691
728
  },
692
729
  wifi24: {
693
730
  ranges: [
@@ -695,7 +732,8 @@ module PWN
695
732
  ],
696
733
  demodulator_mode: :RAW,
697
734
  bandwidth: '20.000.000',
698
- precision: 7
735
+ precision: 7,
736
+ decoder: :wifi
699
737
  },
700
738
  wifi5: {
701
739
  ranges: [
@@ -703,7 +741,8 @@ module PWN
703
741
  ],
704
742
  demodulator_mode: :RAW,
705
743
  bandwidth: '20.000.000',
706
- precision: 7
744
+ precision: 7,
745
+ decoder: :wifi
707
746
  },
708
747
  wifi6: {
709
748
  ranges: [
@@ -711,7 +750,8 @@ module PWN
711
750
  ],
712
751
  demodulator_mode: :RAW,
713
752
  bandwidth: '20.000.000',
714
- precision: 7
753
+ precision: 7,
754
+ decoder: :wifi
715
755
  },
716
756
  zigbee: {
717
757
  ranges: [
@@ -719,7 +759,8 @@ module PWN
719
759
  ],
720
760
  demodulator_mode: :RAW,
721
761
  bandwidth: '2.000.000',
722
- precision: 7
762
+ precision: 7,
763
+ decoder: :zigbee
723
764
  }
724
765
  }
725
766
  rescue StandardError => e