pwn 0.5.509 → 0.5.512

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 (1057) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  4. data/.gitignore +65 -0
  5. data/.rubocop.yml +35 -0
  6. data/.rubocop_todo.yml +178 -0
  7. data/.ruby-gemset +1 -0
  8. data/.ruby-version +1 -0
  9. data/.travis.yml +24 -0
  10. data/CHANGELOG_BETWEEN_TAGS.txt +185 -0
  11. data/CODE_OF_CONDUCT.md +46 -0
  12. data/CONTRIBUTING.md +13 -0
  13. data/Gemfile +107 -0
  14. data/LICENSE.txt +22 -0
  15. data/README.md +100 -0
  16. data/Rakefile +20 -0
  17. data/Vagrantfile +250 -0
  18. data/bin/pwn +30 -0
  19. data/bin/pwn_android_war_dialer +151 -0
  20. data/bin/pwn_autoinc_version +58 -0
  21. data/bin/pwn_aws_describe_resources +717 -0
  22. data/bin/pwn_bdba_groups +107 -0
  23. data/bin/pwn_bdba_scan +198 -0
  24. data/bin/pwn_burp_suite_pro_active_rest_api_scan +167 -0
  25. data/bin/pwn_burp_suite_pro_active_scan +132 -0
  26. data/bin/pwn_char_base64_encoding +15 -0
  27. data/bin/pwn_char_dec_encoding +14 -0
  28. data/bin/pwn_char_hex_escaped_encoding +17 -0
  29. data/bin/pwn_char_html_entity_encoding +15 -0
  30. data/bin/pwn_char_unicode_escaped_encoding +14 -0
  31. data/bin/pwn_char_url_encoding +15 -0
  32. data/bin/pwn_crt_sh +73 -0
  33. data/bin/pwn_defectdojo_engagement_create +148 -0
  34. data/bin/pwn_defectdojo_importscan +130 -0
  35. data/bin/pwn_defectdojo_reimportscan +118 -0
  36. data/bin/pwn_diff_csv_files_w_column_exclude +171 -0
  37. data/bin/pwn_domain_reversewhois +76 -0
  38. data/bin/pwn_fuzz_net_app_proto +170 -0
  39. data/bin/pwn_gqrx_scanner +171 -0
  40. data/bin/pwn_jenkins_create_job +58 -0
  41. data/bin/pwn_jenkins_create_view +58 -0
  42. data/bin/pwn_jenkins_install_plugin +83 -0
  43. data/bin/pwn_jenkins_thinBackup_aws_s3 +113 -0
  44. data/bin/pwn_jenkins_update_plugins +77 -0
  45. data/bin/pwn_jenkins_useradd +76 -0
  46. data/bin/pwn_mail_agent +114 -0
  47. data/bin/pwn_msf_postgres_login +28 -0
  48. data/bin/pwn_nessus_cloud_scan_crud +334 -0
  49. data/bin/pwn_nessus_cloud_vulnscan +87 -0
  50. data/bin/pwn_nexpose +42 -0
  51. data/bin/pwn_nmap_discover_tcp_udp +353 -0
  52. data/bin/pwn_openvas_vulnscan +104 -0
  53. data/bin/pwn_pastebin_sample_filter +47 -0
  54. data/bin/pwn_phone +129 -0
  55. data/bin/pwn_rdoc_to_jsonl +83 -0
  56. data/bin/pwn_sast +183 -0
  57. data/bin/pwn_serial_check_voicemail +56 -0
  58. data/bin/pwn_serial_msr206 +168 -0
  59. data/bin/pwn_serial_qualcomm_commands +16 -0
  60. data/bin/pwn_serial_son_micro_sm132_rfid +188 -0
  61. data/bin/pwn_shodan_graphql_introspection +304 -0
  62. data/bin/pwn_shodan_search +90 -0
  63. data/bin/pwn_simple_http_server +44 -0
  64. data/bin/pwn_web_cache_deception +205 -0
  65. data/bin/pwn_www_checkip +77 -0
  66. data/bin/pwn_www_uri_buster +363 -0
  67. data/bin/pwn_xss_dom_vectors +149 -0
  68. data/bin/pwn_zaproxy_active_rest_api_scan +159 -0
  69. data/bin/pwn_zaproxy_active_scan +130 -0
  70. data/build_gem.sh +33 -0
  71. data/documentation/PWN.png +0 -0
  72. data/documentation/PWN_Contributors_and_Users.png +0 -0
  73. data/documentation/fax-spectrogram.png +0 -0
  74. data/documentation/fax-waveform.png +0 -0
  75. data/documentation/frozen_string_literal_files_changed_from_false_to_true.txt +54 -0
  76. data/documentation/pwn_android_war_dialer_session.png +0 -0
  77. data/documentation/pwn_install.png +0 -0
  78. data/documentation/pwn_wallpaper.jpg +0 -0
  79. data/documentation/ringing-spectrogram.png +0 -0
  80. data/documentation/ringing-waveform.png +0 -0
  81. data/etc/systemd/msfrpcd.service +12 -0
  82. data/etc/systemd/openvas.service +14 -0
  83. data/etc/userland/aws/apache2/jenkins_443.conf +90 -0
  84. data/etc/userland/aws/apache2/jenkins_80.conf +7 -0
  85. data/etc/userland/aws/apache2/openvas_443.conf +87 -0
  86. data/etc/userland/aws/apache2/openvas_80.conf +7 -0
  87. data/etc/userland/aws/apache2/sast_443.conf +87 -0
  88. data/etc/userland/aws/apache2/sast_80.conf +9 -0
  89. data/etc/userland/aws/apache2/vagrant.yaml.EXAMPLE +9 -0
  90. data/etc/userland/aws/arachni/navigation-REST.instruct.EXAMPLE +29 -0
  91. data/etc/userland/aws/arachni/navigation.instruct.EXAMPLE +3 -0
  92. data/etc/userland/aws/burpsuite/navigation.instruct.EXAMPLE +3 -0
  93. data/etc/userland/aws/burpsuite/vagrant.yaml.EXAMPLE +2 -0
  94. data/etc/userland/aws/defectdojo/vagrant.yaml.EXAMPLE +3 -0
  95. data/etc/userland/aws/jenkins/inject_build_envs.sh +15 -0
  96. data/etc/userland/aws/jenkins/jenkins +81 -0
  97. data/etc/userland/aws/jenkins/jobs/pipeline-pwntemplate.xml +298 -0
  98. data/etc/userland/aws/jenkins/jobs/pipeline-selfupdate.xml +462 -0
  99. data/etc/userland/aws/jenkins/jobs/pwntemplate-DOMAIN-burpsuite.xml +44 -0
  100. data/etc/userland/aws/jenkins/jobs/pwntemplate-DOMAIN-owasp_zap.xml +35 -0
  101. data/etc/userland/aws/jenkins/jobs/pwntemplate-DOMAIN-ssllabs-scan.xml +45 -0
  102. data/etc/userland/aws/jenkins/jobs/pwntemplate-GITREPO_BRANCH-sast.xml +71 -0
  103. data/etc/userland/aws/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_discovery_scan_tcp_udp_65k.xml +56 -0
  104. data/etc/userland/aws/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_xml_results_searchsploit.xml +59 -0
  105. data/etc/userland/aws/jenkins/jobs/pwntemplate-NETWORKRANGE-openvas.xml +45 -0
  106. data/etc/userland/aws/jenkins/jobs/selfupdate-exploit-db.xml +43 -0
  107. data/etc/userland/aws/jenkins/jobs/selfupdate-gem.xml +42 -0
  108. data/etc/userland/aws/jenkins/jobs/selfupdate-jenkins_plugins.xml +42 -0
  109. data/etc/userland/aws/jenkins/jobs/selfupdate-metasploit.xml +42 -0
  110. data/etc/userland/aws/jenkins/jobs/selfupdate-nmap_all_live_hosts.xml +42 -0
  111. data/etc/userland/aws/jenkins/jobs/selfupdate-openvas_sync.xml +42 -0
  112. data/etc/userland/aws/jenkins/jobs/selfupdate-openvas_wrappers.xml +42 -0
  113. data/etc/userland/aws/jenkins/jobs/selfupdate-os.xml +42 -0
  114. data/etc/userland/aws/jenkins/jobs/selfupdate-pwn.xml +42 -0
  115. data/etc/userland/aws/jenkins/jobs/selfupdate-rvm.xml +42 -0
  116. data/etc/userland/aws/jenkins/jobs/selfupdate-ssllabs-scan.xml +42 -0
  117. data/etc/userland/aws/jenkins/jobs/selfupdate-wpscan.xml +42 -0
  118. data/etc/userland/aws/jenkins/jobs_userland/.gitkeep +0 -0
  119. data/etc/userland/aws/jenkins/log_parser_rules/arachni.rules +5 -0
  120. data/etc/userland/aws/jenkins/log_parser_rules/sast.rules +2 -0
  121. data/etc/userland/aws/jenkins/log_parser_rules/self_update.rules +14 -0
  122. data/etc/userland/aws/jenkins/log_parser_rules/ssllabs-scan.rules +8 -0
  123. data/etc/userland/aws/jenkins/log_parser_rules/system_maintenance.rules +9 -0
  124. data/etc/userland/aws/jenkins/log_parser_rules/wpscan.rules +2 -0
  125. data/etc/userland/aws/jenkins/vagrant.yaml.EXAMPLE +8 -0
  126. data/etc/userland/aws/letsencrypt/vagrant.yaml.EXAMPLE +5 -0
  127. data/etc/userland/aws/metasploit/vagrant.yaml.EXAMPLE +4 -0
  128. data/etc/userland/aws/nessus/vagrant.yaml.EXAMPLE +15 -0
  129. data/etc/userland/aws/openvas/vagrant.yaml.EXAMPLE +2 -0
  130. data/etc/userland/aws/owasp_zap/navigation.instruct.EXAMPLE +3 -0
  131. data/etc/userland/aws/postgres/vagrant.yaml.EXAMPLE +2 -0
  132. data/etc/userland/aws/recon-ng/vagrant.yaml.EXAMPLE +52 -0
  133. data/etc/userland/aws/vagrant.yaml.EXAMPLE +35 -0
  134. data/etc/userland/docker/apache2/jenkins_443.conf +90 -0
  135. data/etc/userland/docker/apache2/jenkins_80.conf +7 -0
  136. data/etc/userland/docker/apache2/openvas_443.conf +87 -0
  137. data/etc/userland/docker/apache2/openvas_80.conf +7 -0
  138. data/etc/userland/docker/apache2/sast_443.conf +87 -0
  139. data/etc/userland/docker/apache2/sast_80.conf +9 -0
  140. data/etc/userland/docker/apache2/vagrant.yaml.EXAMPLE +9 -0
  141. data/etc/userland/docker/arachni/navigation-REST.instruct.EXAMPLE +29 -0
  142. data/etc/userland/docker/arachni/navigation.instruct.EXAMPLE +3 -0
  143. data/etc/userland/docker/burpsuite/navigation.instruct.EXAMPLE +3 -0
  144. data/etc/userland/docker/burpsuite/vagrant.yaml.EXAMPLE +2 -0
  145. data/etc/userland/docker/defectdojo/vagrant.yaml.EXAMPLE +3 -0
  146. data/etc/userland/docker/jenkins/inject_build_envs.sh +15 -0
  147. data/etc/userland/docker/jenkins/jenkins +81 -0
  148. data/etc/userland/docker/jenkins/jobs/pipeline-pwntemplate.xml +298 -0
  149. data/etc/userland/docker/jenkins/jobs/pipeline-selfupdate.xml +462 -0
  150. data/etc/userland/docker/jenkins/jobs/pwntemplate-DOMAIN-burpsuite.xml +44 -0
  151. data/etc/userland/docker/jenkins/jobs/pwntemplate-DOMAIN-owasp_zap.xml +35 -0
  152. data/etc/userland/docker/jenkins/jobs/pwntemplate-DOMAIN-ssllabs-scan.xml +45 -0
  153. data/etc/userland/docker/jenkins/jobs/pwntemplate-GITREPO_BRANCH-sast.xml +71 -0
  154. data/etc/userland/docker/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_discovery_scan_tcp_udp_65k.xml +56 -0
  155. data/etc/userland/docker/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_xml_results_searchsploit.xml +59 -0
  156. data/etc/userland/docker/jenkins/jobs/pwntemplate-NETWORKRANGE-openvas.xml +45 -0
  157. data/etc/userland/docker/jenkins/jobs/selfupdate-exploit-db.xml +43 -0
  158. data/etc/userland/docker/jenkins/jobs/selfupdate-gem.xml +42 -0
  159. data/etc/userland/docker/jenkins/jobs/selfupdate-jenkins_plugins.xml +42 -0
  160. data/etc/userland/docker/jenkins/jobs/selfupdate-metasploit.xml +42 -0
  161. data/etc/userland/docker/jenkins/jobs/selfupdate-nmap_all_live_hosts.xml +42 -0
  162. data/etc/userland/docker/jenkins/jobs/selfupdate-openvas_sync.xml +42 -0
  163. data/etc/userland/docker/jenkins/jobs/selfupdate-openvas_wrappers.xml +42 -0
  164. data/etc/userland/docker/jenkins/jobs/selfupdate-os.xml +42 -0
  165. data/etc/userland/docker/jenkins/jobs/selfupdate-pwn.xml +42 -0
  166. data/etc/userland/docker/jenkins/jobs/selfupdate-rvm.xml +42 -0
  167. data/etc/userland/docker/jenkins/jobs/selfupdate-ssllabs-scan.xml +42 -0
  168. data/etc/userland/docker/jenkins/jobs/selfupdate-wpscan.xml +42 -0
  169. data/etc/userland/docker/jenkins/jobs_userland/.gitkeep +0 -0
  170. data/etc/userland/docker/jenkins/log_parser_rules/arachni.rules +5 -0
  171. data/etc/userland/docker/jenkins/log_parser_rules/sast.rules +2 -0
  172. data/etc/userland/docker/jenkins/log_parser_rules/self_update.rules +14 -0
  173. data/etc/userland/docker/jenkins/log_parser_rules/ssllabs-scan.rules +8 -0
  174. data/etc/userland/docker/jenkins/log_parser_rules/system_maintenance.rules +9 -0
  175. data/etc/userland/docker/jenkins/log_parser_rules/wpscan.rules +2 -0
  176. data/etc/userland/docker/jenkins/vagrant.yaml.EXAMPLE +8 -0
  177. data/etc/userland/docker/letsencrypt/vagrant.yaml.EXAMPLE +5 -0
  178. data/etc/userland/docker/metasploit/vagrant.yaml.EXAMPLE +4 -0
  179. data/etc/userland/docker/nessus/vagrant.yaml.EXAMPLE +15 -0
  180. data/etc/userland/docker/openvas/vagrant.yaml.EXAMPLE +2 -0
  181. data/etc/userland/docker/owasp_zap/navigation.instruct.EXAMPLE +3 -0
  182. data/etc/userland/docker/postgres/vagrant.yaml.EXAMPLE +2 -0
  183. data/etc/userland/docker/recon-ng/vagrant.yaml.EXAMPLE +52 -0
  184. data/etc/userland/qemu/apache2/jenkins_443.conf +90 -0
  185. data/etc/userland/qemu/apache2/jenkins_80.conf +7 -0
  186. data/etc/userland/qemu/apache2/openvas_443.conf +87 -0
  187. data/etc/userland/qemu/apache2/openvas_80.conf +7 -0
  188. data/etc/userland/qemu/apache2/sast_443.conf +87 -0
  189. data/etc/userland/qemu/apache2/sast_80.conf +9 -0
  190. data/etc/userland/qemu/apache2/vagrant.yaml.EXAMPLE +9 -0
  191. data/etc/userland/qemu/arachni/navigation-REST.instruct.EXAMPLE +29 -0
  192. data/etc/userland/qemu/arachni/navigation.instruct.EXAMPLE +3 -0
  193. data/etc/userland/qemu/burpsuite/navigation.instruct.EXAMPLE +3 -0
  194. data/etc/userland/qemu/burpsuite/vagrant.yaml.EXAMPLE +2 -0
  195. data/etc/userland/qemu/defectdojo/vagrant.yaml.EXAMPLE +3 -0
  196. data/etc/userland/qemu/jenkins/inject_build_envs.sh +15 -0
  197. data/etc/userland/qemu/jenkins/jenkins +81 -0
  198. data/etc/userland/qemu/jenkins/jobs/pipeline-pwntemplate.xml +298 -0
  199. data/etc/userland/qemu/jenkins/jobs/pipeline-selfupdate.xml +462 -0
  200. data/etc/userland/qemu/jenkins/jobs/pwntemplate-DOMAIN-burpsuite.xml +44 -0
  201. data/etc/userland/qemu/jenkins/jobs/pwntemplate-DOMAIN-owasp_zap.xml +35 -0
  202. data/etc/userland/qemu/jenkins/jobs/pwntemplate-DOMAIN-ssllabs-scan.xml +45 -0
  203. data/etc/userland/qemu/jenkins/jobs/pwntemplate-GITREPO_BRANCH-sast.xml +71 -0
  204. data/etc/userland/qemu/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_discovery_scan_tcp_udp_65k.xml +56 -0
  205. data/etc/userland/qemu/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_xml_results_searchsploit.xml +59 -0
  206. data/etc/userland/qemu/jenkins/jobs/pwntemplate-NETWORKRANGE-openvas.xml +45 -0
  207. data/etc/userland/qemu/jenkins/jobs/selfupdate-exploit-db.xml +43 -0
  208. data/etc/userland/qemu/jenkins/jobs/selfupdate-gem.xml +42 -0
  209. data/etc/userland/qemu/jenkins/jobs/selfupdate-jenkins_plugins.xml +42 -0
  210. data/etc/userland/qemu/jenkins/jobs/selfupdate-metasploit.xml +42 -0
  211. data/etc/userland/qemu/jenkins/jobs/selfupdate-nmap_all_live_hosts.xml +42 -0
  212. data/etc/userland/qemu/jenkins/jobs/selfupdate-openvas_sync.xml +42 -0
  213. data/etc/userland/qemu/jenkins/jobs/selfupdate-openvas_wrappers.xml +42 -0
  214. data/etc/userland/qemu/jenkins/jobs/selfupdate-os.xml +42 -0
  215. data/etc/userland/qemu/jenkins/jobs/selfupdate-pwn.xml +42 -0
  216. data/etc/userland/qemu/jenkins/jobs/selfupdate-rvm.xml +42 -0
  217. data/etc/userland/qemu/jenkins/jobs/selfupdate-ssllabs-scan.xml +42 -0
  218. data/etc/userland/qemu/jenkins/jobs/selfupdate-wpscan.xml +42 -0
  219. data/etc/userland/qemu/jenkins/jobs_userland/.gitkeep +0 -0
  220. data/etc/userland/qemu/jenkins/log_parser_rules/arachni.rules +5 -0
  221. data/etc/userland/qemu/jenkins/log_parser_rules/sast.rules +2 -0
  222. data/etc/userland/qemu/jenkins/log_parser_rules/self_update.rules +14 -0
  223. data/etc/userland/qemu/jenkins/log_parser_rules/ssllabs-scan.rules +8 -0
  224. data/etc/userland/qemu/jenkins/log_parser_rules/system_maintenance.rules +9 -0
  225. data/etc/userland/qemu/jenkins/log_parser_rules/wpscan.rules +2 -0
  226. data/etc/userland/qemu/jenkins/vagrant.yaml.EXAMPLE +8 -0
  227. data/etc/userland/qemu/letsencrypt/vagrant.yaml.EXAMPLE +5 -0
  228. data/etc/userland/qemu/metasploit/vagrant.yaml.EXAMPLE +4 -0
  229. data/etc/userland/qemu/nessus/vagrant.yaml.EXAMPLE +15 -0
  230. data/etc/userland/qemu/openvas/vagrant.yaml.EXAMPLE +2 -0
  231. data/etc/userland/qemu/owasp_zap/navigation.instruct.EXAMPLE +3 -0
  232. data/etc/userland/qemu/postgres/vagrant.yaml.EXAMPLE +2 -0
  233. data/etc/userland/qemu/recon-ng/vagrant.yaml.EXAMPLE +52 -0
  234. data/etc/userland/ruby-gem/apache2/jenkins_443.conf +90 -0
  235. data/etc/userland/ruby-gem/apache2/jenkins_80.conf +7 -0
  236. data/etc/userland/ruby-gem/apache2/openvas_443.conf +87 -0
  237. data/etc/userland/ruby-gem/apache2/openvas_80.conf +7 -0
  238. data/etc/userland/ruby-gem/apache2/sast_443.conf +87 -0
  239. data/etc/userland/ruby-gem/apache2/sast_80.conf +9 -0
  240. data/etc/userland/ruby-gem/apache2/vagrant.yaml.EXAMPLE +9 -0
  241. data/etc/userland/ruby-gem/arachni/navigation-REST.instruct.EXAMPLE +29 -0
  242. data/etc/userland/ruby-gem/arachni/navigation.instruct.EXAMPLE +3 -0
  243. data/etc/userland/ruby-gem/burpsuite/navigation.instruct.EXAMPLE +3 -0
  244. data/etc/userland/ruby-gem/burpsuite/vagrant.yaml.EXAMPLE +2 -0
  245. data/etc/userland/ruby-gem/defectdojo/vagrant.yaml.EXAMPLE +3 -0
  246. data/etc/userland/ruby-gem/jenkins/inject_build_envs.sh +15 -0
  247. data/etc/userland/ruby-gem/jenkins/jenkins +81 -0
  248. data/etc/userland/ruby-gem/jenkins/jobs/pipeline-pwntemplate.xml +298 -0
  249. data/etc/userland/ruby-gem/jenkins/jobs/pipeline-selfupdate.xml +462 -0
  250. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-DOMAIN-burpsuite.xml +44 -0
  251. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-DOMAIN-owasp_zap.xml +35 -0
  252. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-DOMAIN-ssllabs-scan.xml +45 -0
  253. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-GITREPO_BRANCH-sast.xml +71 -0
  254. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_discovery_scan_tcp_udp_65k.xml +56 -0
  255. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_xml_results_searchsploit.xml +59 -0
  256. data/etc/userland/ruby-gem/jenkins/jobs/pwntemplate-NETWORKRANGE-openvas.xml +45 -0
  257. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-exploit-db.xml +43 -0
  258. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-gem.xml +42 -0
  259. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-jenkins_plugins.xml +42 -0
  260. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-metasploit.xml +42 -0
  261. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-nmap_all_live_hosts.xml +42 -0
  262. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-openvas_sync.xml +42 -0
  263. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-openvas_wrappers.xml +42 -0
  264. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-os.xml +42 -0
  265. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-pwn.xml +42 -0
  266. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-rvm.xml +42 -0
  267. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-ssllabs-scan.xml +42 -0
  268. data/etc/userland/ruby-gem/jenkins/jobs/selfupdate-wpscan.xml +42 -0
  269. data/etc/userland/ruby-gem/jenkins/jobs_userland/.gitkeep +0 -0
  270. data/etc/userland/ruby-gem/jenkins/log_parser_rules/arachni.rules +5 -0
  271. data/etc/userland/ruby-gem/jenkins/log_parser_rules/sast.rules +2 -0
  272. data/etc/userland/ruby-gem/jenkins/log_parser_rules/self_update.rules +14 -0
  273. data/etc/userland/ruby-gem/jenkins/log_parser_rules/ssllabs-scan.rules +8 -0
  274. data/etc/userland/ruby-gem/jenkins/log_parser_rules/system_maintenance.rules +9 -0
  275. data/etc/userland/ruby-gem/jenkins/log_parser_rules/wpscan.rules +2 -0
  276. data/etc/userland/ruby-gem/jenkins/vagrant.yaml.EXAMPLE +8 -0
  277. data/etc/userland/ruby-gem/letsencrypt/vagrant.yaml.EXAMPLE +5 -0
  278. data/etc/userland/ruby-gem/metasploit/vagrant.yaml.EXAMPLE +4 -0
  279. data/etc/userland/ruby-gem/nessus/vagrant.yaml.EXAMPLE +15 -0
  280. data/etc/userland/ruby-gem/openvas/vagrant.yaml.EXAMPLE +2 -0
  281. data/etc/userland/ruby-gem/owasp_zap/navigation.instruct.EXAMPLE +3 -0
  282. data/etc/userland/ruby-gem/postgres/vagrant.yaml.EXAMPLE +2 -0
  283. data/etc/userland/ruby-gem/recon-ng/vagrant.yaml.EXAMPLE +52 -0
  284. data/etc/userland/virtualbox/apache2/jenkins_443.conf +90 -0
  285. data/etc/userland/virtualbox/apache2/jenkins_80.conf +7 -0
  286. data/etc/userland/virtualbox/apache2/openvas_443.conf +87 -0
  287. data/etc/userland/virtualbox/apache2/openvas_80.conf +7 -0
  288. data/etc/userland/virtualbox/apache2/sast_443.conf +87 -0
  289. data/etc/userland/virtualbox/apache2/sast_80.conf +9 -0
  290. data/etc/userland/virtualbox/apache2/vagrant.yaml.EXAMPLE +9 -0
  291. data/etc/userland/virtualbox/arachni/navigation-REST.instruct.EXAMPLE +29 -0
  292. data/etc/userland/virtualbox/arachni/navigation.instruct.EXAMPLE +3 -0
  293. data/etc/userland/virtualbox/burpsuite/navigation.instruct.EXAMPLE +3 -0
  294. data/etc/userland/virtualbox/burpsuite/vagrant.yaml.EXAMPLE +2 -0
  295. data/etc/userland/virtualbox/defectdojo/vagrant.yaml.EXAMPLE +3 -0
  296. data/etc/userland/virtualbox/jenkins/inject_build_envs.sh +15 -0
  297. data/etc/userland/virtualbox/jenkins/jenkins +81 -0
  298. data/etc/userland/virtualbox/jenkins/jobs/pipeline-pwntemplate.xml +298 -0
  299. data/etc/userland/virtualbox/jenkins/jobs/pipeline-selfupdate.xml +462 -0
  300. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-DOMAIN-burpsuite.xml +44 -0
  301. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-DOMAIN-owasp_zap.xml +35 -0
  302. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-DOMAIN-ssllabs-scan.xml +45 -0
  303. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-GITREPO_BRANCH-sast.xml +71 -0
  304. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_discovery_scan_tcp_udp_65k.xml +56 -0
  305. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_xml_results_searchsploit.xml +59 -0
  306. data/etc/userland/virtualbox/jenkins/jobs/pwntemplate-NETWORKRANGE-openvas.xml +45 -0
  307. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-exploit-db.xml +43 -0
  308. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-gem.xml +42 -0
  309. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-jenkins_plugins.xml +42 -0
  310. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-metasploit.xml +42 -0
  311. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-nmap_all_live_hosts.xml +42 -0
  312. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-openvas_sync.xml +42 -0
  313. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-openvas_wrappers.xml +42 -0
  314. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-os.xml +42 -0
  315. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-pwn.xml +42 -0
  316. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-rvm.xml +42 -0
  317. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-ssllabs-scan.xml +42 -0
  318. data/etc/userland/virtualbox/jenkins/jobs/selfupdate-wpscan.xml +42 -0
  319. data/etc/userland/virtualbox/jenkins/jobs_userland/.gitkeep +0 -0
  320. data/etc/userland/virtualbox/jenkins/log_parser_rules/arachni.rules +5 -0
  321. data/etc/userland/virtualbox/jenkins/log_parser_rules/sast.rules +2 -0
  322. data/etc/userland/virtualbox/jenkins/log_parser_rules/self_update.rules +14 -0
  323. data/etc/userland/virtualbox/jenkins/log_parser_rules/ssllabs-scan.rules +8 -0
  324. data/etc/userland/virtualbox/jenkins/log_parser_rules/system_maintenance.rules +9 -0
  325. data/etc/userland/virtualbox/jenkins/log_parser_rules/wpscan.rules +2 -0
  326. data/etc/userland/virtualbox/jenkins/vagrant.yaml.EXAMPLE +8 -0
  327. data/etc/userland/virtualbox/letsencrypt/vagrant.yaml.EXAMPLE +5 -0
  328. data/etc/userland/virtualbox/metasploit/vagrant.yaml.EXAMPLE +4 -0
  329. data/etc/userland/virtualbox/nessus/vagrant.yaml.EXAMPLE +15 -0
  330. data/etc/userland/virtualbox/openvas/vagrant.yaml.EXAMPLE +2 -0
  331. data/etc/userland/virtualbox/owasp_zap/navigation.instruct.EXAMPLE +3 -0
  332. data/etc/userland/virtualbox/postgres/vagrant.yaml.EXAMPLE +2 -0
  333. data/etc/userland/virtualbox/recon-ng/vagrant.yaml.EXAMPLE +52 -0
  334. data/etc/userland/virtualbox/vagrant.yaml.EXAMPLE +4 -0
  335. data/etc/userland/vmware/apache2/jenkins_443.conf +90 -0
  336. data/etc/userland/vmware/apache2/jenkins_80.conf +7 -0
  337. data/etc/userland/vmware/apache2/openvas_443.conf +87 -0
  338. data/etc/userland/vmware/apache2/openvas_80.conf +7 -0
  339. data/etc/userland/vmware/apache2/sast_443.conf +87 -0
  340. data/etc/userland/vmware/apache2/sast_80.conf +9 -0
  341. data/etc/userland/vmware/apache2/vagrant.yaml.EXAMPLE +9 -0
  342. data/etc/userland/vmware/arachni/navigation-REST.instruct.EXAMPLE +29 -0
  343. data/etc/userland/vmware/arachni/navigation.instruct.EXAMPLE +3 -0
  344. data/etc/userland/vmware/burpsuite/navigation.instruct.EXAMPLE +3 -0
  345. data/etc/userland/vmware/burpsuite/vagrant.yaml.EXAMPLE +2 -0
  346. data/etc/userland/vmware/defectdojo/vagrant.yaml.EXAMPLE +3 -0
  347. data/etc/userland/vmware/jenkins/inject_build_envs.sh +15 -0
  348. data/etc/userland/vmware/jenkins/jenkins +81 -0
  349. data/etc/userland/vmware/jenkins/jobs/pipeline-pwntemplate.xml +298 -0
  350. data/etc/userland/vmware/jenkins/jobs/pipeline-selfupdate.xml +462 -0
  351. data/etc/userland/vmware/jenkins/jobs/pwntemplate-DOMAIN-burpsuite.xml +44 -0
  352. data/etc/userland/vmware/jenkins/jobs/pwntemplate-DOMAIN-owasp_zap.xml +35 -0
  353. data/etc/userland/vmware/jenkins/jobs/pwntemplate-DOMAIN-ssllabs-scan.xml +45 -0
  354. data/etc/userland/vmware/jenkins/jobs/pwntemplate-GITREPO_BRANCH-sast.xml +71 -0
  355. data/etc/userland/vmware/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_discovery_scan_tcp_udp_65k.xml +56 -0
  356. data/etc/userland/vmware/jenkins/jobs/pwntemplate-NETWORKRANGE-nmap_xml_results_searchsploit.xml +59 -0
  357. data/etc/userland/vmware/jenkins/jobs/pwntemplate-NETWORKRANGE-openvas.xml +45 -0
  358. data/etc/userland/vmware/jenkins/jobs/selfupdate-exploit-db.xml +43 -0
  359. data/etc/userland/vmware/jenkins/jobs/selfupdate-gem.xml +42 -0
  360. data/etc/userland/vmware/jenkins/jobs/selfupdate-jenkins_plugins.xml +42 -0
  361. data/etc/userland/vmware/jenkins/jobs/selfupdate-metasploit.xml +42 -0
  362. data/etc/userland/vmware/jenkins/jobs/selfupdate-nmap_all_live_hosts.xml +42 -0
  363. data/etc/userland/vmware/jenkins/jobs/selfupdate-openvas_sync.xml +42 -0
  364. data/etc/userland/vmware/jenkins/jobs/selfupdate-openvas_wrappers.xml +42 -0
  365. data/etc/userland/vmware/jenkins/jobs/selfupdate-os.xml +42 -0
  366. data/etc/userland/vmware/jenkins/jobs/selfupdate-pwn.xml +42 -0
  367. data/etc/userland/vmware/jenkins/jobs/selfupdate-rvm.xml +42 -0
  368. data/etc/userland/vmware/jenkins/jobs/selfupdate-ssllabs-scan.xml +42 -0
  369. data/etc/userland/vmware/jenkins/jobs/selfupdate-wpscan.xml +42 -0
  370. data/etc/userland/vmware/jenkins/jobs_userland/.gitkeep +0 -0
  371. data/etc/userland/vmware/jenkins/log_parser_rules/arachni.rules +5 -0
  372. data/etc/userland/vmware/jenkins/log_parser_rules/sast.rules +2 -0
  373. data/etc/userland/vmware/jenkins/log_parser_rules/self_update.rules +14 -0
  374. data/etc/userland/vmware/jenkins/log_parser_rules/ssllabs-scan.rules +8 -0
  375. data/etc/userland/vmware/jenkins/log_parser_rules/system_maintenance.rules +9 -0
  376. data/etc/userland/vmware/jenkins/log_parser_rules/wpscan.rules +2 -0
  377. data/etc/userland/vmware/jenkins/vagrant.yaml.EXAMPLE +8 -0
  378. data/etc/userland/vmware/letsencrypt/vagrant.yaml.EXAMPLE +5 -0
  379. data/etc/userland/vmware/metasploit/vagrant.yaml.EXAMPLE +4 -0
  380. data/etc/userland/vmware/nessus/vagrant.yaml.EXAMPLE +15 -0
  381. data/etc/userland/vmware/openvas/vagrant.yaml.EXAMPLE +2 -0
  382. data/etc/userland/vmware/owasp_zap/navigation.instruct.EXAMPLE +3 -0
  383. data/etc/userland/vmware/postgres/vagrant.yaml.EXAMPLE +2 -0
  384. data/etc/userland/vmware/recon-ng/vagrant.yaml.EXAMPLE +52 -0
  385. data/etc/userland/vmware/vagrant.yaml.EXAMPLE +5 -0
  386. data/git_commit.sh +57 -0
  387. data/install.sh +177 -0
  388. data/lib/pwn/ai/grok.rb +258 -0
  389. data/lib/pwn/ai/introspection.rb +100 -0
  390. data/lib/pwn/ai/ollama.rb +260 -0
  391. data/lib/pwn/ai/open_ai.rb +807 -0
  392. data/lib/pwn/ai.rb +19 -0
  393. data/lib/pwn/aws/acm.rb +92 -0
  394. data/lib/pwn/aws/api_gateway.rb +92 -0
  395. data/lib/pwn/aws/app_stream.rb +92 -0
  396. data/lib/pwn/aws/application_auto_scaling.rb +92 -0
  397. data/lib/pwn/aws/application_discovery_service.rb +92 -0
  398. data/lib/pwn/aws/auto_scaling.rb +92 -0
  399. data/lib/pwn/aws/batch.rb +92 -0
  400. data/lib/pwn/aws/budgets.rb +92 -0
  401. data/lib/pwn/aws/cloud_formation.rb +92 -0
  402. data/lib/pwn/aws/cloud_front.rb +92 -0
  403. data/lib/pwn/aws/cloud_hsm.rb +92 -0
  404. data/lib/pwn/aws/cloud_search.rb +92 -0
  405. data/lib/pwn/aws/cloud_search_domain.rb +92 -0
  406. data/lib/pwn/aws/cloud_trail.rb +92 -0
  407. data/lib/pwn/aws/cloud_watch.rb +92 -0
  408. data/lib/pwn/aws/cloud_watch_events.rb +92 -0
  409. data/lib/pwn/aws/cloud_watch_logs.rb +92 -0
  410. data/lib/pwn/aws/code_build.rb +92 -0
  411. data/lib/pwn/aws/code_commit.rb +92 -0
  412. data/lib/pwn/aws/code_deploy.rb +92 -0
  413. data/lib/pwn/aws/code_pipeline.rb +92 -0
  414. data/lib/pwn/aws/cognito_identity.rb +92 -0
  415. data/lib/pwn/aws/cognito_identity_provider.rb +92 -0
  416. data/lib/pwn/aws/cognito_sync.rb +92 -0
  417. data/lib/pwn/aws/config_service.rb +92 -0
  418. data/lib/pwn/aws/data_pipleline.rb +92 -0
  419. data/lib/pwn/aws/database_migration_service.rb +92 -0
  420. data/lib/pwn/aws/device_farm.rb +92 -0
  421. data/lib/pwn/aws/direct_connect.rb +92 -0
  422. data/lib/pwn/aws/directory_service.rb +92 -0
  423. data/lib/pwn/aws/dynamo_db.rb +92 -0
  424. data/lib/pwn/aws/dynamo_db_streams.rb +92 -0
  425. data/lib/pwn/aws/ec2.rb +92 -0
  426. data/lib/pwn/aws/ecr.rb +92 -0
  427. data/lib/pwn/aws/ecs.rb +92 -0
  428. data/lib/pwn/aws/efs.rb +92 -0
  429. data/lib/pwn/aws/elasti_cache.rb +92 -0
  430. data/lib/pwn/aws/elastic_beanstalk.rb +89 -0
  431. data/lib/pwn/aws/elastic_load_balancing.rb +92 -0
  432. data/lib/pwn/aws/elastic_load_balancing_v2.rb +92 -0
  433. data/lib/pwn/aws/elastic_transcoder.rb +92 -0
  434. data/lib/pwn/aws/elasticsearch_service.rb +92 -0
  435. data/lib/pwn/aws/emr.rb +92 -0
  436. data/lib/pwn/aws/firehose.rb +92 -0
  437. data/lib/pwn/aws/game_lift.rb +92 -0
  438. data/lib/pwn/aws/glacier.rb +92 -0
  439. data/lib/pwn/aws/health.rb +92 -0
  440. data/lib/pwn/aws/iam.rb +200 -0
  441. data/lib/pwn/aws/import_export.rb +92 -0
  442. data/lib/pwn/aws/inspector.rb +92 -0
  443. data/lib/pwn/aws/iot.rb +92 -0
  444. data/lib/pwn/aws/iot_data_plane.rb +92 -0
  445. data/lib/pwn/aws/kinesis.rb +92 -0
  446. data/lib/pwn/aws/kinesis_analytics.rb +92 -0
  447. data/lib/pwn/aws/kms.rb +92 -0
  448. data/lib/pwn/aws/lambda.rb +92 -0
  449. data/lib/pwn/aws/lambda_preview.rb +92 -0
  450. data/lib/pwn/aws/lex.rb +92 -0
  451. data/lib/pwn/aws/lightsail.rb +92 -0
  452. data/lib/pwn/aws/machine_learning.rb +92 -0
  453. data/lib/pwn/aws/marketplace_commerce_analytics.rb +92 -0
  454. data/lib/pwn/aws/marketplace_metering.rb +92 -0
  455. data/lib/pwn/aws/ops_works.rb +92 -0
  456. data/lib/pwn/aws/ops_works_cm.rb +92 -0
  457. data/lib/pwn/aws/pinpoint.rb +92 -0
  458. data/lib/pwn/aws/polly.rb +92 -0
  459. data/lib/pwn/aws/rds.rb +92 -0
  460. data/lib/pwn/aws/redshift.rb +92 -0
  461. data/lib/pwn/aws/rekognition.rb +92 -0
  462. data/lib/pwn/aws/route53.rb +92 -0
  463. data/lib/pwn/aws/route53_domains.rb +92 -0
  464. data/lib/pwn/aws/s3.rb +92 -0
  465. data/lib/pwn/aws/service_catalog.rb +92 -0
  466. data/lib/pwn/aws/ses.rb +92 -0
  467. data/lib/pwn/aws/shield.rb +92 -0
  468. data/lib/pwn/aws/simple_db.rb +92 -0
  469. data/lib/pwn/aws/sms.rb +92 -0
  470. data/lib/pwn/aws/snowball.rb +92 -0
  471. data/lib/pwn/aws/sns.rb +92 -0
  472. data/lib/pwn/aws/sqs.rb +92 -0
  473. data/lib/pwn/aws/ssm.rb +92 -0
  474. data/lib/pwn/aws/states.rb +92 -0
  475. data/lib/pwn/aws/storage_gateway.rb +92 -0
  476. data/lib/pwn/aws/sts.rb +63 -0
  477. data/lib/pwn/aws/support.rb +92 -0
  478. data/lib/pwn/aws/swf.rb +92 -0
  479. data/lib/pwn/aws/waf.rb +92 -0
  480. data/lib/pwn/aws/waf_regional.rb +92 -0
  481. data/lib/pwn/aws/workspaces.rb +92 -0
  482. data/lib/pwn/aws/x_ray.rb +92 -0
  483. data/lib/pwn/aws.rb +105 -0
  484. data/lib/pwn/banner/anon.rb +50 -0
  485. data/lib/pwn/banner/bubble.rb +42 -0
  486. data/lib/pwn/banner/cheshire.rb +58 -0
  487. data/lib/pwn/banner/code_cave.rb +1035 -0
  488. data/lib/pwn/banner/dont_panic.rb +52 -0
  489. data/lib/pwn/banner/f_society.rb +60 -0
  490. data/lib/pwn/banner/fork_bomb.rb +39 -0
  491. data/lib/pwn/banner/jmp_esp.rb +44 -0
  492. data/lib/pwn/banner/matrix.rb +206 -0
  493. data/lib/pwn/banner/ninja.rb +55 -0
  494. data/lib/pwn/banner/off_the_air.rb +73 -0
  495. data/lib/pwn/banner/pirate.rb +62 -0
  496. data/lib/pwn/banner/radare2.rb +41 -0
  497. data/lib/pwn/banner/radare2_ai.rb +116 -0
  498. data/lib/pwn/banner/white_rabbit.rb +55 -0
  499. data/lib/pwn/banner.rb +108 -0
  500. data/lib/pwn/blockchain/btc.rb +282 -0
  501. data/lib/pwn/blockchain/eth.rb +160 -0
  502. data/lib/pwn/blockchain.rb +17 -0
  503. data/lib/pwn/config.rb +304 -0
  504. data/lib/pwn/driver.rb +85 -0
  505. data/lib/pwn/ffi/stdio.rb +41 -0
  506. data/lib/pwn/ffi.rb +16 -0
  507. data/lib/pwn/plugins/android.rb +1617 -0
  508. data/lib/pwn/plugins/assembly.rb +275 -0
  509. data/lib/pwn/plugins/authentication_helper.rb +86 -0
  510. data/lib/pwn/plugins/baresip.rb +708 -0
  511. data/lib/pwn/plugins/basic_auth.rb +63 -0
  512. data/lib/pwn/plugins/beef.rb +312 -0
  513. data/lib/pwn/plugins/black_duck_binary_analysis.rb +790 -0
  514. data/lib/pwn/plugins/burp_suite.rb +2208 -0
  515. data/lib/pwn/plugins/bus_pirate.rb +147 -0
  516. data/lib/pwn/plugins/char.rb +474 -0
  517. data/lib/pwn/plugins/credit_card.rb +105 -0
  518. data/lib/pwn/plugins/dao_ldap.rb +131 -0
  519. data/lib/pwn/plugins/dao_mongo.rb +96 -0
  520. data/lib/pwn/plugins/dao_postgres.rb +224 -0
  521. data/lib/pwn/plugins/dao_sqlite3.rb +125 -0
  522. data/lib/pwn/plugins/defect_dojo.rb +841 -0
  523. data/lib/pwn/plugins/detect_os.rb +71 -0
  524. data/lib/pwn/plugins/ein.rb +141 -0
  525. data/lib/pwn/plugins/file_fu.rb +93 -0
  526. data/lib/pwn/plugins/fuzz.rb +204 -0
  527. data/lib/pwn/plugins/git.rb +159 -0
  528. data/lib/pwn/plugins/github.rb +137 -0
  529. data/lib/pwn/plugins/hacker_one.rb +154 -0
  530. data/lib/pwn/plugins/hunter.rb +160 -0
  531. data/lib/pwn/plugins/ip_info.rb +264 -0
  532. data/lib/pwn/plugins/irc.rb +312 -0
  533. data/lib/pwn/plugins/jenkins.rb +537 -0
  534. data/lib/pwn/plugins/jira_data_center.rb +676 -0
  535. data/lib/pwn/plugins/json_pathify.rb +46 -0
  536. data/lib/pwn/plugins/log.rb +123 -0
  537. data/lib/pwn/plugins/mail_agent.rb +344 -0
  538. data/lib/pwn/plugins/metasploit.rb +151 -0
  539. data/lib/pwn/plugins/monkey_patch.rb +182 -0
  540. data/lib/pwn/plugins/msr206.rb +1257 -0
  541. data/lib/pwn/plugins/nessus_cloud.rb +847 -0
  542. data/lib/pwn/plugins/nexpose_vuln_scan.rb +356 -0
  543. data/lib/pwn/plugins/nmap_it.rb +136 -0
  544. data/lib/pwn/plugins/oauth2.rb +67 -0
  545. data/lib/pwn/plugins/ocr.rb +43 -0
  546. data/lib/pwn/plugins/open_api.rb +896 -0
  547. data/lib/pwn/plugins/openvas.rb +314 -0
  548. data/lib/pwn/plugins/packet.rb +1313 -0
  549. data/lib/pwn/plugins/pdf_parse.rb +53 -0
  550. data/lib/pwn/plugins/pony.rb +281 -0
  551. data/lib/pwn/plugins/ps.rb +90 -0
  552. data/lib/pwn/plugins/pwn_logger.rb +64 -0
  553. data/lib/pwn/plugins/rabbit_mq.rb +70 -0
  554. data/lib/pwn/plugins/repl.rb +999 -0
  555. data/lib/pwn/plugins/scannable_codes.rb +87 -0
  556. data/lib/pwn/plugins/serial.rb +273 -0
  557. data/lib/pwn/plugins/shodan.rb +629 -0
  558. data/lib/pwn/plugins/slack_client.rb +104 -0
  559. data/lib/pwn/plugins/sock.rb +289 -0
  560. data/lib/pwn/plugins/spider.rb +78 -0
  561. data/lib/pwn/plugins/ssn.rb +52 -0
  562. data/lib/pwn/plugins/thread_pool.rb +80 -0
  563. data/lib/pwn/plugins/tor.rb +273 -0
  564. data/lib/pwn/plugins/transparent_browser.rb +1738 -0
  565. data/lib/pwn/plugins/twitter_api.rb +151 -0
  566. data/lib/pwn/plugins/uri_scheme.rb +328 -0
  567. data/lib/pwn/plugins/vault.rb +305 -0
  568. data/lib/pwn/plugins/vin.rb +361 -0
  569. data/lib/pwn/plugins/voice.rb +145 -0
  570. data/lib/pwn/plugins/vsphere.rb +81 -0
  571. data/lib/pwn/plugins/xxd.rb +298 -0
  572. data/lib/pwn/plugins/zaproxy.rb +837 -0
  573. data/lib/pwn/plugins.rb +81 -0
  574. data/lib/pwn/reports/fuzz.rb +328 -0
  575. data/lib/pwn/reports/html_footer.rb +160 -0
  576. data/lib/pwn/reports/html_header.rb +271 -0
  577. data/lib/pwn/reports/phone.rb +384 -0
  578. data/lib/pwn/reports/sast.rb +435 -0
  579. data/lib/pwn/reports/uri_buster.rb +335 -0
  580. data/lib/pwn/reports.rb +25 -0
  581. data/lib/pwn/sast/amqp_connect_as_guest.rb +78 -0
  582. data/lib/pwn/sast/apache_file_system_util_api.rb +76 -0
  583. data/lib/pwn/sast/aws.rb +77 -0
  584. data/lib/pwn/sast/banned_function_calls_c.rb +207 -0
  585. data/lib/pwn/sast/base64.rb +74 -0
  586. data/lib/pwn/sast/beef_hook.rb +75 -0
  587. data/lib/pwn/sast/cmd_execution_go_lang.rb +83 -0
  588. data/lib/pwn/sast/cmd_execution_java.rb +80 -0
  589. data/lib/pwn/sast/cmd_execution_python.rb +82 -0
  590. data/lib/pwn/sast/cmd_execution_ruby.rb +90 -0
  591. data/lib/pwn/sast/cmd_execution_scala.rb +80 -0
  592. data/lib/pwn/sast/csrf.rb +74 -0
  593. data/lib/pwn/sast/deserial_java.rb +85 -0
  594. data/lib/pwn/sast/emoticon.rb +82 -0
  595. data/lib/pwn/sast/eval.rb +76 -0
  596. data/lib/pwn/sast/factory.rb +79 -0
  597. data/lib/pwn/sast/http_authorization_header.rb +80 -0
  598. data/lib/pwn/sast/inner_html.rb +76 -0
  599. data/lib/pwn/sast/keystore.rb +75 -0
  600. data/lib/pwn/sast/local_storage.rb +77 -0
  601. data/lib/pwn/sast/location_hash.rb +76 -0
  602. data/lib/pwn/sast/log4j.rb +78 -0
  603. data/lib/pwn/sast/logger.rb +90 -0
  604. data/lib/pwn/sast/md5.rb +75 -0
  605. data/lib/pwn/sast/outer_html.rb +76 -0
  606. data/lib/pwn/sast/padding_oracle.rb +72 -0
  607. data/lib/pwn/sast/password.rb +75 -0
  608. data/lib/pwn/sast/php_input_mechanisms.rb +84 -0
  609. data/lib/pwn/sast/php_type_juggling.rb +82 -0
  610. data/lib/pwn/sast/pom_version.rb +164 -0
  611. data/lib/pwn/sast/port.rb +82 -0
  612. data/lib/pwn/sast/post_message.rb +76 -0
  613. data/lib/pwn/sast/private_key.rb +75 -0
  614. data/lib/pwn/sast/redirect.rb +77 -0
  615. data/lib/pwn/sast/redos.rb +82 -0
  616. data/lib/pwn/sast/shell.rb +83 -0
  617. data/lib/pwn/sast/signature.rb +75 -0
  618. data/lib/pwn/sast/sql.rb +85 -0
  619. data/lib/pwn/sast/ssl.rb +79 -0
  620. data/lib/pwn/sast/sudo.rb +75 -0
  621. data/lib/pwn/sast/task_tag.rb +89 -0
  622. data/lib/pwn/sast/test_case_engine.rb +189 -0
  623. data/lib/pwn/sast/throw_errors.rb +78 -0
  624. data/lib/pwn/sast/token.rb +77 -0
  625. data/lib/pwn/sast/type_script_type_juggling.rb +82 -0
  626. data/lib/pwn/sast/use_after_free.rb +82 -0
  627. data/lib/pwn/sast/version.rb +76 -0
  628. data/lib/pwn/sast/window_location_hash.rb +75 -0
  629. data/lib/pwn/sast.rb +67 -0
  630. data/lib/pwn/sdr/decoder/gsm.rb +220 -0
  631. data/lib/pwn/sdr/decoder.rb +19 -0
  632. data/lib/pwn/sdr/flipper_zero.rb +128 -0
  633. data/lib/pwn/sdr/frequency_allocation.rb +683 -0
  634. data/lib/pwn/sdr/gqrx.rb +823 -0
  635. data/lib/pwn/sdr/rfidler.rb +56 -0
  636. data/lib/pwn/sdr/son_micro_rfid.rb +773 -0
  637. data/lib/pwn/sdr.rb +21 -0
  638. data/lib/pwn/version.rb +5 -0
  639. data/lib/pwn/www/app_cobalt_io.rb +139 -0
  640. data/lib/pwn/www/bing.rb +88 -0
  641. data/lib/pwn/www/bug_crowd.rb +136 -0
  642. data/lib/pwn/www/checkip.rb +69 -0
  643. data/lib/pwn/www/coinbase_pro.rb +136 -0
  644. data/lib/pwn/www/duckduckgo.rb +114 -0
  645. data/lib/pwn/www/facebook.rb +124 -0
  646. data/lib/pwn/www/google.rb +114 -0
  647. data/lib/pwn/www/hacker_one.rb +649 -0
  648. data/lib/pwn/www/linkedin.rb +124 -0
  649. data/lib/pwn/www/pandora.rb +124 -0
  650. data/lib/pwn/www/pastebin.rb +84 -0
  651. data/lib/pwn/www/paypal.rb +208 -0
  652. data/lib/pwn/www/synack.rb +136 -0
  653. data/lib/pwn/www/torch.rb +107 -0
  654. data/lib/pwn/www/trading_view.rb +127 -0
  655. data/lib/pwn/www/twitter.rb +138 -0
  656. data/lib/pwn/www/uber.rb +124 -0
  657. data/lib/pwn/www/upwork.rb +124 -0
  658. data/lib/pwn/www/wayback_machine.rb +113 -0
  659. data/lib/pwn/www/youtube.rb +88 -0
  660. data/lib/pwn/www.rb +36 -0
  661. data/lib/pwn.rb +39 -0
  662. data/packer/daemons/msfrpcd.rb +64 -0
  663. data/packer/daemons/openvas.rb +51 -0
  664. data/packer/deploy_docker_containers.sh +9 -0
  665. data/packer/deploy_packer_box.sh +87 -0
  666. data/packer/docker/kali_rolling_docker_pwn_fuzz_net_app_proto.json +44 -0
  667. data/packer/docker/kali_rolling_docker_pwn_prototyper.json +48 -0
  668. data/packer/docker/kali_rolling_docker_pwn_sast.json +44 -0
  669. data/packer/docker/kali_rolling_docker_pwn_transparent_browser.json +46 -0
  670. data/packer/docker/kali_rolling_docker_pwn_www_checkip.json +34 -0
  671. data/packer/http/kali_rolling_preseed.cfg +81 -0
  672. data/packer/kali_rolling_aws_ami.json +139 -0
  673. data/packer/kali_rolling_qemu_kvm.json +159 -0
  674. data/packer/kali_rolling_virtualbox.json +186 -0
  675. data/packer/kali_rolling_vmware.json +167 -0
  676. data/packer/packer_secrets.json.EXAMPLE +9 -0
  677. data/packer/provisioners/PayloadsAllTheThings.sh +5 -0
  678. data/packer/provisioners/SecLists.sh +5 -0
  679. data/packer/provisioners/afl.sh +28 -0
  680. data/packer/provisioners/aliases.rb +23 -0
  681. data/packer/provisioners/amass.sh +5 -0
  682. data/packer/provisioners/android.sh +18 -0
  683. data/packer/provisioners/ansible.sh +5 -0
  684. data/packer/provisioners/apache2.sh +24 -0
  685. data/packer/provisioners/arachni.sh +28 -0
  686. data/packer/provisioners/awscli.sh +5 -0
  687. data/packer/provisioners/bashrc.sh +13 -0
  688. data/packer/provisioners/beef.rb +23 -0
  689. data/packer/provisioners/burpsuite.sh +24 -0
  690. data/packer/provisioners/chrome.sh +11 -0
  691. data/packer/provisioners/coreutils.sh +6 -0
  692. data/packer/provisioners/curl.sh +6 -0
  693. data/packer/provisioners/docker.sh +43 -0
  694. data/packer/provisioners/docker_bashrc.sh +2 -0
  695. data/packer/provisioners/docker_rvm.sh +22 -0
  696. data/packer/provisioners/eyewitness.sh +5 -0
  697. data/packer/provisioners/ffmpeg.sh +6 -0
  698. data/packer/provisioners/firefox.sh +7 -0
  699. data/packer/provisioners/fuzzdb.sh +5 -0
  700. data/packer/provisioners/gdb.sh +5 -0
  701. data/packer/provisioners/geckodriver.sh +9 -0
  702. data/packer/provisioners/ghidra.sh +5 -0
  703. data/packer/provisioners/git.sh +6 -0
  704. data/packer/provisioners/init_image.sh +103 -0
  705. data/packer/provisioners/install_vagrant_ssh_key.sh +15 -0
  706. data/packer/provisioners/irc.sh +13 -0
  707. data/packer/provisioners/jenkins.sh +77 -0
  708. data/packer/provisioners/metasploit.rb +59 -0
  709. data/packer/provisioners/nmap.sh +5 -0
  710. data/packer/provisioners/openvas.sh +23 -0
  711. data/packer/provisioners/openvas_wrappers.sh +4 -0
  712. data/packer/provisioners/openvpn.sh +7 -0
  713. data/packer/provisioners/peda.sh +4 -0
  714. data/packer/provisioners/phantomjs.rb +28 -0
  715. data/packer/provisioners/phantomjs_wrapper.sh +22 -0
  716. data/packer/provisioners/post_install.sh +41 -0
  717. data/packer/provisioners/postgresql.sh +49 -0
  718. data/packer/provisioners/preeny.sh +8 -0
  719. data/packer/provisioners/pwn.sh +100 -0
  720. data/packer/provisioners/pwntools.sh +13 -0
  721. data/packer/provisioners/radamsa.sh +7 -0
  722. data/packer/provisioners/radare2.sh +29 -0
  723. data/packer/provisioners/rc.local.sh +16 -0
  724. data/packer/provisioners/reboot_os.sh +7 -0
  725. data/packer/provisioners/ruby.sh +35 -0
  726. data/packer/provisioners/rvm.sh +32 -0
  727. data/packer/provisioners/scapy.sh +5 -0
  728. data/packer/provisioners/scout2.sh +5 -0
  729. data/packer/provisioners/sox.sh +5 -0
  730. data/packer/provisioners/ssllabs-scan.sh +9 -0
  731. data/packer/provisioners/strace.sh +5 -0
  732. data/packer/provisioners/sublist3r.sh +5 -0
  733. data/packer/provisioners/terminator.sh +5 -0
  734. data/packer/provisioners/toggle_tor.sh +2 -0
  735. data/packer/provisioners/tor.sh +5 -0
  736. data/packer/provisioners/twinkle.sh +6 -0
  737. data/packer/provisioners/update_os.sh +108 -0
  738. data/packer/provisioners/upload_globals.sh +63 -0
  739. data/packer/provisioners/vim.sh +23 -0
  740. data/packer/provisioners/virtualbox_guest_additions.sh +20 -0
  741. data/packer/provisioners/vmware_tools.sh +8 -0
  742. data/packer/provisioners/wpscan.rb +23 -0
  743. data/packer/provisioners/xrdp.sh +23 -0
  744. data/packer/provisioners/zzuf.sh +5 -0
  745. data/pwn.gemspec +77 -0
  746. data/reinstall_gemset.sh +30 -0
  747. data/spec/lib/pwn/ai/grok_spec.rb +15 -0
  748. data/spec/lib/pwn/ai/introspection_spec.rb +15 -0
  749. data/spec/lib/pwn/ai/ollama_spec.rb +15 -0
  750. data/spec/lib/pwn/ai/open_ai_spec.rb +15 -0
  751. data/spec/lib/pwn/ai_spec.rb +10 -0
  752. data/spec/lib/pwn/aws/acm_spec.rb +15 -0
  753. data/spec/lib/pwn/aws/api_gateway_spec.rb +15 -0
  754. data/spec/lib/pwn/aws/app_stream_spec.rb +15 -0
  755. data/spec/lib/pwn/aws/application_auto_scaling_spec.rb +15 -0
  756. data/spec/lib/pwn/aws/application_discovery_service_spec.rb +15 -0
  757. data/spec/lib/pwn/aws/auto_scaling_spec.rb +15 -0
  758. data/spec/lib/pwn/aws/batch_spec.rb +15 -0
  759. data/spec/lib/pwn/aws/budgets_spec.rb +15 -0
  760. data/spec/lib/pwn/aws/cloud_formation_spec.rb +15 -0
  761. data/spec/lib/pwn/aws/cloud_front_spec.rb +15 -0
  762. data/spec/lib/pwn/aws/cloud_hsm_spec.rb +15 -0
  763. data/spec/lib/pwn/aws/cloud_search_domain_spec.rb +15 -0
  764. data/spec/lib/pwn/aws/cloud_search_spec.rb +15 -0
  765. data/spec/lib/pwn/aws/cloud_trail_spec.rb +15 -0
  766. data/spec/lib/pwn/aws/cloud_watch_events_spec.rb +15 -0
  767. data/spec/lib/pwn/aws/cloud_watch_logs_spec.rb +15 -0
  768. data/spec/lib/pwn/aws/cloud_watch_spec.rb +15 -0
  769. data/spec/lib/pwn/aws/code_build_spec.rb +15 -0
  770. data/spec/lib/pwn/aws/code_commit_spec.rb +15 -0
  771. data/spec/lib/pwn/aws/code_deploy_spec.rb +15 -0
  772. data/spec/lib/pwn/aws/code_pipeline_spec.rb +15 -0
  773. data/spec/lib/pwn/aws/cognito_identity_provider_spec.rb +15 -0
  774. data/spec/lib/pwn/aws/cognito_identity_spec.rb +15 -0
  775. data/spec/lib/pwn/aws/cognito_sync_spec.rb +15 -0
  776. data/spec/lib/pwn/aws/config_service_spec.rb +15 -0
  777. data/spec/lib/pwn/aws/data_pipleline_spec.rb +15 -0
  778. data/spec/lib/pwn/aws/database_migration_service_spec.rb +15 -0
  779. data/spec/lib/pwn/aws/device_farm_spec.rb +15 -0
  780. data/spec/lib/pwn/aws/direct_connect_spec.rb +15 -0
  781. data/spec/lib/pwn/aws/directory_service_spec.rb +15 -0
  782. data/spec/lib/pwn/aws/dynamo_db_spec.rb +15 -0
  783. data/spec/lib/pwn/aws/dynamo_db_streams_spec.rb +15 -0
  784. data/spec/lib/pwn/aws/ec2_spec.rb +15 -0
  785. data/spec/lib/pwn/aws/ecr_spec.rb +15 -0
  786. data/spec/lib/pwn/aws/ecs_spec.rb +15 -0
  787. data/spec/lib/pwn/aws/efs_spec.rb +15 -0
  788. data/spec/lib/pwn/aws/elasti_cache_spec.rb +15 -0
  789. data/spec/lib/pwn/aws/elastic_beanstalk_spec.rb +15 -0
  790. data/spec/lib/pwn/aws/elastic_load_balancing_spec.rb +15 -0
  791. data/spec/lib/pwn/aws/elastic_load_balancing_v2_spec.rb +15 -0
  792. data/spec/lib/pwn/aws/elastic_transcoder_spec.rb +15 -0
  793. data/spec/lib/pwn/aws/elasticsearch_service_spec.rb +15 -0
  794. data/spec/lib/pwn/aws/emr_spec.rb +15 -0
  795. data/spec/lib/pwn/aws/firehose_spec.rb +15 -0
  796. data/spec/lib/pwn/aws/game_lift_spec.rb +15 -0
  797. data/spec/lib/pwn/aws/glacier_spec.rb +15 -0
  798. data/spec/lib/pwn/aws/health_spec.rb +15 -0
  799. data/spec/lib/pwn/aws/iam_spec.rb +15 -0
  800. data/spec/lib/pwn/aws/import_export_spec.rb +15 -0
  801. data/spec/lib/pwn/aws/inspector_spec.rb +15 -0
  802. data/spec/lib/pwn/aws/iot_data_plane_spec.rb +15 -0
  803. data/spec/lib/pwn/aws/iot_spec.rb +15 -0
  804. data/spec/lib/pwn/aws/kinesis_analytics_spec.rb +15 -0
  805. data/spec/lib/pwn/aws/kinesis_spec.rb +15 -0
  806. data/spec/lib/pwn/aws/kms_spec.rb +15 -0
  807. data/spec/lib/pwn/aws/lambda_preview_spec.rb +15 -0
  808. data/spec/lib/pwn/aws/lambda_spec.rb +15 -0
  809. data/spec/lib/pwn/aws/lex_spec.rb +15 -0
  810. data/spec/lib/pwn/aws/lightsail_spec.rb +15 -0
  811. data/spec/lib/pwn/aws/machine_learning_spec.rb +15 -0
  812. data/spec/lib/pwn/aws/marketplace_commerce_analytics_spec.rb +15 -0
  813. data/spec/lib/pwn/aws/marketplace_metering_spec.rb +15 -0
  814. data/spec/lib/pwn/aws/ops_works_cm_spec.rb +15 -0
  815. data/spec/lib/pwn/aws/ops_works_spec.rb +15 -0
  816. data/spec/lib/pwn/aws/pinpoint_spec.rb +15 -0
  817. data/spec/lib/pwn/aws/polly_spec.rb +15 -0
  818. data/spec/lib/pwn/aws/rds_spec.rb +15 -0
  819. data/spec/lib/pwn/aws/redshift_spec.rb +15 -0
  820. data/spec/lib/pwn/aws/rekognition_spec.rb +15 -0
  821. data/spec/lib/pwn/aws/route53_domains_spec.rb +15 -0
  822. data/spec/lib/pwn/aws/route53_spec.rb +15 -0
  823. data/spec/lib/pwn/aws/s3_spec.rb +15 -0
  824. data/spec/lib/pwn/aws/service_catalog_spec.rb +15 -0
  825. data/spec/lib/pwn/aws/ses_spec.rb +15 -0
  826. data/spec/lib/pwn/aws/shield_spec.rb +15 -0
  827. data/spec/lib/pwn/aws/simple_db_spec.rb +15 -0
  828. data/spec/lib/pwn/aws/sms_spec.rb +15 -0
  829. data/spec/lib/pwn/aws/snowball_spec.rb +15 -0
  830. data/spec/lib/pwn/aws/sns_spec.rb +15 -0
  831. data/spec/lib/pwn/aws/sqs_spec.rb +15 -0
  832. data/spec/lib/pwn/aws/ssm_spec.rb +15 -0
  833. data/spec/lib/pwn/aws/states_spec.rb +15 -0
  834. data/spec/lib/pwn/aws/storage_gateway_spec.rb +15 -0
  835. data/spec/lib/pwn/aws/sts_spec.rb +15 -0
  836. data/spec/lib/pwn/aws/support_spec.rb +15 -0
  837. data/spec/lib/pwn/aws/swf_spec.rb +15 -0
  838. data/spec/lib/pwn/aws/waf_regional_spec.rb +15 -0
  839. data/spec/lib/pwn/aws/waf_spec.rb +15 -0
  840. data/spec/lib/pwn/aws/workspaces_spec.rb +15 -0
  841. data/spec/lib/pwn/aws/x_ray_spec.rb +15 -0
  842. data/spec/lib/pwn/aws_spec.rb +10 -0
  843. data/spec/lib/pwn/banner/anon_spec.rb +20 -0
  844. data/spec/lib/pwn/banner/bubble_spec.rb +20 -0
  845. data/spec/lib/pwn/banner/cheshire_spec.rb +20 -0
  846. data/spec/lib/pwn/banner/code_cave_spec.rb +20 -0
  847. data/spec/lib/pwn/banner/dont_panic_spec.rb +20 -0
  848. data/spec/lib/pwn/banner/f_society_spec.rb +20 -0
  849. data/spec/lib/pwn/banner/fork_bomb_spec.rb +20 -0
  850. data/spec/lib/pwn/banner/jmp_esp_spec.rb +20 -0
  851. data/spec/lib/pwn/banner/matrix_spec.rb +20 -0
  852. data/spec/lib/pwn/banner/ninja_spec.rb +20 -0
  853. data/spec/lib/pwn/banner/off_the_air_spec.rb +20 -0
  854. data/spec/lib/pwn/banner/pirate_spec.rb +20 -0
  855. data/spec/lib/pwn/banner/radare2_ai_spec.rb +20 -0
  856. data/spec/lib/pwn/banner/radare2_spec.rb +20 -0
  857. data/spec/lib/pwn/banner/white_rabbit_spec.rb +20 -0
  858. data/spec/lib/pwn/banner_spec.rb +15 -0
  859. data/spec/lib/pwn/blockchain/btc_spec.rb +15 -0
  860. data/spec/lib/pwn/blockchain/eth_spec.rb +15 -0
  861. data/spec/lib/pwn/blockchain_spec.rb +10 -0
  862. data/spec/lib/pwn/config_spec.rb +15 -0
  863. data/spec/lib/pwn/driver_spec.rb +15 -0
  864. data/spec/lib/pwn/ffi/stdio_spec.rb +15 -0
  865. data/spec/lib/pwn/ffi_spec.rb +10 -0
  866. data/spec/lib/pwn/plugins/android_spec.rb +15 -0
  867. data/spec/lib/pwn/plugins/assembly_spec.rb +15 -0
  868. data/spec/lib/pwn/plugins/authentication_helper_spec.rb +15 -0
  869. data/spec/lib/pwn/plugins/baresip_spec.rb +15 -0
  870. data/spec/lib/pwn/plugins/basic_auth_spec.rb +15 -0
  871. data/spec/lib/pwn/plugins/beef_spec.rb +15 -0
  872. data/spec/lib/pwn/plugins/black_duck_binary_analysis_spec.rb +15 -0
  873. data/spec/lib/pwn/plugins/burp_suite_spec.rb +15 -0
  874. data/spec/lib/pwn/plugins/bus_pirate_spec.rb +15 -0
  875. data/spec/lib/pwn/plugins/char_spec.rb +15 -0
  876. data/spec/lib/pwn/plugins/credit_card_spec.rb +15 -0
  877. data/spec/lib/pwn/plugins/dao_ldap_spec.rb +15 -0
  878. data/spec/lib/pwn/plugins/dao_mongo_spec.rb +15 -0
  879. data/spec/lib/pwn/plugins/dao_postgres_spec.rb +15 -0
  880. data/spec/lib/pwn/plugins/dao_sqlite3_spec.rb +15 -0
  881. data/spec/lib/pwn/plugins/defect_dojo_spec.rb +15 -0
  882. data/spec/lib/pwn/plugins/detect_os_spec.rb +15 -0
  883. data/spec/lib/pwn/plugins/ein_spec.rb +15 -0
  884. data/spec/lib/pwn/plugins/file_fu_spec.rb +15 -0
  885. data/spec/lib/pwn/plugins/fuzz_spec.rb +15 -0
  886. data/spec/lib/pwn/plugins/git_spec.rb +15 -0
  887. data/spec/lib/pwn/plugins/github_spec.rb +15 -0
  888. data/spec/lib/pwn/plugins/hacker_one_spec.rb +15 -0
  889. data/spec/lib/pwn/plugins/hunter_spec.rb +15 -0
  890. data/spec/lib/pwn/plugins/ip_info_spec.rb +15 -0
  891. data/spec/lib/pwn/plugins/irc_spec.rb +15 -0
  892. data/spec/lib/pwn/plugins/jenkins_spec.rb +15 -0
  893. data/spec/lib/pwn/plugins/jira_data_center_spec.rb +15 -0
  894. data/spec/lib/pwn/plugins/json_pathify_spec.rb +15 -0
  895. data/spec/lib/pwn/plugins/log_spec.rb +15 -0
  896. data/spec/lib/pwn/plugins/mail_agent_spec.rb +15 -0
  897. data/spec/lib/pwn/plugins/metasploit_spec.rb +15 -0
  898. data/spec/lib/pwn/plugins/monkey_patch_spec.rb +15 -0
  899. data/spec/lib/pwn/plugins/msr206_spec.rb +15 -0
  900. data/spec/lib/pwn/plugins/nessus_cloud_spec.rb +15 -0
  901. data/spec/lib/pwn/plugins/nexpose_vuln_scan_spec.rb +15 -0
  902. data/spec/lib/pwn/plugins/nmap_it_spec.rb +15 -0
  903. data/spec/lib/pwn/plugins/oauth2_spec.rb +15 -0
  904. data/spec/lib/pwn/plugins/ocr_spec.rb +15 -0
  905. data/spec/lib/pwn/plugins/open_api_spec.rb +15 -0
  906. data/spec/lib/pwn/plugins/openvas_spec.rb +15 -0
  907. data/spec/lib/pwn/plugins/packet_spec.rb +15 -0
  908. data/spec/lib/pwn/plugins/pdf_parse_spec.rb +15 -0
  909. data/spec/lib/pwn/plugins/pony_spec.rb +15 -0
  910. data/spec/lib/pwn/plugins/ps_spec.rb +15 -0
  911. data/spec/lib/pwn/plugins/pwn_logger_spec.rb +15 -0
  912. data/spec/lib/pwn/plugins/rabbit_mq_spec.rb +15 -0
  913. data/spec/lib/pwn/plugins/repl_spec.rb +15 -0
  914. data/spec/lib/pwn/plugins/scannable_codes_spec.rb +15 -0
  915. data/spec/lib/pwn/plugins/serial_spec.rb +15 -0
  916. data/spec/lib/pwn/plugins/shodan_spec.rb +15 -0
  917. data/spec/lib/pwn/plugins/slack_client_spec.rb +15 -0
  918. data/spec/lib/pwn/plugins/sock_spec.rb +15 -0
  919. data/spec/lib/pwn/plugins/spider_spec.rb +15 -0
  920. data/spec/lib/pwn/plugins/ssn_spec.rb +15 -0
  921. data/spec/lib/pwn/plugins/thread_pool_spec.rb +15 -0
  922. data/spec/lib/pwn/plugins/tor_spec.rb +15 -0
  923. data/spec/lib/pwn/plugins/transparent_browser_spec.rb +15 -0
  924. data/spec/lib/pwn/plugins/twitter_api_spec.rb +15 -0
  925. data/spec/lib/pwn/plugins/uri_scheme_spec.rb +15 -0
  926. data/spec/lib/pwn/plugins/vault_spec.rb +15 -0
  927. data/spec/lib/pwn/plugins/vin_spec.rb +15 -0
  928. data/spec/lib/pwn/plugins/voice_spec.rb +15 -0
  929. data/spec/lib/pwn/plugins/vsphere_spec.rb +15 -0
  930. data/spec/lib/pwn/plugins/xxd_spec.rb +15 -0
  931. data/spec/lib/pwn/plugins/zaproxy_spec.rb +15 -0
  932. data/spec/lib/pwn/plugins_spec.rb +10 -0
  933. data/spec/lib/pwn/reports/fuzz_spec.rb +15 -0
  934. data/spec/lib/pwn/reports/html_footer_spec.rb +15 -0
  935. data/spec/lib/pwn/reports/html_header_spec.rb +15 -0
  936. data/spec/lib/pwn/reports/phone_spec.rb +15 -0
  937. data/spec/lib/pwn/reports/sast_spec.rb +15 -0
  938. data/spec/lib/pwn/reports/uri_buster_spec.rb +15 -0
  939. data/spec/lib/pwn/reports_spec.rb +10 -0
  940. data/spec/lib/pwn/sast/amqp_connect_as_guest_spec.rb +25 -0
  941. data/spec/lib/pwn/sast/apache_file_system_util_api_spec.rb +25 -0
  942. data/spec/lib/pwn/sast/aws_spec.rb +25 -0
  943. data/spec/lib/pwn/sast/banned_function_calls_c_spec.rb +25 -0
  944. data/spec/lib/pwn/sast/base64_spec.rb +25 -0
  945. data/spec/lib/pwn/sast/beef_hook_spec.rb +25 -0
  946. data/spec/lib/pwn/sast/cmd_execution_go_lang_spec.rb +25 -0
  947. data/spec/lib/pwn/sast/cmd_execution_java_spec.rb +25 -0
  948. data/spec/lib/pwn/sast/cmd_execution_python_spec.rb +25 -0
  949. data/spec/lib/pwn/sast/cmd_execution_ruby_spec.rb +25 -0
  950. data/spec/lib/pwn/sast/cmd_execution_scala_spec.rb +25 -0
  951. data/spec/lib/pwn/sast/csrf_spec.rb +25 -0
  952. data/spec/lib/pwn/sast/deserial_java_spec.rb +25 -0
  953. data/spec/lib/pwn/sast/emoticon_spec.rb +25 -0
  954. data/spec/lib/pwn/sast/eval_spec.rb +25 -0
  955. data/spec/lib/pwn/sast/factory_spec.rb +25 -0
  956. data/spec/lib/pwn/sast/http_authorization_header_spec.rb +25 -0
  957. data/spec/lib/pwn/sast/inner_html_spec.rb +25 -0
  958. data/spec/lib/pwn/sast/keystore_spec.rb +25 -0
  959. data/spec/lib/pwn/sast/local_storage_spec.rb +25 -0
  960. data/spec/lib/pwn/sast/location_hash_spec.rb +25 -0
  961. data/spec/lib/pwn/sast/log4j_spec.rb +25 -0
  962. data/spec/lib/pwn/sast/logger_spec.rb +25 -0
  963. data/spec/lib/pwn/sast/md5_spec.rb +25 -0
  964. data/spec/lib/pwn/sast/outer_html_spec.rb +25 -0
  965. data/spec/lib/pwn/sast/padding_oracle_spec.rb +25 -0
  966. data/spec/lib/pwn/sast/password_spec.rb +25 -0
  967. data/spec/lib/pwn/sast/php_input_mechanisms_spec.rb +25 -0
  968. data/spec/lib/pwn/sast/php_type_juggling_spec.rb +25 -0
  969. data/spec/lib/pwn/sast/pom_version_spec.rb +25 -0
  970. data/spec/lib/pwn/sast/port_spec.rb +25 -0
  971. data/spec/lib/pwn/sast/post_message_spec.rb +25 -0
  972. data/spec/lib/pwn/sast/private_key_spec.rb +25 -0
  973. data/spec/lib/pwn/sast/redirect_spec.rb +25 -0
  974. data/spec/lib/pwn/sast/redos_spec.rb +25 -0
  975. data/spec/lib/pwn/sast/shell_spec.rb +25 -0
  976. data/spec/lib/pwn/sast/signature_spec.rb +25 -0
  977. data/spec/lib/pwn/sast/sql_spec.rb +25 -0
  978. data/spec/lib/pwn/sast/ssl_spec.rb +25 -0
  979. data/spec/lib/pwn/sast/sudo_spec.rb +25 -0
  980. data/spec/lib/pwn/sast/task_tag_spec.rb +25 -0
  981. data/spec/lib/pwn/sast/test_case_engine_spec.rb +20 -0
  982. data/spec/lib/pwn/sast/throw_errors_spec.rb +25 -0
  983. data/spec/lib/pwn/sast/token_spec.rb +25 -0
  984. data/spec/lib/pwn/sast/type_script_type_juggling_spec.rb +25 -0
  985. data/spec/lib/pwn/sast/use_after_free_spec.rb +25 -0
  986. data/spec/lib/pwn/sast/version_spec.rb +25 -0
  987. data/spec/lib/pwn/sast/window_location_hash_spec.rb +25 -0
  988. data/spec/lib/pwn/sast_spec.rb +10 -0
  989. data/spec/lib/pwn/sdr/decoder/gsm_spec.rb +15 -0
  990. data/spec/lib/pwn/sdr/decoder_spec.rb +10 -0
  991. data/spec/lib/pwn/sdr/flipper_zero_spec.rb +15 -0
  992. data/spec/lib/pwn/sdr/frequency_allocation_spec.rb +15 -0
  993. data/spec/lib/pwn/sdr/gqrx_spec.rb +15 -0
  994. data/spec/lib/pwn/sdr/rfidler_spec.rb +15 -0
  995. data/spec/lib/pwn/sdr/son_micro_rfid_spec.rb +15 -0
  996. data/spec/lib/pwn/sdr_spec.rb +10 -0
  997. data/spec/lib/pwn/version_spec.rb +17 -0
  998. data/spec/lib/pwn/www/app_cobalt_io_spec.rb +15 -0
  999. data/spec/lib/pwn/www/bing_spec.rb +15 -0
  1000. data/spec/lib/pwn/www/bug_crowd_spec.rb +15 -0
  1001. data/spec/lib/pwn/www/checkip_spec.rb +15 -0
  1002. data/spec/lib/pwn/www/coinbase_pro_spec.rb +15 -0
  1003. data/spec/lib/pwn/www/duckduckgo_spec.rb +15 -0
  1004. data/spec/lib/pwn/www/facebook_spec.rb +15 -0
  1005. data/spec/lib/pwn/www/google_spec.rb +15 -0
  1006. data/spec/lib/pwn/www/hacker_one_spec.rb +15 -0
  1007. data/spec/lib/pwn/www/linkedin_spec.rb +15 -0
  1008. data/spec/lib/pwn/www/pandora_spec.rb +15 -0
  1009. data/spec/lib/pwn/www/pastebin_spec.rb +15 -0
  1010. data/spec/lib/pwn/www/paypal_spec.rb +15 -0
  1011. data/spec/lib/pwn/www/synack_spec.rb +15 -0
  1012. data/spec/lib/pwn/www/torch_spec.rb +15 -0
  1013. data/spec/lib/pwn/www/trading_view_spec.rb +15 -0
  1014. data/spec/lib/pwn/www/twitter_spec.rb +15 -0
  1015. data/spec/lib/pwn/www/uber_spec.rb +15 -0
  1016. data/spec/lib/pwn/www/upwork_spec.rb +15 -0
  1017. data/spec/lib/pwn/www/wayback_machine_spec.rb +15 -0
  1018. data/spec/lib/pwn/www/youtube_spec.rb +15 -0
  1019. data/spec/lib/pwn/www_spec.rb +10 -0
  1020. data/spec/lib/pwn_spec.rb +10 -0
  1021. data/spec/spec_helper.rb +3 -0
  1022. data/third_party/.gitkeep +0 -0
  1023. data/third_party/http-request-headers-fields-large.txt +1185 -0
  1024. data/third_party/pwn_rdoc.jsonl +1447 -0
  1025. data/third_party/r2-pwn-layout +1 -0
  1026. data/upgrade_Gemfile_gems.sh +19 -0
  1027. data/upgrade_pwn.sh +9 -0
  1028. data/upgrade_ruby.sh +42 -0
  1029. data/vagrant/provisioners/apache2.sh +76 -0
  1030. data/vagrant/provisioners/beef.rb +30 -0
  1031. data/vagrant/provisioners/burpsuite_pro.rb +37 -0
  1032. data/vagrant/provisioners/exploit-db.sh +2 -0
  1033. data/vagrant/provisioners/gem.sh +4 -0
  1034. data/vagrant/provisioners/init_env.sh +22 -0
  1035. data/vagrant/provisioners/jenkins.sh +87 -0
  1036. data/vagrant/provisioners/jenkins_ssh-keygen.rb +86 -0
  1037. data/vagrant/provisioners/kali_customize.rb +130 -0
  1038. data/vagrant/provisioners/letsencrypt.rb +35 -0
  1039. data/vagrant/provisioners/metasploit.rb +25 -0
  1040. data/vagrant/provisioners/nmap_all_live_hosts.sh +2 -0
  1041. data/vagrant/provisioners/openvas.sh +23 -0
  1042. data/vagrant/provisioners/openvas_wrappers.sh +2 -0
  1043. data/vagrant/provisioners/post_install.sh +14 -0
  1044. data/vagrant/provisioners/postgres.sh +22 -0
  1045. data/vagrant/provisioners/pwn.sh +13 -0
  1046. data/vagrant/provisioners/rvm.sh +18 -0
  1047. data/vagrant/provisioners/ssllabs-scan.sh +10 -0
  1048. data/vagrant/provisioners/toggle_tor.sh +2 -0
  1049. data/vagrant/provisioners/update_jenkins_plugins.rb +30 -0
  1050. data/vagrant/provisioners/update_os.sh +108 -0
  1051. data/vagrant/provisioners/upload_globals.sh +63 -0
  1052. data/vagrant/provisioners/userland_fdisk.sh +22 -0
  1053. data/vagrant/provisioners/userland_lvm.sh +5 -0
  1054. data/vagrant/provisioners/wpscan.rb +25 -0
  1055. data/vagrant_rsync_third_party.lst +1 -0
  1056. data/vagrant_rsync_userland_template.lst +8 -0
  1057. metadata +1127 -20
