pwn 0.5.708 → 0.5.709

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 (434) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/Installation.md +1 -0
  3. data/etc/default_skills/pwn/ai/agent/extrospection/osint/bridges/SKILL.md +30 -8
  4. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/SKILL.md +30 -8
  5. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/references/urls.md +1 -1
  6. data/etc/default_skills/pwn/ai/agent/extrospection/references/urls.md +0 -1
  7. data/etc/default_skills/pwn/memory_index/SKILL.md +0 -4
  8. data/etc/default_skills/pwn/plugins/aflplusplus/SKILL.md +48 -0
  9. data/etc/default_skills/pwn/plugins/android/SKILL.md +1 -0
  10. data/etc/default_skills/pwn/plugins/artifact_registry/SKILL.md +49 -0
  11. data/etc/default_skills/pwn/plugins/binary_parser/SKILL.md +54 -0
  12. data/etc/default_skills/pwn/plugins/credential_attack/SKILL.md +51 -0
  13. data/etc/default_skills/pwn/plugins/doctor/SKILL.md +57 -0
  14. data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +61 -0
  15. data/etc/default_skills/pwn/plugins/frida/SKILL.md +49 -0
  16. data/etc/default_skills/pwn/plugins/gdb/SKILL.md +52 -0
  17. data/etc/default_skills/pwn/plugins/jobs/SKILL.md +51 -0
  18. data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +48 -0
  19. data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +52 -0
  20. data/etc/default_skills/pwn/plugins/radare2/SKILL.md +59 -0
  21. data/etc/default_skills/pwn/plugins/recon/SKILL.md +55 -0
  22. data/etc/default_skills/pwn/plugins/recon/references/urls.md +5 -0
  23. data/etc/default_skills/pwn/plugins/sqlmap/SKILL.md +48 -0
  24. data/etc/default_skills/pwn/plugins/transparent_browser/SKILL.md +0 -4
  25. data/etc/default_skills/pwn/plugins/volatility/SKILL.md +48 -0
  26. data/lib/pwn/ai/agent/assembly.rb +4 -1
  27. data/lib/pwn/ai/agent/btc.rb +4 -1
  28. data/lib/pwn/ai/agent/burp_suite.rb +5 -2
  29. data/lib/pwn/ai/agent/curriculum.rb +89 -30
  30. data/lib/pwn/ai/agent/dispatch.rb +27 -16
  31. data/lib/pwn/ai/agent/extrospection/osint/bridges.rb +9 -18
  32. data/lib/pwn/ai/agent/extrospection/osint/social.rb +9 -18
  33. data/lib/pwn/ai/agent/extrospection.rb +185 -60
  34. data/lib/pwn/ai/agent/gqrx.rb +4 -1
  35. data/lib/pwn/ai/agent/hacker_one.rb +5 -2
  36. data/lib/pwn/ai/agent/learning.rb +142 -25
  37. data/lib/pwn/ai/agent/loop.rb +53 -46
  38. data/lib/pwn/ai/agent/metrics.rb +133 -23
  39. data/lib/pwn/ai/agent/mistakes.rb +126 -17
  40. data/lib/pwn/ai/agent/open_goal.rb +25 -9
  41. data/lib/pwn/ai/agent/policy.rb +158 -18
  42. data/lib/pwn/ai/agent/prompt_builder.rb +21 -11
  43. data/lib/pwn/ai/agent/prompt_cache.rb +44 -13
  44. data/lib/pwn/ai/agent/reflect.rb +9 -5
  45. data/lib/pwn/ai/agent/registry.rb +65 -12
  46. data/lib/pwn/ai/agent/result.rb +19 -10
  47. data/lib/pwn/ai/agent/reward.rb +150 -32
  48. data/lib/pwn/ai/agent/sast.rb +4 -1
  49. data/lib/pwn/ai/agent/swarm.rb +72 -36
  50. data/lib/pwn/ai/agent/task_summarizer.rb +165 -36
  51. data/lib/pwn/ai/agent/tool_guard.rb +105 -6
  52. data/lib/pwn/ai/agent/transparent_browser.rb +4 -1
  53. data/lib/pwn/ai/agent/turn_finalizer.rb +41 -21
  54. data/lib/pwn/ai/agent/vuln_gen.rb +6 -3
  55. data/lib/pwn/ai/agent.rb +4 -0
  56. data/lib/pwn/ai/anthropic.rb +41 -7
  57. data/lib/pwn/ai/gemini.rb +21 -11
  58. data/lib/pwn/ai/grok.rb +44 -6
  59. data/lib/pwn/ai/http_retry.rb +40 -12
  60. data/lib/pwn/ai/ollama.rb +19 -10
  61. data/lib/pwn/ai/open_ai.rb +81 -30
  62. data/lib/pwn/ai/open_web_ui.rb +20 -14
  63. data/lib/pwn/ai/red_team/agent_protocol_abuse.rb +7 -1
  64. data/lib/pwn/ai/red_team/data_and_model_poisoning.rb +7 -1
  65. data/lib/pwn/ai/red_team/excessive_agency.rb +7 -1
  66. data/lib/pwn/ai/red_team/hidden_context_exposure.rb +7 -1
  67. data/lib/pwn/ai/red_team/insecure_output_handling.rb +7 -1
  68. data/lib/pwn/ai/red_team/jailbreak.rb +7 -1
  69. data/lib/pwn/ai/red_team/memory_poisoning.rb +7 -1
  70. data/lib/pwn/ai/red_team/multimodal_injection.rb +7 -1
  71. data/lib/pwn/ai/red_team/overreliance.rb +7 -1
  72. data/lib/pwn/ai/red_team/payload_splitting.rb +7 -1
  73. data/lib/pwn/ai/red_team/prompt_injection.rb +7 -1
  74. data/lib/pwn/ai/red_team/rag_poisoning.rb +7 -1
  75. data/lib/pwn/ai/red_team/sensitive_information_disclosure.rb +7 -1
  76. data/lib/pwn/ai/red_team/supply_chain.rb +7 -1
  77. data/lib/pwn/ai/red_team/system_prompt_extraction.rb +7 -1
  78. data/lib/pwn/ai/red_team/test_case_engine.rb +12 -9
  79. data/lib/pwn/ai/red_team/token_smuggling.rb +7 -1
  80. data/lib/pwn/ai/red_team/unbounded_consumption.rb +7 -1
  81. data/lib/pwn/ai/red_team/vector_and_embedding_weaknesses.rb +7 -1
  82. data/lib/pwn/ai/red_team.rb +4 -0
  83. data/lib/pwn/ai.rb +4 -0
  84. data/lib/pwn/aws/acm.rb +5 -2
  85. data/lib/pwn/aws/api_gateway.rb +10 -7
  86. data/lib/pwn/aws/app_stream.rb +5 -2
  87. data/lib/pwn/aws/application_auto_scaling.rb +5 -2
  88. data/lib/pwn/aws/application_discovery_service.rb +5 -2
  89. data/lib/pwn/aws/auto_scaling.rb +5 -2
  90. data/lib/pwn/aws/batch.rb +5 -2
  91. data/lib/pwn/aws/budgets.rb +5 -2
  92. data/lib/pwn/aws/cloud_formation.rb +5 -2
  93. data/lib/pwn/aws/cloud_front.rb +7 -4
  94. data/lib/pwn/aws/cloud_hsm.rb +5 -2
  95. data/lib/pwn/aws/cloud_search.rb +5 -2
  96. data/lib/pwn/aws/cloud_search_domain.rb +5 -2
  97. data/lib/pwn/aws/cloud_trail.rb +5 -2
  98. data/lib/pwn/aws/cloud_watch.rb +5 -2
  99. data/lib/pwn/aws/cloud_watch_events.rb +5 -2
  100. data/lib/pwn/aws/cloud_watch_logs.rb +5 -2
  101. data/lib/pwn/aws/code_build.rb +5 -2
  102. data/lib/pwn/aws/code_commit.rb +5 -2
  103. data/lib/pwn/aws/code_deploy.rb +5 -2
  104. data/lib/pwn/aws/code_pipeline.rb +5 -2
  105. data/lib/pwn/aws/cognito_identity.rb +5 -2
  106. data/lib/pwn/aws/cognito_identity_provider.rb +5 -2
  107. data/lib/pwn/aws/cognito_sync.rb +5 -2
  108. data/lib/pwn/aws/config_service.rb +5 -2
  109. data/lib/pwn/aws/data_pipleline.rb +5 -2
  110. data/lib/pwn/aws/database_migration_service.rb +5 -2
  111. data/lib/pwn/aws/device_farm.rb +5 -2
  112. data/lib/pwn/aws/direct_connect.rb +5 -2
  113. data/lib/pwn/aws/directory_service.rb +5 -2
  114. data/lib/pwn/aws/dynamo_db.rb +5 -2
  115. data/lib/pwn/aws/dynamo_db_streams.rb +5 -2
  116. data/lib/pwn/aws/ec2.rb +5 -2
  117. data/lib/pwn/aws/ecr.rb +5 -2
  118. data/lib/pwn/aws/ecs.rb +5 -2
  119. data/lib/pwn/aws/efs.rb +5 -2
  120. data/lib/pwn/aws/elasti_cache.rb +5 -2
  121. data/lib/pwn/aws/elastic_beanstalk.rb +8 -5
  122. data/lib/pwn/aws/elastic_load_balancing.rb +5 -2
  123. data/lib/pwn/aws/elastic_load_balancing_v2.rb +6 -3
  124. data/lib/pwn/aws/elastic_transcoder.rb +5 -2
  125. data/lib/pwn/aws/elasticsearch_service.rb +5 -2
  126. data/lib/pwn/aws/emr.rb +5 -2
  127. data/lib/pwn/aws/firehose.rb +5 -2
  128. data/lib/pwn/aws/game_lift.rb +5 -2
  129. data/lib/pwn/aws/glacier.rb +6 -3
  130. data/lib/pwn/aws/health.rb +5 -2
  131. data/lib/pwn/aws/iam.rb +10 -4
  132. data/lib/pwn/aws/import_export.rb +5 -2
  133. data/lib/pwn/aws/inspector.rb +5 -2
  134. data/lib/pwn/aws/iot.rb +5 -2
  135. data/lib/pwn/aws/iot_data_plane.rb +5 -2
  136. data/lib/pwn/aws/kinesis.rb +5 -2
  137. data/lib/pwn/aws/kinesis_analytics.rb +5 -2
  138. data/lib/pwn/aws/kms.rb +5 -2
  139. data/lib/pwn/aws/lambda.rb +5 -2
  140. data/lib/pwn/aws/lambda_preview.rb +5 -2
  141. data/lib/pwn/aws/lex.rb +5 -2
  142. data/lib/pwn/aws/lightsail.rb +5 -2
  143. data/lib/pwn/aws/machine_learning.rb +5 -2
  144. data/lib/pwn/aws/marketplace_commerce_analytics.rb +5 -2
  145. data/lib/pwn/aws/marketplace_metering.rb +5 -2
  146. data/lib/pwn/aws/ops_works.rb +5 -2
  147. data/lib/pwn/aws/ops_works_cm.rb +5 -2
  148. data/lib/pwn/aws/pinpoint.rb +5 -2
  149. data/lib/pwn/aws/polly.rb +5 -2
  150. data/lib/pwn/aws/rds.rb +5 -2
  151. data/lib/pwn/aws/redshift.rb +5 -2
  152. data/lib/pwn/aws/rekognition.rb +5 -2
  153. data/lib/pwn/aws/route53.rb +5 -2
  154. data/lib/pwn/aws/route53_domains.rb +5 -2
  155. data/lib/pwn/aws/s3.rb +5 -2
  156. data/lib/pwn/aws/service_catalog.rb +5 -2
  157. data/lib/pwn/aws/ses.rb +5 -2
  158. data/lib/pwn/aws/shield.rb +5 -2
  159. data/lib/pwn/aws/simple_db.rb +5 -2
  160. data/lib/pwn/aws/sms.rb +5 -2
  161. data/lib/pwn/aws/snowball.rb +5 -2
  162. data/lib/pwn/aws/sns.rb +5 -2
  163. data/lib/pwn/aws/sqs.rb +5 -2
  164. data/lib/pwn/aws/ssm.rb +5 -2
  165. data/lib/pwn/aws/states.rb +5 -2
  166. data/lib/pwn/aws/storage_gateway.rb +5 -2
  167. data/lib/pwn/aws/sts.rb +4 -1
  168. data/lib/pwn/aws/support.rb +5 -2
  169. data/lib/pwn/aws/swf.rb +5 -2
  170. data/lib/pwn/aws/waf.rb +5 -2
  171. data/lib/pwn/aws/waf_regional.rb +5 -2
  172. data/lib/pwn/aws/workspaces.rb +5 -2
  173. data/lib/pwn/aws/x_ray.rb +5 -2
  174. data/lib/pwn/aws.rb +4 -0
  175. data/lib/pwn/banner/anon.rb +3 -0
  176. data/lib/pwn/banner/bubble.rb +3 -0
  177. data/lib/pwn/banner/cheshire.rb +3 -0
  178. data/lib/pwn/banner/code_cave.rb +3 -0
  179. data/lib/pwn/banner/dont_panic.rb +3 -0
  180. data/lib/pwn/banner/f_society.rb +3 -0
  181. data/lib/pwn/banner/fork_bomb.rb +3 -0
  182. data/lib/pwn/banner/jmp_esp.rb +3 -0
  183. data/lib/pwn/banner/matrix.rb +5 -1
  184. data/lib/pwn/banner/ninja.rb +3 -0
  185. data/lib/pwn/banner/off_the_air.rb +3 -0
  186. data/lib/pwn/banner/pirate.rb +3 -0
  187. data/lib/pwn/banner/radare2.rb +3 -0
  188. data/lib/pwn/banner/radare2_ai.rb +3 -0
  189. data/lib/pwn/banner/white_rabbit.rb +3 -0
  190. data/lib/pwn/banner.rb +6 -2
  191. data/lib/pwn/blockchain/btc.rb +8 -3
  192. data/lib/pwn/blockchain/eth.rb +10 -3
  193. data/lib/pwn/blockchain.rb +4 -0
  194. data/lib/pwn/bounty/lifecycle_authz_replay.rb +46 -27
  195. data/lib/pwn/bounty.rb +4 -0
  196. data/lib/pwn/config.rb +79 -13
  197. data/lib/pwn/cron.rb +297 -20
  198. data/lib/pwn/driver.rb +2 -18
  199. data/lib/pwn/ffi/adalm_pluto.rb +65 -11
  200. data/lib/pwn/ffi/fftw.rb +31 -6
  201. data/lib/pwn/ffi/hack_rf.rb +59 -8
  202. data/lib/pwn/ffi/liquid.rb +63 -10
  203. data/lib/pwn/ffi/rtl_sdr.rb +35 -5
  204. data/lib/pwn/ffi/soapy_sdr.rb +60 -10
  205. data/lib/pwn/ffi/stdio.rb +5 -8
  206. data/lib/pwn/ffi/volk.rb +36 -7
  207. data/lib/pwn/ffi.rb +12 -0
  208. data/lib/pwn/memory.rb +136 -16
  209. data/lib/pwn/memory_index.rb +34 -19
  210. data/lib/pwn/migrate.rb +34 -24
  211. data/lib/pwn/module_skills.rb +39 -8
  212. data/lib/pwn/plugins/aflplusplus.rb +52 -0
  213. data/lib/pwn/plugins/android.rb +65 -245
  214. data/lib/pwn/plugins/artifact_registry.rb +71 -0
  215. data/lib/pwn/plugins/assembly.rb +9 -4
  216. data/lib/pwn/plugins/authentication_helper.rb +8 -5
  217. data/lib/pwn/plugins/baresip.rb +59 -12
  218. data/lib/pwn/plugins/basic_auth.rb +9 -3
  219. data/lib/pwn/plugins/beef.rb +28 -18
  220. data/lib/pwn/plugins/binary_parser.rb +133 -0
  221. data/lib/pwn/plugins/black_duck_binary_analysis.rb +63 -39
  222. data/lib/pwn/plugins/burp_suite.rb +98 -68
  223. data/lib/pwn/plugins/bus_pirate.rb +15 -8
  224. data/lib/pwn/plugins/char.rb +33 -3
  225. data/lib/pwn/plugins/credential_attack.rb +99 -0
  226. data/lib/pwn/plugins/credit_card.rb +6 -1
  227. data/lib/pwn/plugins/dao_ldap.rb +19 -13
  228. data/lib/pwn/plugins/dao_mongo.rb +11 -5
  229. data/lib/pwn/plugins/dao_postgres.rb +28 -19
  230. data/lib/pwn/plugins/dao_sqlite3.rb +15 -6
  231. data/lib/pwn/plugins/defect_dojo.rb +38 -22
  232. data/lib/pwn/plugins/detect_os.rb +5 -0
  233. data/lib/pwn/plugins/doctor.rb +149 -0
  234. data/lib/pwn/plugins/ein.rb +3 -0
  235. data/lib/pwn/plugins/exploit_dev.rb +264 -0
  236. data/lib/pwn/plugins/file_fu.rb +11 -8
  237. data/lib/pwn/plugins/frida.rb +61 -0
  238. data/lib/pwn/plugins/fuzz.rb +9 -6
  239. data/lib/pwn/plugins/gdb.rb +95 -0
  240. data/lib/pwn/plugins/git.rb +19 -14
  241. data/lib/pwn/plugins/github.rb +38 -15
  242. data/lib/pwn/plugins/google_workspace.rb +188 -45
  243. data/lib/pwn/plugins/hacker_one.rb +159 -35
  244. data/lib/pwn/plugins/hunter.rb +6 -3
  245. data/lib/pwn/plugins/ip_info.rb +9 -4
  246. data/lib/pwn/plugins/irc.rb +28 -15
  247. data/lib/pwn/plugins/jenkins.rb +65 -57
  248. data/lib/pwn/plugins/jira_data_center.rb +30 -22
  249. data/lib/pwn/plugins/jobs.rb +109 -0
  250. data/lib/pwn/plugins/json_pathify.rb +9 -5
  251. data/lib/pwn/plugins/log.rb +113 -13
  252. data/lib/pwn/plugins/mail_agent.rb +87 -79
  253. data/lib/pwn/plugins/metasploit.rb +11 -6
  254. data/lib/pwn/plugins/monkey_patch.rb +3 -0
  255. data/lib/pwn/plugins/msr206.rb +42 -28
  256. data/lib/pwn/plugins/nessus_cloud.rb +44 -4
  257. data/lib/pwn/plugins/nexpose_vuln_scan.rb +40 -24
  258. data/lib/pwn/plugins/nmap_it.rb +14 -34
  259. data/lib/pwn/plugins/nuclei.rb +57 -0
  260. data/lib/pwn/plugins/oauth2.rb +11 -5
  261. data/lib/pwn/plugins/ocr.rb +3 -0
  262. data/lib/pwn/plugins/open_api.rb +5 -2
  263. data/lib/pwn/plugins/openvas.rb +33 -25
  264. data/lib/pwn/plugins/packet.rb +152 -31
  265. data/lib/pwn/plugins/pdf_parse.rb +5 -2
  266. data/lib/pwn/plugins/pony.rb +86 -1
  267. data/lib/pwn/plugins/process_tube.rb +120 -0
  268. data/lib/pwn/plugins/ps.rb +7 -1
  269. data/lib/pwn/plugins/pwn_logger.rb +6 -2
  270. data/lib/pwn/plugins/rabbit_mq.rb +12 -7
  271. data/lib/pwn/plugins/radare2.rb +253 -0
  272. data/lib/pwn/plugins/recon.rb +161 -0
  273. data/lib/pwn/plugins/repl.rb +122 -1
  274. data/lib/pwn/plugins/scannable_codes.rb +5 -1
  275. data/lib/pwn/plugins/serial.rb +24 -14
  276. data/lib/pwn/plugins/shodan.rb +54 -35
  277. data/lib/pwn/plugins/slack_client.rb +11 -6
  278. data/lib/pwn/plugins/sock.rb +16 -8
  279. data/lib/pwn/plugins/spider.rb +5 -2
  280. data/lib/pwn/plugins/sqlmap.rb +49 -0
  281. data/lib/pwn/plugins/ssn.rb +3 -0
  282. data/lib/pwn/plugins/thread_pool.rb +6 -9
  283. data/lib/pwn/plugins/tor.rb +9 -4
  284. data/lib/pwn/plugins/transparent_browser.rb +62 -107
  285. data/lib/pwn/plugins/tty_spinner.rb +16 -2
  286. data/lib/pwn/plugins/twitter_api.rb +6 -2
  287. data/lib/pwn/plugins/uri_scheme.rb +4 -1
  288. data/lib/pwn/plugins/vault.rb +12 -3
  289. data/lib/pwn/plugins/vin.rb +24 -12
  290. data/lib/pwn/plugins/voice.rb +7 -2
  291. data/lib/pwn/plugins/volatility.rb +48 -0
  292. data/lib/pwn/plugins/vsphere.rb +9 -5
  293. data/lib/pwn/plugins/xxd.rb +12 -43
  294. data/lib/pwn/plugins/zaproxy.rb +30 -16
  295. data/lib/pwn/plugins.rb +19 -0
  296. data/lib/pwn/reports/ai_red_team.rb +6 -2
  297. data/lib/pwn/reports/csv.rb +8 -1
  298. data/lib/pwn/reports/fuzz.rb +5 -2
  299. data/lib/pwn/reports/html.rb +8 -1
  300. data/lib/pwn/reports/html_footer.rb +4 -3
  301. data/lib/pwn/reports/html_header.rb +6 -2
  302. data/lib/pwn/reports/json.rb +8 -1
  303. data/lib/pwn/reports/markdown.rb +8 -1
  304. data/lib/pwn/reports/pdf.rb +8 -1
  305. data/lib/pwn/reports/phone.rb +5 -2
  306. data/lib/pwn/reports/sast.rb +6 -2
  307. data/lib/pwn/reports/uri_buster.rb +5 -2
  308. data/lib/pwn/reports/xml.rb +8 -1
  309. data/lib/pwn/reports.rb +19 -0
  310. data/lib/pwn/sast/amqp_connect_as_guest.rb +9 -3
  311. data/lib/pwn/sast/apache_file_system_util_api.rb +9 -3
  312. data/lib/pwn/sast/aws.rb +9 -3
  313. data/lib/pwn/sast/banned_function_calls_c.rb +9 -3
  314. data/lib/pwn/sast/base64.rb +9 -3
  315. data/lib/pwn/sast/beef_hook.rb +9 -3
  316. data/lib/pwn/sast/cmd_execution_go_lang.rb +9 -3
  317. data/lib/pwn/sast/cmd_execution_java.rb +9 -3
  318. data/lib/pwn/sast/cmd_execution_python.rb +9 -3
  319. data/lib/pwn/sast/cmd_execution_ruby.rb +9 -3
  320. data/lib/pwn/sast/cmd_execution_scala.rb +9 -3
  321. data/lib/pwn/sast/csrf.rb +9 -3
  322. data/lib/pwn/sast/deserial_java.rb +9 -3
  323. data/lib/pwn/sast/emoticon.rb +9 -3
  324. data/lib/pwn/sast/eval.rb +9 -3
  325. data/lib/pwn/sast/factory.rb +9 -3
  326. data/lib/pwn/sast/http_authorization_header.rb +9 -3
  327. data/lib/pwn/sast/inner_html.rb +9 -3
  328. data/lib/pwn/sast/keystore.rb +9 -3
  329. data/lib/pwn/sast/local_storage.rb +9 -3
  330. data/lib/pwn/sast/location_hash.rb +9 -3
  331. data/lib/pwn/sast/log4j.rb +9 -3
  332. data/lib/pwn/sast/logger.rb +9 -3
  333. data/lib/pwn/sast/md5.rb +9 -3
  334. data/lib/pwn/sast/outer_html.rb +9 -3
  335. data/lib/pwn/sast/padding_oracle.rb +9 -3
  336. data/lib/pwn/sast/password.rb +9 -3
  337. data/lib/pwn/sast/php_input_mechanisms.rb +9 -3
  338. data/lib/pwn/sast/php_type_juggling.rb +9 -3
  339. data/lib/pwn/sast/pom_version.rb +9 -3
  340. data/lib/pwn/sast/port.rb +9 -3
  341. data/lib/pwn/sast/post_message.rb +9 -3
  342. data/lib/pwn/sast/private_key.rb +9 -3
  343. data/lib/pwn/sast/redirect.rb +9 -3
  344. data/lib/pwn/sast/redos.rb +9 -3
  345. data/lib/pwn/sast/shell.rb +9 -3
  346. data/lib/pwn/sast/signature.rb +9 -3
  347. data/lib/pwn/sast/sql.rb +9 -3
  348. data/lib/pwn/sast/ssl.rb +9 -3
  349. data/lib/pwn/sast/sudo.rb +9 -3
  350. data/lib/pwn/sast/task_tag.rb +9 -3
  351. data/lib/pwn/sast/test_case_engine.rb +11 -7
  352. data/lib/pwn/sast/throw_errors.rb +9 -3
  353. data/lib/pwn/sast/token.rb +9 -3
  354. data/lib/pwn/sast/type_script_type_juggling.rb +9 -3
  355. data/lib/pwn/sast/use_after_free.rb +9 -3
  356. data/lib/pwn/sast/version.rb +9 -3
  357. data/lib/pwn/sast/window_location_hash.rb +9 -3
  358. data/lib/pwn/sast.rb +4 -0
  359. data/lib/pwn/sdr/decoder/adsb.rb +36 -5
  360. data/lib/pwn/sdr/decoder/apt.rb +9 -6
  361. data/lib/pwn/sdr/decoder/base.rb +74 -22
  362. data/lib/pwn/sdr/decoder/bluetooth.rb +17 -5
  363. data/lib/pwn/sdr/decoder/dect.rb +12 -3
  364. data/lib/pwn/sdr/decoder/dsp.rb +229 -39
  365. data/lib/pwn/sdr/decoder/flex.rb +59 -11
  366. data/lib/pwn/sdr/decoder/gps.rb +12 -3
  367. data/lib/pwn/sdr/decoder/gsm.rb +24 -4
  368. data/lib/pwn/sdr/decoder/iridium.rb +12 -3
  369. data/lib/pwn/sdr/decoder/lora.rb +13 -4
  370. data/lib/pwn/sdr/decoder/lte.rb +27 -3
  371. data/lib/pwn/sdr/decoder/morse.rb +12 -3
  372. data/lib/pwn/sdr/decoder/p25.rb +12 -3
  373. data/lib/pwn/sdr/decoder/pager.rb +8 -5
  374. data/lib/pwn/sdr/decoder/pocsag.rb +29 -9
  375. data/lib/pwn/sdr/decoder/rds.rb +14 -8
  376. data/lib/pwn/sdr/decoder/rfid.rb +12 -3
  377. data/lib/pwn/sdr/decoder/rtl433.rb +12 -3
  378. data/lib/pwn/sdr/decoder/rtty.rb +8 -5
  379. data/lib/pwn/sdr/decoder/wifi.rb +12 -3
  380. data/lib/pwn/sdr/decoder/zigbee.rb +12 -3
  381. data/lib/pwn/sdr/decoder.rb +9 -0
  382. data/lib/pwn/sdr/flipper_zero.rb +17 -10
  383. data/lib/pwn/sdr/frequency_allocation.rb +4 -1
  384. data/lib/pwn/sdr/gqrx.rb +178 -119
  385. data/lib/pwn/sdr/rfidler.rb +4 -1
  386. data/lib/pwn/sdr/son_micro_rfid.rb +37 -24
  387. data/lib/pwn/sdr.rb +14 -0
  388. data/lib/pwn/sessions.rb +86 -16
  389. data/lib/pwn/setup.rb +94 -37
  390. data/lib/pwn/version.rb +1 -1
  391. data/lib/pwn/www/app_cobalt_io.rb +11 -5
  392. data/lib/pwn/www/bing.rb +10 -5
  393. data/lib/pwn/www/bug_crowd.rb +11 -5
  394. data/lib/pwn/www/checkip.rb +8 -4
  395. data/lib/pwn/www/coinbase_pro.rb +11 -5
  396. data/lib/pwn/www/duckduckgo.rb +12 -6
  397. data/lib/pwn/www/facebook.rb +11 -5
  398. data/lib/pwn/www/github.rb +11 -5
  399. data/lib/pwn/www/google.rb +11 -5
  400. data/lib/pwn/www/hacker_one.rb +20 -9
  401. data/lib/pwn/www/linkedin.rb +11 -5
  402. data/lib/pwn/www/pandora.rb +11 -5
  403. data/lib/pwn/www/pastebin.rb +9 -4
  404. data/lib/pwn/www/paypal.rb +19 -11
  405. data/lib/pwn/www/synack.rb +11 -5
  406. data/lib/pwn/www/torch.rb +13 -8
  407. data/lib/pwn/www/trading_view.rb +11 -5
  408. data/lib/pwn/www/twitter.rb +11 -5
  409. data/lib/pwn/www/uber.rb +11 -5
  410. data/lib/pwn/www/upwork.rb +11 -5
  411. data/lib/pwn/www/wayback_machine.rb +12 -6
  412. data/lib/pwn/www/youtube.rb +10 -5
  413. data/lib/pwn/www.rb +4 -0
  414. data/spec/conventions_spec.rb +118 -2
  415. data/spec/lib/pwn/ai/agent/reward_spec.rb +9 -0
  416. data/spec/lib/pwn/plugins/aflplusplus_spec.rb +13 -0
  417. data/spec/lib/pwn/plugins/artifact_registry_spec.rb +13 -0
  418. data/spec/lib/pwn/plugins/binary_parser_spec.rb +21 -0
  419. data/spec/lib/pwn/plugins/credential_attack_spec.rb +13 -0
  420. data/spec/lib/pwn/plugins/doctor_spec.rb +23 -0
  421. data/spec/lib/pwn/plugins/exploit_dev_spec.rb +23 -0
  422. data/spec/lib/pwn/plugins/frida_spec.rb +13 -0
  423. data/spec/lib/pwn/plugins/gdb_spec.rb +13 -0
  424. data/spec/lib/pwn/plugins/jobs_spec.rb +13 -0
  425. data/spec/lib/pwn/plugins/nuclei_spec.rb +13 -0
  426. data/spec/lib/pwn/plugins/process_tube_spec.rb +13 -0
  427. data/spec/lib/pwn/plugins/radare2_spec.rb +13 -0
  428. data/spec/lib/pwn/plugins/recon_spec.rb +26 -0
  429. data/spec/lib/pwn/plugins/sqlmap_spec.rb +13 -0
  430. data/spec/lib/pwn/plugins/volatility_spec.rb +13 -0
  431. data/third_party/pwn_rdoc.jsonl +126 -5
  432. metadata +47 -3
  433. data/etc/default_skills/pwn/memory_index/references/urls.md +0 -4
  434. data/etc/default_skills/pwn/plugins/transparent_browser/references/urls.md +0 -3
@@ -538,91 +538,110 @@ module PWN
538
538
 
539
539
  public_class_method def self.help
540
540
  puts "USAGE:
541
- services_by_ips = #{self}.services_by_ips(
542
- api_key: 'required - shodan api key',
541
+ # Run services by ips and return its result
542
+ #{self}.services_by_ips(
543
+ api_key: 'required - required shodan api key',
543
544
  target_ips: 'required - comma-delimited list of ip addresses to target'
544
545
  )
545
546
 
546
- query_result_totals = PWN::Plugins::Shodan.query_result_totals(
547
- api_key: 'required shodan api key',
547
+ # Run query result totals and return its result
548
+ #{self}.query_result_totals(
549
+ api_key: 'required - required shodan api key',
548
550
  query: 'required - shodan search query',
549
551
  facets: 'optional - comma-separated list of properties to get summary information'
550
552
  )
551
553
 
552
- search_results = #{self}.search(
553
- api_key: 'required shodan api key',
554
+ # Run a search using the open session.
555
+ #{self}.search(
556
+ api_key: 'required - required shodan api key',
554
557
  query: 'required - shodan search query',
555
558
  facets: 'optional - comma-separated list of properties to get summary information'
556
559
  )
557
560
 
558
- tokens_result = #{self}.tokens(
559
- api_key: 'required shodan api key',
560
- query: 'required - shodan search query',
561
+ # Run tokens and return its result
562
+ #{self}.tokens(
563
+ api_key: 'required - required shodan api key',
564
+ query: 'required - shodan search query'
561
565
  )