@@ -0,0 +1,823 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'time'
5
+
6
+ module PWN
7
+ module SDR
8
+ # This plugin interacts with the remote control interface of GQRX.
9
+ module GQRX
10
+ # Monkey patches for frequency handling
11
+ String.class_eval do
12
+ def raw_hz
13
+ gsub('.', '').to_i
14
+ end
15
+ end
16
+
17
+ Integer.class_eval do
18
+ # Should always return format of X.XXX.XXX.XXX
19
+ # So 002_450_000_000 becomes 2.450.000.000
20
+ # So 2_450_000_000 becomes 2.450.000.000
21
+ # So 960_000_000 becomes 960.000.000
22
+ # 1000 should be 1.000
23
+ def pretty_hz
24
+ str_hz = to_s
25
+ # Nuke leading zeros
26
+ # E.g., 002450000000 -> 2450000000
27
+ str_hz = str_hz.sub(/^0+/, '')
28
+ # Insert dots every 3 digits from the right
29
+ str_hz.reverse.scan(/.{1,3}/).join('.').reverse
30
+ end
31
+ end
32
+
33
+ # Supported Method Parameters::
34
+ # scan_resp = PWN::SDR::GQRX.log_signals(
35
+ # signals_arr: 'required - Array of detected signals',
36
+ # timestamp_start: 'required - Scan start timestamp',
37
+ # scan_log: 'required - Path to save detected signals log'
38
+ # )
39
+ private_class_method def self.log_signals(opts = {})
40
+ signals_arr = opts[:signals_arr]
41
+ timestamp_start = opts[:timestamp_start]
42
+ scan_log = opts[:scan_log]
43
+
44
+ signals = signals_arr.sort_by { |s| s[:freq].to_s.raw_hz }
45
+ timestamp_end = Time.now.strftime('%Y-%m-%d %H:%M:%S%z')
46
+ duration_secs = Time.parse(timestamp_end) - Time.parse(timestamp_start)
47
+ # Convert duration seconds to hours minutes seconds
48
+ hours = (duration_secs / 3600).to_i
49
+ minutes = ((duration_secs % 3600) / 60).to_i
50
+ seconds = (duration_secs % 60).to_i
51
+ duration = format('%<hrs>02d:%<mins>02d:%<secs>02d', hrs: hours, mins: minutes, secs: seconds)
52
+
53
+ scan_resp = {
54
+ signals: signals,
55
+ timestamp_start: timestamp_start,
56
+ timestamp_end: timestamp_end,
57
+ duration: duration
58
+ }
59
+
60
+ File.write(
61
+ scan_log,
62
+ JSON.pretty_generate(scan_resp)
63
+ )
64
+
65
+ scan_resp
66
+ rescue StandardError => e
67
+ raise e
68
+ end
69
+
70
+ # Supported Method Parameters::
71
+ # gqrx_sock = PWN::SDR::GQRX.connect(
72
+ # target: 'optional - GQRX target IP address (defaults to 127.0.0.1)',
73
+ # port: 'optional - GQRX target port (defaults to 7356)'
74
+ # )
75
+ public_class_method def self.connect(opts = {})
76
+ target = opts[:target] ||= '127.0.0.1'
77
+ port = opts[:port] ||= 7356
78
+
79
+ PWN::Plugins::Sock.connect(target: target, port: port)
80
+ rescue StandardError => e
81
+ raise e
82
+ end
83
+
84
+ # Supported Method Parameters::
85
+ # gqrx_resp = PWN::SDR::GQRX.gqrx_cmd(
86
+ # gqrx_sock: 'required - GQRX socket object returned from #connect method',
87
+ # cmd: 'required - GQRX command to execute',
88
+ # resp_ok: 'optional - Expected response from GQRX to indicate success'
89
+ # )
90
+
91
+ public_class_method def self.gqrx_cmd(opts = {})
92
+ gqrx_sock = opts[:gqrx_sock]
93
+ cmd = opts[:cmd]
94
+ resp_ok = opts[:resp_ok]
95
+
96
+ # Most Recent GQRX Command Set:
97
+ # https://raw.githubusercontent.com/gqrx-sdr/gqrx/master/resources/remote-control.txt
98
+ # Supported commands:
99
+ # f Get frequency [Hz]
100
+ # F <frequency> Set frequency [Hz]
101
+ # m Get demodulator mode and passband
102
+ # M <mode> [passband]
103
+ # Set demodulator mode and passband [Hz]
104
+ # Passing a '?' as the first argument instead of 'mode' will return
105
+ # a space separated list of radio backend supported modes.
106
+ # l|L ?
107
+ # Get a space separated list of settings available for reading (l) or writing (L).
108
+ # l STRENGTH
109
+ # Get signal strength [dBFS]
110
+ # l SQL
111
+ # Get squelch threshold [dBFS]
112
+ # L SQL <sql>
113
+ # Set squelch threshold to <sql> [dBFS]
114
+ # l AF
115
+ # Get audio gain [dB]
116
+ # L AF <gain>
117
+ # Set audio gain to <gain> [dB]
118
+ # l <gain_name>_GAIN
119
+ # Get the value of the gain setting with the name <gain_name>
120
+ # L <gain_name>_GAIN <value>
121
+ # Set the value of the gain setting with the name <gain_name> to <value>
122
+ # p RDS_PI
123
+ # Get the RDS PI code (in hexadecimal). Returns 0000 if not applicable.
124
+ # u RECORD
125
+ # Get status of audio recorder
126
+ # U RECORD <status>
127
+ # Set status of audio recorder to <status>
128
+ # u DSP
129
+ # Get DSP (SDR receiver) status
130
+ # U DSP <status>
131
+ # Set DSP (SDR receiver) status to <status>
132
+ # u RDS
133
+ # Get RDS decoder to <status>. Only functions in WFM mode.
134
+ # U RDS <status>
135
+ # Set RDS decoder to <status>. Only functions in WFM mode.
136
+ # q|Q
137
+ # Close connection
138
+ # AOS
139
+ # Acquisition of signal (AOS) event, start audio recording
140
+ # LOS
141
+ # Loss of signal (LOS) event, stop audio recording
142
+ # LNB_LO [frequency]
143
+ # If frequency [Hz] is specified set the LNB LO frequency used for
144
+ # display. Otherwise print the current LNB LO frequency [Hz].
145
+ # \chk_vfo
146
+ # Get VFO option status (only usable for hamlib compatibility)
147
+ # \dump_state
148
+ # Dump state (only usable for hamlib compatibility)
149
+ # \get_powerstat
150
+ # Get power status (only usable for hamlib compatibility)
151
+ # v
152
+ # Get 'VFO' (only usable for hamlib compatibility)
153
+ # V
154
+ # Set 'VFO' (only usable for hamlib compatibility)
155
+ # s
156
+ # Get 'Split' mode (only usable for hamlib compatibility)
157
+ # S
158
+ # Set 'Split' mode (only usable for hamlib compatibility)
159
+ # _
160
+ # Get version
161
+ #
162
+ # Reply:
163
+ # RPRT 0
164
+ # Command successful
165
+ # RPRT 1
166
+ # Command failed
167
+
168
+ gqrx_sock.write("#{cmd}\n")
169
+ response = []
170
+ start_time = Time.now
171
+
172
+ # Wait up to 2 seconds for initial response
173
+ if gqrx_sock.wait_readable(2.0)
174
+ response.push(gqrx_sock.readline.chomp)
175
+ # Drain any additional lines quickly
176
+ loop do
177
+ # This is the main contributing factor to this scanner being slow.
178
+ # We're trading speed for accuracy here.
179
+ # break if gqrx_sock.wait_readable(0.0625).nil? && cmd == 'l STRENGTH'
180
+ break if gqrx_sock.wait_readable(0.04).nil? && cmd == 'l STRENGTH'
181
+ break if gqrx_sock.wait_readable(0.001).nil? && cmd != 'l STRENGTH'
182
+
183
+ response.push(gqrx_sock.readline.chomp)
184
+ end
185
+ end
186
+
187
+ raise "No response for command: #{cmd}" if response.empty?
188
+
189
+ response_str = response.length == 1 ? response.first : response.join(' ')
190
+
191
+ raise "ERROR!!! Command: #{cmd} Expected Resp: #{resp_ok}, Got: #{response_str}" if resp_ok && response_str != resp_ok
192
+
193
+ # Reformat positive integer frequency responses (e.g., from 'f')
194
+ response_str = response_str.to_i.pretty_hz if response_str.match?(/^\d+$/) && response_str.to_i.positive?
195
+
196
+ response_str
197
+ rescue RuntimeError => e
198
+ puts 'WARNING: RF Gain is not supported by the radio backend.' if e.message.include?('Command: L RF_GAIN')
199
+ puts 'WARNING: Intermediate Gain is not supported by the radio backend.' if e.message.include?('Command: L IF_GAIN')
200
+ puts 'WARNING: Baseband Gain is not supported by the radio backend.' if e.message.include?('Command: L BB_GAIN')
201
+
202
+ raise e unless e.message.include?('Command: L RF_GAIN') ||
203
+ e.message.include?('Command: L IF_GAIN') ||
204
+ e.message.include?('Command: L BB_GAIN')
205
+ rescue StandardError => e
206
+ raise e
207
+ end
208
+
209
+ # Supported Method Parameters::
210
+ # freq_obj = PWN::SDR::GQRX.init_freq(
211
+ # gqrx_sock: 'required - GQRX socket object returned from #connect method',
212
+ # freq: 'required - Frequency to set',
213
+ # demodulator_mode: 'optional - Demodulator mode (defaults to WFM)',
214
+ # bandwidth: 'optional - Bandwidth (defaults to 200_000)',
215
+ # squelch: 'optional - Squelch level to set (Defaults to current value)',
216
+ # decoder: 'optional - Decoder key (e.g., :gsm) to start live decoding (starts recording if provided)',
217
+ # record_dir: 'optional - Directory where GQRX saves recordings (required if decoder provided; defaults to /tmp/gqrx_recordings)',
218
+ # suppress_details: 'optional - Boolean to include extra frequency details in return hash (defaults to false)',
219
+ # keep_alive: 'optional - Boolean to keep GQRX connection alive after method completion (defaults to false)'
220
+ # )
221
+ public_class_method def self.init_freq(opts = {})
222
+ gqrx_sock = opts[:gqrx_sock]
223
+ freq = opts[:freq]
224
+ valid_demodulator_modes = %i[
225
+ AM
226
+ AM_SYNC
227
+ CW
228
+ CWL
229
+ CWU
230
+ FM
231
+ OFF
232
+ LSB
233
+ RAW
234
+ USB
235
+ WFM
236
+ WFM_ST
237
+ WFM_ST_OIRT
238
+ ]
239
+ demodulator_mode = opts[:demodulator_mode] ||= :WFM
240
+ raise "ERROR: Invalid demodulator_mode '#{demodulator_mode}'. Valid modes: #{valid_demodulator_modes.join(', ')}" unless valid_demodulator_modes.include?(demodulator_mode.to_sym)
241
+
242
+ bandwidth = opts[:bandwidth] ||= 200_000
243
+ squelch = opts[:squelch]
244
+ decoder = opts[:decoder]
245
+ record_dir = opts[:record_dir] ||= '/tmp'
246
+ suppress_details = opts[:suppress_details] || false
247
+ keep_alive = opts[:keep_alive] || false
248
+
249
+ raise "ERROR: record_dir '#{record_dir}' does not exist. Please create it or provide a valid path." if decoder && !Dir.exist?(record_dir)
250
+
251
+ if squelch.is_a?(Float) && squelch >= -100.0 && squelch <= 0.0 && !keep_alive
252
+ change_squelch_resp = gqrx_cmd(
253
+ gqrx_sock: gqrx_sock,
254
+ cmd: "L SQL #{squelch}",
255
+ resp_ok: 'RPRT 0'
256
+ )
257
+ end
258
+
259
+ change_freq_resp = gqrx_cmd(
260
+ gqrx_sock: gqrx_sock,
261
+ cmd: "F #{freq.to_s.raw_hz}",
262
+ resp_ok: 'RPRT 0'
263
+ )
264
+
265
+ # Set demod mode and bandwidth (always, using defaults if not provided)
266
+ unless keep_alive
267
+ mode_str = demodulator_mode.to_s.upcase
268
+ passband_hz = bandwidth.to_s.raw_hz
269
+ gqrx_cmd(
270
+ gqrx_sock: gqrx_sock,
271
+ cmd: "M #{mode_str} #{passband_hz}",
272
+ resp_ok: 'RPRT 0'
273
+ )
274
+ end
275
+
276
+ # Get demodulator mode n passband
277
+ demod_n_passband = gqrx_cmd(
278
+ gqrx_sock: gqrx_sock,
279
+ cmd: 'm'
280
+ )
281
+
282
+ # Get current frequency
283
+ current_freq = gqrx_cmd(
284
+ gqrx_sock: gqrx_sock,
285
+ cmd: 'f'
286
+ )
287
+
288
+ freq_obj = {
289
+ demodulator_mode: demodulator_mode,
290
+ demod_mode_n_passband: demod_n_passband,
291
+ freq: current_freq,
292
+ bandwidth: bandwidth
293
+ }
294
+
295
+ unless suppress_details
296
+ audio_gain_db = gqrx_cmd(
297
+ gqrx_sock: gqrx_sock,
298
+ cmd: 'l AF'
299
+ ).to_f
300
+
301
+ strength_db_float = gqrx_cmd(
302
+ gqrx_sock: gqrx_sock,
303
+ cmd: 'l STRENGTH'
304
+ ).to_f
305
+ strength_db = strength_db_float.round(1)
306
+
307
+ current_squelch = gqrx_cmd(
308
+ gqrx_sock: gqrx_sock,
309
+ cmd: 'l SQL'
310
+ ).to_f
311
+
312
+ rf_gain = gqrx_cmd(
313
+ gqrx_sock: gqrx_sock,
314
+ cmd: 'l RF_GAIN'
315
+ )
316
+
317
+ if_gain = gqrx_cmd(
318
+ gqrx_sock: gqrx_sock,
319
+ cmd: 'l IF_GAIN'
320
+ )
321
+
322
+ bb_gain = gqrx_cmd(
323
+ gqrx_sock: gqrx_sock,
324
+ cmd: 'l BB_GAIN'
325
+ )
326
+
327
+ freq_obj[:audio_gain_db] = audio_gain_db
328
+ freq_obj[:squelch_set] = current_squelch
329
+ freq_obj[:rf_gain] = rf_gain
330
+ freq_obj[:if_gain] = if_gain
331
+ freq_obj[:bb_gain] = bb_gain
332
+ freq_obj[:strength_db] = strength_db
333
+ end
334
+
335
+ # Start recording and decoding if decoder provided
336
+ decoder_module = nil
337
+ decoder_thread = nil
338
+ record_path = nil
339
+ if decoder
340
+ # Resolve decoder module via case statement for extensibility
341
+ case decoder
342
+ when :gsm
343
+ decoder_module = PWN::SDR::Decoder::GSM
344
+ else
345
+ raise "ERROR: Unknown decoder key: #{decoder}. Supported: :gsm"
346
+ end
347
+
348
+ # Ensure recording is off before starting
349
+ record_status = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'u RECORD')
350
+ gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'U RECORD 0', resp_ok: 'RPRT 0') if record_status == '1'
351
+
352
+ # Start recording
353
+ gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'U RECORD 1', resp_ok: 'RPRT 0')
354
+
355
+ # Prepare for decoder
356
+ start_time = Time.now
357
+ expected_filename = "gqrx_#{start_time.strftime('%Y%m%d_%H%M%S')}_#{current_freq_raw}.wav"
358
+ record_path = File.join(record_dir, expected_filename)
359
+
360
+ # Build partial gqrx_obj for decoder start
361
+ freq_obj[:record_path] = record_path
362
+
363
+ # Initialize and start decoder (module style: .start returns thread)
364
+ freq_obj[:gqrx_sock] = gqrx_sock
365
+ decoder_thread = decoder_module.start(freq_obj: freq_obj)
366
+ freq_obj.delete(:gqrx_sock)
367
+
368
+ freq_obj[:decoder] = decoder
369
+ freq_obj[:decoder_module] = decoder_module
370
+ freq_obj[:decoder_thread] = decoder_thread
371
+ freq_obj[:record_path] = record_path
372
+ end
373
+
374
+ freq_obj
375
+ rescue StandardError => e
376
+ raise e
377
+ ensure
378
+ # Ensure decoder recording stops
379
+ if decoder
380
+ gqrx_cmd(
381
+ gqrx_sock: gqrx_sock,
382
+ cmd: 'U RECORD 0',
383
+ resp_ok: 'RPRT 0'
384
+ )
385
+ decoder_module.stop(freq_obj: freq_obj)
386
+ end
387
+ disconnect(gqrx_sock: gqrx_sock) if gqrx_sock.is_a?(TCPSocket) && !keep_alive
388
+ end
389
+
390
+ # Supported Method Parameters::
391
+ # scan_resp = PWN::SDR::GQRX.scan_range(
392
+ # gqrx_sock: 'required - GQRX socket object returned from #connect method',
393
+ # start_freq: 'required - Start frequency of scan range',
394
+ # target_freq: 'required - Target frequency of scan range',
395
+ # demodulator_mode: 'optional - Demodulator mode (e.g. WFM, AM, FM, USB, LSB, RAW, CW, RTTY / defaults to WFM)',
396
+ # bandwidth: 'optional - Bandwidth in Hz (Defaults to 200_000)',
397
+ # overlap_protection: 'optional - Boolean to enable/disable bandwidth overlap protection (defaults to false)',
398
+ # precision: 'optional - Frequency step precision (number of digits; defaults to 1)',
399
+ # lock_freq_duration: 'optional - Lock frequency duration in seconds (defaults to 0.04)',
400
+ # strength_lock: 'optional - Strength lock in dBFS (defaults to -70.0)',
401
+ # squelch: 'optional - Squelch level in dBFS (defaults to strength_lock - 3.0)',
402
+ # audio_gain_db: 'optional - Audio gain in dB (defaults to 6.0)',
403
+ # rf_gain: 'optional - RF gain (defaults to 0.0)',
404
+ # intermediate_gain: 'optional - Intermediate gain (defaults to 32.0)',
405
+ # baseband_gain: 'optional - Baseband gain (defaults to 10.0)',
406
+ # scan_log: 'optional - Path to save detected signals log (defaults to /tmp/pwn_sdr_gqrx_scan_<start_freq>-<target_freq>_<timestamp>.json)',
407
+ # location: 'optional - Location string to include in AI analysis (e.g., "New York, NY", 90210, GPS coords, etc.)'
408
+ # )
409
+
410
+ public_class_method def self.scan_range(opts = {})
411
+ timestamp_start = Time.now.strftime('%Y-%m-%d %H:%M:%S%z')
412
+ log_timestamp = Time.now.strftime('%Y-%m-%d')
413
+
414
+ gqrx_sock = opts[:gqrx_sock]
415
+
416
+ start_freq = opts[:start_freq]
417
+ hz_start = start_freq.to_s.raw_hz
418
+
419
+ target_freq = opts[:target_freq]
420
+ hz_target = target_freq.to_s.raw_hz
421
+
422
+ demodulator_mode = opts[:demodulator_mode]
423
+ bandwidth = opts[:bandwidth] ||= 200_000
424
+ overlap_protection = opts[:overlap_protection] || false
425
+ precision = opts[:precision] ||= 1
426
+ lock_freq_duration = opts[:lock_freq_duration] ||= 0.04
427
+ strength_lock = opts[:strength_lock] ||= -70.0
428
+ squelch = opts[:squelch] ||= (strength_lock - 3.0)
429
+ scan_log = opts[:scan_log] ||= "/tmp/pwn_sdr_gqrx_scan_#{hz_start.pretty_hz}-#{hz_target.pretty_hz}_#{log_timestamp}.json"
430
+ location = opts[:location] ||= 'United States'
431
+
432
+ step_hz = 10**(precision - 1)
433
+ step = hz_start > hz_target ? -step_hz : step_hz
434
+
435
+ # Set squelch once for the scan
436
+ change_squelch_resp = gqrx_cmd(
437
+ gqrx_sock: gqrx_sock,
438
+ cmd: "L SQL #{squelch}",
439
+ resp_ok: 'RPRT 0'
440
+ )
441
+
442
+ # Set demodulator mode & passband once for the scan
443
+ mode_str = demodulator_mode.to_s.upcase
444
+ passband_hz = bandwidth.to_s.raw_hz
445
+ gqrx_cmd(
446
+ gqrx_sock: gqrx_sock,
447
+ cmd: "M #{mode_str} #{passband_hz}",
448
+ resp_ok: 'RPRT 0'
449
+ )
450
+
451
+ audio_gain_db = opts[:audio_gain_db] ||= 6.0
452
+ audio_gain_db = audio_gain_db.to_f
453
+ audio_gain_db_resp = PWN::SDR::GQRX.gqrx_cmd(
454
+ gqrx_sock: gqrx_sock,
455
+ cmd: "L AF #{audio_gain_db}",
456
+ resp_ok: 'RPRT 0'
457
+ )
458
+
459
+ rf_gain = opts[:rf_gain] ||= 0.0
460
+ rf_gain = rf_gain.to_f
461
+ rf_gain_resp = PWN::SDR::GQRX.gqrx_cmd(
462
+ gqrx_sock: gqrx_sock,
463
+ cmd: "L RF_GAIN #{rf_gain}",
464
+ resp_ok: 'RPRT 0'
465
+ )
466
+
467
+ intermediate_gain = opts[:intermediate_gain] ||= 32.0
468
+ intermediate_gain = intermediate_gain.to_f
469
+ intermediate_resp = PWN::SDR::GQRX.gqrx_cmd(
470
+ gqrx_sock: gqrx_sock,
471
+ cmd: "L IF_GAIN #{intermediate_gain}",
472
+ resp_ok: 'RPRT 0'
473
+ )
474
+
475
+ baseband_gain = opts[:baseband_gain] ||= 10.0
476
+ baseband_gain = baseband_gain.to_f
477
+ baseband_resp = PWN::SDR::GQRX.gqrx_cmd(
478
+ gqrx_sock: gqrx_sock,
479
+ cmd: "L BB_GAIN #{baseband_gain}",
480
+ resp_ok: 'RPRT 0'
481
+ )
482
+
483
+ prev_freq_obj = {}
484
+
485
+ in_signal = false
486
+ candidate_signals = []
487
+ strength_history = []
488
+
489
+ # Adaptive peak finder – trims weakest ends after each pass
490
+ # Converges quickly to the true center of the bell curve
491
+ find_best_peak = lambda do |opts = {}|
492
+ beg_of_signal_hz = opts[:beg_of_signal_hz].to_s.raw_hz
493
+ top_of_signal_hz = opts[:top_of_signal_hz].to_s.raw_hz
494
+ end_of_signal_hz = top_of_signal_hz + step_hz
495
+
496
+ # current_hz = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'f').to_s.raw_hz
497
+ # puts "Current Frequency: #{current_hz.pretty_hz}"
498
+ puts "Signal Began: #{beg_of_signal_hz.pretty_hz}"
499
+ puts "Signal Appeared to Peak at: #{top_of_signal_hz.pretty_hz}"
500
+ puts "Calculated Signal End: #{end_of_signal_hz.pretty_hz}"
501
+ # steps_between_beg_n_end = ((end_of_signal_hz - beg_of_signal_hz) / step_hz).abs
502
+ # puts steps_between_beg_n_end.inspect
503
+
504
+ samples = []
505
+ prev_best_sample = nil
506
+ consecutive_best = 0
507
+ direction_up = true
508
+
509
+ pass_count = 0
510
+ infinite_loop_safeguard = false
511
+ while true
512
+ pass_count += 1
513
+
514
+ # Safeguard against infinite loop
515
+ infinite_loop_safeguard = true if pass_count >= 100
516
+ puts 'WARNING: Infinite loop safeguard triggered in find_best_peak!' if infinite_loop_safeguard
517
+ break if infinite_loop_safeguard
518
+
519
+ direction_up = !direction_up
520
+ start_hz_direction = direction_up ? beg_of_signal_hz : end_of_signal_hz
521
+ end_hz_direction = direction_up ? end_of_signal_hz : beg_of_signal_hz
522
+ step_hz_direction = direction_up ? step_hz : -step_hz
523
+
524
+ start_hz_direction.step(by: step_hz_direction, to: end_hz_direction) do |hz|
525
+ print '>' if direction_up
526
+ print '<' unless direction_up
527
+ gqrx_cmd(gqrx_sock: gqrx_sock, cmd: "F #{hz}")
528
+ sleep lock_freq_duration
529
+ strength_db_float = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'l STRENGTH').to_f
530
+ strength_db = strength_db_float.round(1)
531
+ samples.push({ hz: hz, strength_db: strength_db })
532
+
533
+ # current_hz = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'f').to_s.raw_hz
534
+ # puts "Sampled Frequency: #{current_hz.pretty_hz} => Strength: #{strength_db} dBFS"
535
+ end
536
+
537
+ # Compute fresh averaged_samples from all cumulative samples
538
+ averaged_samples = []
539
+ samples.group_by { |s| s[:hz] }.each do |hz, grouped_samples|
540
+ avg_strength = (grouped_samples.map { |s| s[:strength_db] }.sum / grouped_samples.size).round(1)
541
+ averaged_samples.push({ hz: hz, strength_db: avg_strength })
542
+ end
543
+
544
+ # Sort by hz for trimming
545
+ averaged_samples.sort_by! { |s| s[:hz] }
546
+
547
+ # Find current best for trimming threshold
548
+ best_sample = averaged_samples.max_by { |s| s[:strength_db] }
549
+ max_strength = best_sample[:strength_db]
550
+
551
+ # trim_db_threshold should bet average difference between
552
+ # samples near peak, floor to nearest 0.1 dB
553
+ trim_db_threshold = samples.map { |s| (s[:strength_db] - max_strength).abs }.sum / samples.size
554
+ trim_db_threshold = (trim_db_threshold * 10).floor / 10.0
555
+ puts "\nPass #{pass_count}: Calculated trim_db_threshold: #{trim_db_threshold} dB"
556
+ # Adaptive trim: Remove weak ends (implements the comment about trimming weakest ends)
557
+ averaged_samples.shift while !averaged_samples.empty? && averaged_samples.first[:strength_db] < max_strength - trim_db_threshold
558
+ averaged_samples.pop while !averaged_samples.empty? && averaged_samples.last[:strength_db] < max_strength - trim_db_threshold
559
+
560
+ # Update range for next pass if trimmed
561
+ unless averaged_samples.empty?
562
+ beg_of_signal_hz = averaged_samples.first[:hz]
563
+ end_of_signal_hz = averaged_samples.last[:hz]
564
+ end
565
+
566
+ # Recalculate best_sample after trim
567
+ best_sample = averaged_samples.max_by { |s| s[:strength_db] }
568
+
569
+ # Check for improvement
570
+ if best_sample == prev_best_sample
571
+ consecutive_best += 1
572
+ else
573
+ consecutive_best = 0
574
+ end
575
+
576
+ # Dup to avoid reference issues
577
+ prev_best_sample = best_sample.dup
578
+
579
+ puts "Pass #{pass_count}: Best #{best_sample[:hz].pretty_hz} => #{best_sample[:strength_db]} dBFS, consecutive best count: #{consecutive_best}"
580
+
581
+ # Break if no improvement in 3 consecutive passes or theres only one sample left
582
+ break if consecutive_best.positive? || averaged_samples.size == 1
583
+ end
584
+
585
+ best_sample
586
+ end
587
+
588
+ # Begin scanning range
589
+ puts "INFO: Scanning from #{hz_start.pretty_hz} to #{hz_target.pretty_hz} in steps of #{step.abs.pretty_hz} Hz.\nIf scans are slow and/or you're experiencing false positives/negatives, consider adjusting:\n1. The SDR's sample rate in GQRX\n\s\s- Click on `Configure I/O devices`.\n\s\s- A lower `Input rate` value seems counter-intuitive but works well (e.g. ADALM PLUTO ~ 1000000).\n2. Adjust the :strength_lock parameter.\n3. Adjust the :lock_freq_duration parameter.\n4. Adjust the :precision parameter.\n5. Disable AI introspection in PWN::Env\nHappy scanning!\n\n"
590
+
591
+ signals_arr = []
592
+ # Format timestamp_start for filename
593
+ hz_start.step(by: step, to: hz_target) do |hz|
594
+ gqrx_cmd(gqrx_sock: gqrx_sock, cmd: "F #{hz}")
595
+ sleep lock_freq_duration
596
+ strength_db_float = gqrx_cmd(gqrx_sock: gqrx_sock, cmd: 'l STRENGTH').to_f
597
+ strength_db = strength_db_float.round(1)
598
+ prev_strength_db = strength_history.last || -Float::INFINITY
599
+
600
+ if strength_db >= strength_lock && strength_db > prev_strength_db
601
+ in_signal = true
602
+ strength_history.push(strength_db)
603
+ strength_history.shift if strength_history.size > 5
604
+ current_strength = (strength_history.sum / strength_history.size).round(1)
605
+
606
+ print '.'
607
+ puts "#{hz.pretty_hz} => #{strength_db}"
608
+
609
+ candidate = { hz: hz, freq: hz.pretty_hz, strength: current_strength }
610
+ candidate_signals.push(candidate)
611
+ else
612
+ if in_signal
613
+ beg_of_signal_hz = candidate_signals.map { |s| s[:hz] }.min
614
+ # Previous max step_hz was actually the top of the signal
615
+ top_of_signal_hz = candidate_signals.map { |s| s[:hz] }.max - step_hz
616
+
617
+ skip_signal = false
618
+ prev_freq = prev_freq_obj[:freq].to_s.raw_hz
619
+ distance_from_prev_detected_freq_hz = (beg_of_signal_hz - prev_freq).abs
620
+ half_bandwidth = (bandwidth / 2).to_i
621
+ skip_signal = true if distance_from_prev_detected_freq_hz < half_bandwidth && overlap_protection
622
+ puts "Prev Dect Freq: #{prev_freq} | New Freq Edge: #{beg_of_signal_hz} | Distance from Prev Dect Freq: #{distance_from_prev_detected_freq_hz} Hz | Step Hz: #{step_hz} | Bandwidth: #{bandwidth} Hz | Half Bandwidth: #{half_bandwidth} Hz | Overlap Protection? #{overlap_protection} | Skip Signal? #{skip_signal}"
623
+ next if skip_signal
624
+
625
+ best_peak = find_best_peak.call(
626
+ beg_of_signal_hz: beg_of_signal_hz,
627
+ top_of_signal_hz: top_of_signal_hz
628
+ )
629
+
630
+ if best_peak[:hz] && best_peak[:strength_db] > strength_lock
631
+ prev_freq_obj = init_freq(
632
+ gqrx_sock: gqrx_sock,
633
+ freq: best_peak[:hz],
634
+ demodulator_mode: demodulator_mode,
635
+ bandwidth: bandwidth,
636
+ squelch: squelch,
637
+ suppress_details: true,
638
+ keep_alive: true
639
+ )
640
+ prev_freq_obj[:lock_freq_duration] = lock_freq_duration
641
+ prev_freq_obj[:strength_lock] = strength_lock
642
+
643
+ system_role_content = "Analyze signal data captured by a software-defined-radio using GQRX at the following location: #{location}. Respond with just FCC information about the transmission if available. If the frequency is unlicensed or not found in FCC records, state that clearly. Be clear and concise in your analysis."
644
+ ai_analysis = PWN::AI::Introspection.reflect_on(
645
+ request: prev_freq_obj.to_json,
646
+ system_role_content: system_role_content,
647
+ suppress_pii_warning: true
648
+ )
649
+ prev_freq_obj[:ai_analysis] = ai_analysis unless ai_analysis.nil?
650
+ puts "\n**** Detected Signal ****"
651
+ puts JSON.pretty_generate(prev_freq_obj)
652
+ signals_arr.push(prev_freq_obj)
653
+ log_signals(
654
+ signals_arr: signals_arr,
655
+ timestamp_start: timestamp_start,
656
+ scan_log: scan_log
657
+ )
658
+ end
659
+ candidate_signals.clear
660
+ sleep lock_freq_duration
661
+ end
662
+ in_signal = false
663
+ strength_history = []
664
+ end
665
+ end
666
+
667
+ log_signals(
668
+ signals_arr: signals_arr,
669
+ timestamp_start: timestamp_start,
670
+ scan_log: scan_log
671
+ )
672
+ rescue StandardError => e
673
+ raise e
674
+ ensure
675
+ disconnect(gqrx_sock: gqrx_sock)
676
+ end
677
+
678
+ # Supported Method Parameters::
679
+ # PWN::SDR::GQRX.analyze_scan(
680
+ # scan_resp: 'required - Scan response hash returned from #scan_range method',
681
+ # target: 'optional - GQRX target IP address (defaults to 127.0.0.1)',
682
+ # port: 'optional - GQRX target port (defaults to 7356)'
683
+ # )
684
+ public_class_method def self.analyze_scan(opts = {})
685
+ scan_resp = opts[:scan_resp]
686
+ raise 'ERROR: scan_resp is required.' if scan_resp.nil? || scan_resp[:signals].nil? || scan_resp[:signals].empty?
687
+
688
+ target = opts[:target]
689
+ port = opts[:port]
690
+ gqrx_sock = connect(
691
+ target: target,
692
+ port: port
693
+ )
694
+
695
+ scan_resp[:signals].each do |signal|
696
+ freq_obj = { gqrx_sock: gqrx_sock, keep_alive: true }
697
+ freq_obj = signal.merge(freq_obj)
698
+ freq_obj = init_freq(freq_obj)
699
+ # Redact gqrx_sock from output
700
+ freq_obj.delete(:gqrx_sock)
701
+ puts JSON.pretty_generate(freq_obj)
702
+ print 'Press [ENTER] to continue...'
703
+ gets
704
+ puts "\n" * 3
705
+ end
706
+ rescue StandardError => e
707
+ raise e
708
+ ensure
709
+ disconnect(gqrx_sock: gqrx_sock)
710
+ end
711
+
712
+ # Supported Method Parameters::
713
+ # PWN::SDR::GQRX.analyze_log(
714
+ # scan_log: 'required - Path to signals log file',
715
+ # target: 'optional - GQRX target IP address (defaults to 127.0.0.1)',
716
+ # port: 'optional - GQRX target port (defaults to 7356)'
717
+ # )
718
+ public_class_method def self.analyze_log(opts = {})
719
+ scan_log = opts[:scan_log]
720
+ raise 'ERROR: scan_log path is required.' unless File.exist?(scan_log)
721
+
722
+ scan_resp = JSON.parse(File.read(scan_log), symbolize_names: true)
723
+ raise 'ERROR: No signals found in log.' if scan_resp[:signals].nil? || scan_resp[:signals].empty?
724
+
725
+ target = opts[:target]
726
+ port = opts[:port]
727
+
728
+ analyze_scan(
729
+ scan_resp: scan_resp,
730
+ target: target,
731
+ port: port
732
+ )
733
+ rescue StandardError => e
734
+ raise e
735
+ end
736
+
737
+ # Supported Method Parameters::
738
+ # PWN::SDR::GQRX.disconnect(
739
+ # gqrx_sock: 'required - GQRX socket object returned from #connect method'
740
+ # )
741
+ public_class_method def self.disconnect(opts = {})
742
+ gqrx_sock = opts[:gqrx_sock]
743
+
744
+ PWN::Plugins::Sock.disconnect(sock_obj: gqrx_sock)
745
+ rescue StandardError => e
746
+ raise e
747
+ end
748
+
749
+ # Author(s):: 0day Inc. <support@0dayinc.com>
750
+
751
+ public_class_method def self.authors
752
+ "AUTHOR(S):
753
+ 0day Inc. <support@0dayinc.com>
754
+ "
755
+ end
756
+
757
+ # Display Usage for this Module
758
+
759
+ public_class_method def self.help
760
+ puts "USAGE:
761
+ gqrx_sock = #{self}.connect(
762
+ target: 'optional - GQRX target IP address (defaults to 127.0.0.1)',
763
+ port: 'optional - GQRX target port (defaults to 7356)'
764
+ )
765
+
766
+ gqrx_resp = #{self}.gqrx_cmd(
767
+ gqrx_sock: 'required - GQRX socket object returned from #connect method',
768
+ cmd: 'required - GQRX command to execute',
769
+ resp_ok: 'optional - Expected response from GQRX to indicate success'
770
+ )
771
+
772
+ freq_obj = #{self}.init_freq(
773
+ gqrx_sock: 'required - GQRX socket object returned from #connect method',
774
+ freq: 'required - Frequency to set',
775
+ demodulator_mode: 'optional - Demodulator mode (defaults to WFM)',
776
+ bandwidth: 'optional - Bandwidth (defaults to 200_000)',
777
+ decoder: 'optional - Decoder key (e.g., :gsm) to start live decoding (starts recording if provided)',
778
+ record_dir: 'optional - Directory where GQRX saves recordings (required if decoder provided; defaults to /tmp/gqrx_recordings)',
779
+ suppress_details: 'optional - Boolean to include extra frequency details in return hash (defaults to false)',
780
+ keep_alive: 'optional - Boolean to keep GQRX connection alive after method completion (defaults to false)'
781
+ )
782
+
783
+ scan_resp = #{self}.scan_range(
784
+ gqrx_sock: 'required - GQRX socket object returned from #connect method',
785
+ start_freq: 'required - Starting frequency',
786
+ target_freq: 'required - Target frequency',
787
+ demodulator_mode: 'optional - Demodulator mode (e.g. WFM, AM, FM, USB, LSB, RAW, CW, RTTY / defaults to WFM)',
788
+ bandwidth: 'optional - Bandwidth in Hz (Defaults to 200_000)',
789
+ overlap_protection: 'optional - Boolean to enable/disable bandwidth overlap protection (defaults to false)',
790
+ precision: 'optional - Precision (Defaults to 1)',
791
+ lock_freq_duration: 'optional - Lock frequency duration in seconds (defaults to 0.04)',
792
+ strength_lock: 'optional - Strength lock (defaults to -70.0)',
793
+ squelch: 'optional - Squelch level (defaults to strength_lock - 3.0)',
794
+ audio_gain_db: 'optional - Audio gain in dB (defaults to 6.0)',
795
+ rf_gain: 'optional - RF gain (defaults to 0.0)',
796
+ intermediate_gain: 'optional - Intermediate gain (defaults to 32.0)',
797
+ baseband_gain: 'optional - Baseband gain (defaults to 10.0)',
798
+ scan_log: 'optional - Path to save detected signals log (defaults to /tmp/pwn_sdr_gqrx_scan_<start_freq>-<target_freq>_<timestamp>.json)',
799
+ location: 'optional - Location string to include in AI analysis (e.g., \"New York, NY\", 90210, GPS coords, etc.)'
800
+ )
801
+
802
+ #{self}.analyze_scan(
803
+ scan_resp: 'required - Scan response object from #scan_range method',
804
+ target: 'optional - GQRX target IP address (defaults to 127.0.0.1)',
805
+ port: 'optional - GQRX target port (defaults to 7356)'
806
+ )
807
+
808
+ #{self}.analyze_log(
809
+ scan_log: 'required - Path to signals log file',
810
+ target: 'optional - GQRX target IP address (defaults to 127.0.0.1)',
811
+ port: 'optional - GQRX target port (defaults to 7356)'
812
+ )
813
+
814
+ #{self}.disconnect(
815
+ gqrx_sock: 'required - GQRX socket object returned from #connect method'
816
+ )
817
+
818
+ #{self}.authors
819
+ "
820
+ end
821
+ end
822
+ end
823
+ end