562
566
 
563
- ports_shodan_crawls = #{self}.ports_shodan_crawls(
564
- api_key: 'required shodan api key'
567
+ # Run ports shodan crawls and return its result
568
+ #{self}.ports_shodan_crawls(
569
+ api_key: 'required - required shodan api key'
565
570
  )
566
571
 
567
- protocols = #{self}.list_on_demand_scan_protocols(
568
- api_key: 'required shodan api key'
572
+ # Run list on demand scan protocols and return its result
573
+ #{self}.list_on_demand_scan_protocols(
574
+ api_key: 'required - required shodan api key'
569
575
  )
570
576
 
571
- scan_network_response = #{self}.scan_network(
572
- api_key: 'required shodan api key',
577
+ # Run scan network and return its result
578
+ #{self}.scan_network(
579
+ api_key: 'required - required shodan api key',
573
580
  target_ips: 'required - comma-delimited list of ip addresses to target'
574
581
  )
575
582
 
576
- scan_internet_response = #{self}.scan_internet(
577
- api_key: 'required shodan api key',
583
+ # Run scan internet and return its result
584
+ #{self}.scan_internet(
585
+ api_key: 'required - required shodan api key',
578
586
  port: 'required - port to scan (see #ports_shodan_crawls for list)',
579
587
  protocol: 'required - supported shodan protocol (see #list_on_demand_scan_protocols for list)'
580
588
  )
581
589
 
582
- scan_status_result = #{self}.scan_status(
583
- api_key: 'required shodan api key',
584
- scan_id: 'required - unique ID returned by #scan_network',
590
+ # Run scan status and return its result
591
+ #{self}.scan_status(
592
+ api_key: 'required - required shodan api key',
593
+ scan_id: 'required - unique ID returned by #scan_network'
585
594
  )
586
595
 
587
- services_shodan_crawls = #{self}.services_shodan_crawls(
588
- api_key: 'required shodan api key'
596
+ # Run services shodan crawls and return its result
597
+ #{self}.services_shodan_crawls(
598
+ api_key: 'required - required shodan api key'
589
599
  )
590
600
 
591
- saved_search_queries_result = #{self}.saved_search_queries(
592
- api_key: 'required shodan api key',
601
+ # Run saved search queries and return its result
602
+ #{self}.saved_search_queries(
603
+ api_key: 'required - required shodan api key',
593
604
  page: 'optional - page number to iterate over results (each page contains 10 items)',
594
605
  sort: 'optional - sort results by available parameters :votes|:timestamp',
595
606
  order: 'optional - sort :asc|:desc (ascending or descending)'
596
607
  )
597
608
 
598
- most_popular_tags_result = #{self}.most_popular_tags(
599
- api_key: 'required shodan api key',
609
+ # Run most popular tags and return its result
610
+ #{self}.most_popular_tags(
611
+ api_key: 'required - required shodan api key',
600
612
  result_count: 'optional - number of results to return (defaults to 10)'
601
613
  )
602
614
 
603
- my_profile = #{self}.my_profile(
604
- api_key: 'required shodan api key'
615
+ # Run my profile and return its result
616
+ #{self}.my_profile(
617
+ api_key: 'required - required shodan api key'
605
618
  )
606
619
 
607
- my_pub_ip = #{self}.my_pub_ip(
608
- api_key: 'required shodan api key'
620
+ # Run my pub ip and return its result
621
+ #{self}.my_pub_ip(
622
+ api_key: 'required - required shodan api key'
609
623
  )
610
624
 
611
- api_info = #{self}.api_info(
612
- api_key: 'required shodan api key'
625
+ # Run api info and return its result
626
+ #{self}.api_info(
627
+ api_key: 'required - required shodan api key'
613
628
  )
614
629
 
615
- honeypot_probability_scores = #{self}.honeypot_probability_scores(
616
- api_key: 'required shodan api key',
630
+ # Run honeypot probability scores and return its result
631
+ #{self}.honeypot_probability_scores(
632
+ api_key: 'required - required shodan api key',
617
633
  target_ips: 'required - comma-delimited list of ip addresses to target'
618
634
  )
619
635
 
620
- uri_arr = #{self}.get_uris(
636
+ # Run get uris and return its result
637
+ #{self}.get_uris(
621
638
  search_results: 'required - search_results object returned from #search method'
622
639
  )
623
640
 
641
+ # Print the AUTHOR(S) string for this module.
624
642
  #{self}.authors
625
643
  "
644
+ constants.sort
626
645
  end
627
646
  end
628
647
  end
@@ -82,22 +82,27 @@ module PWN
82
82
 
83
83
  public_class_method def self.help
84
84
  puts "USAGE:
85
- slack_obj = #{self}.login(
86
- api_token: 'optional slack api token (will prompt if blank)'
85
+ # Run login and return its result
86
+ #{self}.login(
87
+ api_token: 'required - required slack api token'
87
88
  )
88
89
 
90
+ # Run post message and return its result
89
91
  #{self}.post_message(
90
- slack_obj: 'required slack_obj returned from login method',
91
- channel: 'required #channel to post message',
92
- message: 'required message to post'
92
+ slack_obj: 'required - required slack_obj returned from login method',
93
+ channel: 'required - required #channel to post message',
94
+ message: 'required - required message to post'
93
95
  )
94
96
 
97
+ # Run logout and return its result
95
98
  #{self}.logout(
96
- slack_obj: 'required slack_obj returned from login method'
99
+ slack_obj: 'required - required slack_obj returned from login method'
97
100
  )
98
101
 
102
+ # Print the AUTHOR(S) string for this module.
99
103
  #{self}.authors
100
104
  "
105
+ constants.sort
101
106
  end
102
107
  end
103
108
  end
@@ -319,43 +319,51 @@ module PWN
319
319
 
320
320
  public_class_method def self.help
321
321
  puts "USAGE:
322
- sock_obj = #{self}.connect(
322
+ # Run connect and return its result
323
+ #{self}.connect(
323
324
  target: 'required - target host or ip',
324
325
  port: 'required - target port',
325
- protocol: 'optional - :tcp || :udp (defaults to tcp)',
326
+ protocol: 'optional - :tcp || :udp (defaults to :tcp)',
326
327
  tls: 'optional - boolean connect to target socket using TLS (defaults to false)'
327
328
  )
328
329
 
329
- port = #{self}.get_random_unused_port(
330
+ # Run get random unused port and return its result
331
+ #{self}.get_random_unused_port(
330
332
  server_ip: 'optional - target host or ip to check (Defaults to 127.0.0.1)',
331
333
  protocol: 'optional - :tcp || :udp (defaults to tcp)'
332
334
  )
333
335
 
336
+ # Run check port in use and return its result
334
337
  #{self}.check_port_in_use(
335
- server_ip: 'optional - target host or ip to check (Defaults to 127.0.0.1)',
336
338
  port: 'required - target port',
339
+ server_ip: 'optional - target host or ip to check (Defaults to 127.0.0.1)',
337
340
  protocol: 'optional - :tcp || :udp (defaults to tcp)'
338
341
  )
339
342
 
340
- listen_obj = #{self}.listen(
343
+ # Run listen and return its result
344
+ #{self}.listen(
341
345
  port: 'required - target port',
342
- server_ip: 'optional - target host or ip to listen (Defaults to 127.0.0.1')',
346
+ server_ip: 'optional - target host or ip to listen (Defaults to 127.0.0.1)',
343
347
  protocol: 'optional - :tcp || :udp (defaults to tcp)',
344
348
  tls: 'optional - boolean listen on TLS-enabled socket (defaults to false)',
345
349
  detach: 'optional - boolean to detach listener to background (defaults to false)'
346
350
  )
347
351
 
348
- cert_obj = #{self}.get_tls_cert(
352
+ # Run get tls cert and return its result
353
+ #{self}.get_tls_cert(
349
354
  target: 'required - target host or ip',
350
355
  port: 'optional - target port (defaults to 443)'
351
356
  )
352
357
 
353
- sock_obj = #{self}.disconnect(
358
+ # Run disconnect and return its result
359
+ #{self}.disconnect(
354
360
  sock_obj: 'required - sock_obj returned from #connect method'
355
361
  )
356
362
 
363
+ # Print the AUTHOR(S) string for this module.
357
364
  #{self}.authors
358
365
  "
366
+ constants.sort
359
367
  end
360
368
  end
361
369
  end
@@ -63,15 +63,18 @@ module PWN
63
63
  # Display Usage for this Module
64
64
 
65
65
  public_class_method def self.help
66
- puts %{USAGE:
66
+ puts "USAGE:
67
+ # Run crawl and return its result
67
68
  #{self}.crawl(
68
69
  target_fqdn: 'required - target fqdn to spider',
69
70
  results_path: 'required - path to save spider results',
70
71
  proxy: 'optional - proxy to spider through e.g. http://127.0.0.1:8080'
71
72
  )
72
73
 
74
+ # Print the AUTHOR(S) string for this module.
73
75
  #{self}.authors
74
- }
76
+ "
77
+ constants.sort
75
78
  end
76
79
  end
77
80
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+
5
+ module PWN
6
+ module Plugins
7
+ # sqlmap wrapper to pair with SAST SQL detection.
8
+ module Sqlmap
9
+ public_class_method def self.required_bins
10
+ %w[sqlmap]
11
+ end
12
+
13
+ public_class_method def self.run(opts = {})
14
+ PWN::Plugins::Doctor.require_bin!(name: 'sqlmap')
15
+ url = opts[:url].to_s
16
+ raise 'ERROR: url is required' if url.empty?
17
+
18
+ cmd = ['sqlmap', '-u', url, '--batch', '--level', (opts[:level] || 1).to_s]
19
+ cmd += ['--data', opts[:data].to_s] if opts[:data]
20
+ cmd << '--dbs' if opts[:dbs]
21
+ stdout, stderr, status = Open3.capture3(*cmd)
22
+ { stdout: stdout, stderr: stderr, exit: status.exitstatus }
23
+ end
24
+
25
+ public_class_method def self.authors
26
+ "AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
27
+ end
28
+
29
+ public_class_method def self.help
30
+ puts "USAGE:
31
+ # List host binaries this module expects to be installed.
32
+ #{self}.required_bins
33
+
34
+ # Run run and return its result
35
+ #{self}.run(
36
+ url: 'required - HTTP(S) URL',
37
+ level: 'optional - level value consumed by #run',
38
+ data: 'optional - data value consumed by #run',
39
+ dbs: 'optional - dbs value consumed by #run'
40
+ )
41
+
42
+ # Print the AUTHOR(S) string for this module.
43
+ #{self}.authors
44
+ "
45
+ constants.sort
46
+ end
47
+ end
48
+ end
49
+ end
@@ -40,12 +40,15 @@ module PWN
40
40
 
41
41
  public_class_method def self.help
42
42
  puts "USAGE:
43
+ # Run generate and return its result
43
44
  #{self}.generate(
44
45
  count: 'required - number of SSN numbers to generate'
45
46
  )
46
47
 
48
+ # Print the AUTHOR(S) string for this module.
47
49
  #{self}.authors
48
50
  "
51
+ constants.sort
49
52
  end
50
53
  end
51
54
  end
@@ -60,20 +60,17 @@ module PWN
60
60
 
61
61
  public_class_method def self.help
62
62
  puts "USAGE:
63
+ # arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
63
64
  #{self}.fill(
64
- enumerable_array. => 'required array for proper thread pool assignment',
65
- max_threads: 'optional number of threads in the thread pool (defaults to 9)',
66
- detach: 'optional boolean to detach threads (defaults to false)'
65
+ enumerable_array: 'required - required array for proper thread pool assignment',
66
+ max_threads: 'optional - optional number of threads in the thread pool (defaults to 9)',
67
+ detach: 'optional - optional boolean to detach threads (defaults to false)'
67
68
  )
68
69
 
69
- Example:
70
- arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
71
- #{self}.fill(enumerable_array: arr, max_threads: 9) do |integer|
72
- puts integer
73
- end
74
-
70
+ # Print the AUTHOR(S) string for this module.
75
71
  #{self}.authors
76
72
  "
73
+ constants.sort
77
74
  end
78
75
  end
79
76
  end
@@ -248,25 +248,30 @@ module PWN
248
248
 
249
249
  public_class_method def self.help
250
250
  puts "USAGE:
251
- tor_obj = #{self}.start(
251
+ # Run start and return its result
252
+ #{self}.start(
252
253
  ip: 'optional - IP address to listen (default: 127.0.0.1)',
253
- port: 'optional - socks port to listen (default: 9050)',
254
- ctrl_port: 'optional - tor control port to listen (default: 9051)',
255
- net: 'optional - CIDR notation to accept connections (default: 127.0.0.1/32)',
254
+ port: 'optional - socks port to listen (default: 1024-65535)',
255
+ ctrl_port: 'optional - tor control port to listen (default: 1024-65535)',
256
+ net: 'optional - CIDR notation to accept connections (default: 127.0.0.0.1/32)',
256
257
  data_dir: 'optional - directory to keep tor session data (default: /tmp/tor_pwn-TIMESTAMP)'
257
258
  )
258
259
 
260
+ # Run switch exit node and return its result
259
261
  #{self}.switch_exit_node(
260
262
  tor_obj: 'required - tor_obj returned from #start method',
261
263
  response_timeout: 'optional - float in seconds to timeout (default: 3.0)'
262
264
  )
263
265
 
266
+ # Run stop and return its result
264
267
  #{self}.stop(
265
268
  tor_obj: 'required - tor_obj returned from #start method'
266
269
  )
267
270
 
271
+ # Print the AUTHOR(S) string for this module.
268
272
  #{self}.authors
269
273
  "
274
+ constants.sort
270
275
  end
271
276
  end
272
277
  end
@@ -1561,188 +1561,143 @@ module PWN
1561
1561
 
1562
1562
  public_class_method def self.help
1563
1563
  puts "USAGE:
1564
- browser_obj1 = #{self}.open(
1564
+ # Open a session or connection and return a handle.
1565
+ #{self}.open(
1565
1566
  browser_type: 'optional - :firefox|:chrome|:headless|:rest|:websocket (defaults to :chrome)',
1566
- proxy: 'optional scheme://proxy_host:port || tor (defaults to nil)',
1567
+ proxy: 'optional - scheme://proxy_host:port || tor (defaults to nil)',
1567
1568
  devtools: 'optional - boolean (defaults to false)'
1568
1569
  )
1569
- browser = browser_obj1[:browser]
1570
- puts browser.public_methods
1571
-
1572
- ********************************************************
1573
- * DevTools Interaction
1574
- * All DevTools Commands can be found here:
1575
- * https://chromedevtools.github.io/devtools-protocol/
1576
- * Examples
1577
- devtools = browser_obj1[:devtools]
1578
- puts devtools.public_methods
1579
- puts devtools.instance_variables
1580
- puts devtools.instance_variable_get('@session_id')
1581
-
1582
- websocket = devtools.instance_variable_get('@ws')
1583
- puts websocket.public_methods
1584
- puts websocket.instance_variables
1585
- puts websocket.instance_variable_get('@messages')
1586
-
1587
- * Tracing
1588
- devtools.send_cmd('Tracing.start')
1589
- devtools.send_cmd('Tracing.requestMemoryDump')
1590
- devtools.send_cmd('Tracing.end')
1591
- puts devtools.instance_variable_get('@messages')
1592
-
1593
- * Network
1594
- devtools.send_cmd('Network.enable')
1595
- last_ws_resp = devtools.instance_variable_get('@messages').last if devtools.instance_variable_get('@messages').last['method'] == 'Network.webSocketFrameReceived'
1596
- puts last_ws_resp
1597
- devtools.send_cmd('Network.disable')
1598
-
1599
- * Debugging DOM and Sending JavaScript to Console
1600
- devtools.send_cmd('Runtime.enable')
1601
- devtools.send_cmd('Console.enable')
1602
- devtools.send_cmd('DOM.enable')
1603
- devtools.send_cmd('Page.enable')
1604
- devtools.send_cmd('Log.enable')
1605
- devtools.send_cmd('Debugger.enable')
1606
- devtools.send_cmd('Debugger.pause')
1607
- step = 1
1608
- next_step = 60
1609
- loop do
1610
- devtools.send_cmd('Console.clearMessages')
1611
- devtools.send_cmd('Log.clear')
1612
- console_events = []
1613
- browser.driver.on_log_event(:console) { |event| console_events.push(event) }
1614
-
1615
- devtools.send_cmd('Debugger.stepInto')
1616
- puts \"Step: \#{step}\"
1617
-
1618
- this_document = devtools.send_cmd('DOM.getDocument')
1619
- puts \"This #document:\\n\#{this_document}\\n\\n\\n\"
1620
-
1621
- console_cmd = {
1622
- expression: 'for(var pop_var in window) { if (window.hasOwnProperty(pop_var) && window[pop_var] != null) console.log(pop_var + \" = \" + window[pop_var]); }'
1623
- }
1624
- puts devtools.send_cmd('Runtime.evaluate', **console_cmd)
1625
-
1626
- print '-' * 180
1627
- print \"\\n\"
1628
- console_events.each do |event|
1629
- puts event.args
1630
- end
1631
- puts \"Console Response Length: \#{console_events.length}\"
1632
- console_events_digest = OpenSSL::Digest::SHA256.hexdigest(
1633
- console_events.inspect
1634
- )
1635
- puts \"Console Events Array SHA256 Digest: \#{console_events_digest}\"
1636
- print '-' * 180
1637
- puts \"\\n\\n\\n\"
1638
-
1639
- print \"Next Step in \"
1640
- next_step.downto(1) {|n| print \"\#{n} \"; sleep 1 }
1641
- puts 'READY!'
1642
- step += 1
1643
- end
1644
-
1645
- devtools.send_cmd('Debugger.disable')
1646
- devtools.send_cmd('Log.disable')
1647
- devtools.send_cmd('Page.disable')
1648
- devtools.send_cmd('DOM.disable')
1649
- devtools.send_cmd('Console.disable')
1650
- devtools.send_cmd('Runtime.disable')
1651
- * End of DevTools Examples
1652
- ********************************************************
1653
1570
 
1654
- browser_obj1 = #{self}.dump_links(
1655
- browser_obj: 'required - browser_obj returned from #open method)'
1571
+ # Run dump links and return its result
1572
+ #{self}.dump_links(
1573
+ browser_obj: 'optional - browser object returned from #open'
1656
1574
  )
1657
1575
 
1658
- browser_obj1 = #{self}.find_elements_by_text(
1659
- browser_obj: 'required - browser_obj returned from #open method)',
1576
+ # Run find elements by text and return its result
1577
+ #{self}.find_elements_by_text(
1578
+ browser_obj: 'optional - browser object returned from #open',
1660
1579
  text: 'required - text to search for in the DOM'
1661
1580
  )
1662
1581
 
1582
+ # Run type as human and return its result
1663
1583
  #{self}.type_as_human(
1664
1584
  string: 'required - string to type as human',
1665
1585
  rand_sleep_float: 'optional - float timing in between keypress (defaults to 0.09)'
1666
- ) {|char| browser_obj1.text_field(name: \"search\").send_keys(char) }
1586
+ )
1667
1587
 
1668
- console_resp = #{self}.console(
1669
- browser_obj: 'required - browser_obj returned from #open method)',
1588
+ # Run console and return its result
1589
+ #{self}.console(
1590
+ browser_obj: 'optional - browser object returned from #open',
1670
1591
  js: 'required - JavaScript expression to evaluate',
1671
1592
  return_to: 'optional - return to :console or :stdout (defaults to :console)'
1672
1593
  )
1673
1594
 
1674
- console_resp = #{self}.view_dom_mutations(
1675
- browser_obj: 'required - browser_obj returned from #open method)',
1595
+ # Run view dom mutations and return its result
1596
+ #{self}.view_dom_mutations(
1597
+ browser_obj: 'required - browser_obj returned from #open method',
1676
1598
  index: 'optional - index of tab to switch to (defaults to active tab)',
1677
- target: 'optional - target JavaScript node to observe (defaults to document.body)'
1599
+ target: 'optional - target JavaScript node to observe (defaults to document.body)',
1600
+ observe_clobbering: 'optional - boolean to enable DOM Clobbering detection (defaults to true)',
1601
+ observe_redirects: 'optional - boolean to enable Insecure Redirect detection (defaults to true)',
1602
+ observe_resources: 'optional - boolean to enable resource load monitoring (defaults to true)'
1678
1603
  )
1679
1604
 
1680
- console_resp = #{self}.hide_dom_mutations(
1681
- browser_obj: 'required - browser_obj returned from #open method)',
1605
+ # Run hide dom mutations and return its result
1606
+ #{self}.hide_dom_mutations(
1607
+ browser_obj: 'optional - browser object returned from #open',
1682
1608
  index: 'optional - index of tab to switch to (defaults to active tab)'
1683
1609
  )
1684
1610
 
1611
+ # Run update about config and return its result
1685
1612
  #{self}.update_about_config(
1686
- browser_obj: 'required - browser_obj returned from #open method)',
1613
+ browser_obj: 'optional - browser object returned from #open',
1687
1614
  key: 'required - key to update in about:config',
1688
1615
  value: 'required - value to set for key in about:config'
1689
1616
  )
1690
1617
 
1691
- tabs = #{self}.list_tabs(
1618
+ # Run list tabs and return its result
1619
+ #{self}.list_tabs(
1692
1620
  browser_obj: 'required - browser_obj returned from #open method)'
1693
1621
  )
1694
1622
 
1695
- tab = #{self}.jmp_tab(
1623
+ # Run jmp tab and return its result
1624
+ #{self}.jmp_tab(
1696
1625
  browser_obj: 'required - browser_obj returned from #open method)',
1697
1626
  index: 'optional - index of tab to switch to (defaults to switching to next tab)',
1698
- keyword: 'optional - keyword in title or url used to switch tabs (defaults to switching to next tab)',
1627
+ keyword: 'optional - keyword in title or url used to switch tabs (defaults to switching to next tab)'
1699
1628
  )
1700
1629
 
1701
- tab = #{self}.new_tab(
1630
+ # Run new tab and return its result
1631
+ #{self}.new_tab(
1702
1632
  browser_obj: 'required - browser_obj returned from #open method)',
1703
1633
  url: 'optional - URL to open in new tab'
1704
1634
  )
1705
1635
 
1706
- tab = #{self}.close_tab(
1636
+ # Run close tab and return its result
1637
+ #{self}.close_tab(
1707
1638
  browser_obj: 'required - browser_obj returned from #open method)',
1708
1639
  index: 'optional - index of tab to close (defaults to closing active tab)',
1709
1640
  keyword: 'optional - keyword in title or url used to close tabs (defaults to closing active tab)'
1710
1641
  )
1711
1642
 
1712
- current_dom = #{self}.dom(
1643
+ # Run dom and return its result
1644
+ #{self}.dom(
1645
+ browser_obj: 'required - browser_obj returned from #open method)'
1646
+ )
1647
+
1648
+ # Run get page state and return its result
1649
+ #{self}.get_page_state(
1713
1650
  browser_obj: 'required - browser_obj returned from #open method)'
1714
1651
  )
1715
1652
 
1716
- page_state = #{self}.get_page_state(
1653
+ # Run devtools websocket messages and return its result
1654
+ #{self}.devtools_websocket_messages(
1717
1655
  browser_obj: 'required - browser_obj returned from #open method)'
1718
1656
  )
1719
1657
 
1658
+ # Run debugger and return its result
1720
1659
  #{self}.debugger(
1721
1660
  browser_obj: 'required - browser_obj returned from #open method)',
1722
1661
  action: 'optional - action to take :enable|:pause|:resume|:disable (Defaults to :enable)'
1723
1662
  )
1724
1663
 
1664
+ # Run get targets and return its result
1665
+ #{self}.get_targets(
1666
+ browser_obj: 'required - browser_obj returned from #open method)'
1667
+ )
1668
+
1669
+ # Run breakpoint locations and return its result
1670
+ #{self}.breakpoint_locations(
1671
+ browser_obj: 'required - browser_obj returned from #open method)'
1672
+ )
1673
+
1674
+ # Run step and return its result
1725
1675
  #{self}.step(
1726
1676
  browser_obj: 'required - browser_obj returned from #open method)',
1727
1677
  action: 'optional - action to take :into|:out|:over (Defaults to :into)',
1728
1678
  steps: 'optional - number of steps taken (Defaults to 1)'
1729
1679
  )
1730
1680
 
1681
+ # Run toggle devtools and return its result
1731
1682
  #{self}.toggle_devtools(
1732
1683
  browser_obj: 'required - browser_obj returned from #open method)'
1733
1684
  )
1734
1685
 
1686
+ # Run jmp devtools panel and return its result
1735
1687
  #{self}.jmp_devtools_panel(
1736
1688
  browser_obj: 'required - browser_obj returned from #open method)',
1737
1689
  panel: 'optional - panel to switch to :elements|:inspector|:console|:debugger|:sources|:network'
1738
1690
  )
1739
1691
 
1740
- browser_obj1 = #{self}.close(
1692
+ # Close a session previously returned by #open.
1693
+ #{self}.close(
1741
1694
  browser_obj: 'required - browser_obj returned from #open method)'
1742
1695
  )
1743
1696
 
1697
+ # Print the AUTHOR(S) string for this module.
1744
1698
  #{self}.authors
1745
1699
  "
1700
+ constants.sort
1746
1701
  end
1747
1702
  end
1748
1703
  end