pwn 0.5.708 → 0.5.710
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/documentation/Installation.md +1 -0
- data/etc/default_skills/exploitdev/SKILL.md +38 -0
- data/etc/default_skills/pwn/ai/agent/extrospection/osint/bridges/SKILL.md +30 -8
- data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/SKILL.md +30 -8
- data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/references/urls.md +1 -1
- data/etc/default_skills/pwn/ai/agent/extrospection/references/urls.md +0 -1
- data/etc/default_skills/pwn/memory_index/SKILL.md +0 -4
- data/etc/default_skills/pwn/plugins/aflplusplus/SKILL.md +49 -0
- data/etc/default_skills/pwn/plugins/android/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/artifact_registry/SKILL.md +49 -0
- data/etc/default_skills/pwn/plugins/binary_parser/SKILL.md +54 -0
- data/etc/default_skills/pwn/plugins/credential_attack/SKILL.md +58 -0
- data/etc/default_skills/pwn/plugins/credential_attack/references/urls.md +3 -0
- data/etc/default_skills/pwn/plugins/exploit_db/SKILL.md +49 -0
- data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +63 -0
- data/etc/default_skills/pwn/plugins/frida/SKILL.md +51 -0
- data/etc/default_skills/pwn/plugins/fuzz/SKILL.md +2 -0
- data/etc/default_skills/pwn/plugins/gdb/SKILL.md +53 -0
- data/etc/default_skills/pwn/plugins/jobs/SKILL.md +51 -0
- data/etc/default_skills/pwn/plugins/k8s/SKILL.md +51 -0
- data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +50 -0
- data/etc/default_skills/pwn/plugins/preflight_checker/SKILL.md +59 -0
- data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +53 -0
- data/etc/default_skills/pwn/plugins/radare2/SKILL.md +59 -0
- data/etc/default_skills/pwn/plugins/recon/SKILL.md +57 -0
- data/etc/default_skills/pwn/plugins/recon/references/urls.md +6 -0
- data/etc/default_skills/pwn/plugins/semgrep/SKILL.md +48 -0
- data/etc/default_skills/pwn/plugins/sqlmap/SKILL.md +48 -0
- data/etc/default_skills/pwn/plugins/transparent_browser/SKILL.md +0 -4
- data/etc/default_skills/pwn/plugins/volatility/SKILL.md +49 -0
- data/lib/pwn/ai/agent/assembly.rb +4 -1
- data/lib/pwn/ai/agent/btc.rb +4 -1
- data/lib/pwn/ai/agent/burp_suite.rb +5 -2
- data/lib/pwn/ai/agent/curriculum.rb +89 -30
- data/lib/pwn/ai/agent/dispatch.rb +27 -16
- data/lib/pwn/ai/agent/extrospection/osint/bridges.rb +9 -18
- data/lib/pwn/ai/agent/extrospection/osint/social.rb +9 -18
- data/lib/pwn/ai/agent/extrospection.rb +185 -60
- data/lib/pwn/ai/agent/gqrx.rb +4 -1
- data/lib/pwn/ai/agent/hacker_one.rb +5 -2
- data/lib/pwn/ai/agent/learning.rb +142 -25
- data/lib/pwn/ai/agent/loop.rb +53 -46
- data/lib/pwn/ai/agent/metrics.rb +133 -23
- data/lib/pwn/ai/agent/mistakes.rb +126 -17
- data/lib/pwn/ai/agent/open_goal.rb +25 -9
- data/lib/pwn/ai/agent/policy.rb +158 -18
- data/lib/pwn/ai/agent/prompt_builder.rb +21 -11
- data/lib/pwn/ai/agent/prompt_cache.rb +44 -13
- data/lib/pwn/ai/agent/reflect.rb +9 -5
- data/lib/pwn/ai/agent/registry.rb +65 -12
- data/lib/pwn/ai/agent/result.rb +19 -10
- data/lib/pwn/ai/agent/reward.rb +150 -32
- data/lib/pwn/ai/agent/sast.rb +4 -1
- data/lib/pwn/ai/agent/swarm.rb +72 -36
- data/lib/pwn/ai/agent/task_summarizer.rb +165 -36
- data/lib/pwn/ai/agent/tool_guard.rb +105 -6
- data/lib/pwn/ai/agent/tools/sessions.rb +8 -1
- data/lib/pwn/ai/agent/transparent_browser.rb +4 -1
- data/lib/pwn/ai/agent/turn_finalizer.rb +41 -21
- data/lib/pwn/ai/agent/vuln_gen.rb +6 -3
- data/lib/pwn/ai/agent.rb +4 -0
- data/lib/pwn/ai/anthropic.rb +41 -7
- data/lib/pwn/ai/gemini.rb +21 -11
- data/lib/pwn/ai/grok.rb +44 -6
- data/lib/pwn/ai/http_retry.rb +40 -12
- data/lib/pwn/ai/ollama.rb +19 -10
- data/lib/pwn/ai/open_ai.rb +81 -30
- data/lib/pwn/ai/open_web_ui.rb +20 -14
- data/lib/pwn/ai/red_team/agent_protocol_abuse.rb +7 -1
- data/lib/pwn/ai/red_team/data_and_model_poisoning.rb +7 -1
- data/lib/pwn/ai/red_team/excessive_agency.rb +7 -1
- data/lib/pwn/ai/red_team/hidden_context_exposure.rb +7 -1
- data/lib/pwn/ai/red_team/insecure_output_handling.rb +7 -1
- data/lib/pwn/ai/red_team/jailbreak.rb +7 -1
- data/lib/pwn/ai/red_team/memory_poisoning.rb +7 -1
- data/lib/pwn/ai/red_team/multimodal_injection.rb +7 -1
- data/lib/pwn/ai/red_team/overreliance.rb +7 -1
- data/lib/pwn/ai/red_team/payload_splitting.rb +7 -1
- data/lib/pwn/ai/red_team/prompt_injection.rb +7 -1
- data/lib/pwn/ai/red_team/rag_poisoning.rb +7 -1
- data/lib/pwn/ai/red_team/sensitive_information_disclosure.rb +7 -1
- data/lib/pwn/ai/red_team/supply_chain.rb +7 -1
- data/lib/pwn/ai/red_team/system_prompt_extraction.rb +7 -1
- data/lib/pwn/ai/red_team/test_case_engine.rb +12 -9
- data/lib/pwn/ai/red_team/token_smuggling.rb +7 -1
- data/lib/pwn/ai/red_team/unbounded_consumption.rb +7 -1
- data/lib/pwn/ai/red_team/vector_and_embedding_weaknesses.rb +7 -1
- data/lib/pwn/ai/red_team.rb +4 -0
- data/lib/pwn/ai.rb +4 -0
- data/lib/pwn/aws/acm.rb +5 -2
- data/lib/pwn/aws/api_gateway.rb +10 -7
- data/lib/pwn/aws/app_stream.rb +5 -2
- data/lib/pwn/aws/application_auto_scaling.rb +5 -2
- data/lib/pwn/aws/application_discovery_service.rb +5 -2
- data/lib/pwn/aws/auto_scaling.rb +5 -2
- data/lib/pwn/aws/batch.rb +5 -2
- data/lib/pwn/aws/budgets.rb +5 -2
- data/lib/pwn/aws/cloud_formation.rb +5 -2
- data/lib/pwn/aws/cloud_front.rb +7 -4
- data/lib/pwn/aws/cloud_hsm.rb +5 -2
- data/lib/pwn/aws/cloud_search.rb +5 -2
- data/lib/pwn/aws/cloud_search_domain.rb +5 -2
- data/lib/pwn/aws/cloud_trail.rb +5 -2
- data/lib/pwn/aws/cloud_watch.rb +5 -2
- data/lib/pwn/aws/cloud_watch_events.rb +5 -2
- data/lib/pwn/aws/cloud_watch_logs.rb +5 -2
- data/lib/pwn/aws/code_build.rb +5 -2
- data/lib/pwn/aws/code_commit.rb +5 -2
- data/lib/pwn/aws/code_deploy.rb +5 -2
- data/lib/pwn/aws/code_pipeline.rb +5 -2
- data/lib/pwn/aws/cognito_identity.rb +5 -2
- data/lib/pwn/aws/cognito_identity_provider.rb +5 -2
- data/lib/pwn/aws/cognito_sync.rb +5 -2
- data/lib/pwn/aws/config_service.rb +5 -2
- data/lib/pwn/aws/data_pipleline.rb +5 -2
- data/lib/pwn/aws/database_migration_service.rb +5 -2
- data/lib/pwn/aws/device_farm.rb +5 -2
- data/lib/pwn/aws/direct_connect.rb +5 -2
- data/lib/pwn/aws/directory_service.rb +5 -2
- data/lib/pwn/aws/dynamo_db.rb +5 -2
- data/lib/pwn/aws/dynamo_db_streams.rb +5 -2
- data/lib/pwn/aws/ec2.rb +5 -2
- data/lib/pwn/aws/ecr.rb +5 -2
- data/lib/pwn/aws/ecs.rb +5 -2
- data/lib/pwn/aws/efs.rb +5 -2
- data/lib/pwn/aws/elasti_cache.rb +5 -2
- data/lib/pwn/aws/elastic_beanstalk.rb +8 -5
- data/lib/pwn/aws/elastic_load_balancing.rb +5 -2
- data/lib/pwn/aws/elastic_load_balancing_v2.rb +6 -3
- data/lib/pwn/aws/elastic_transcoder.rb +5 -2
- data/lib/pwn/aws/elasticsearch_service.rb +5 -2
- data/lib/pwn/aws/emr.rb +5 -2
- data/lib/pwn/aws/firehose.rb +5 -2
- data/lib/pwn/aws/game_lift.rb +5 -2
- data/lib/pwn/aws/glacier.rb +6 -3
- data/lib/pwn/aws/health.rb +5 -2
- data/lib/pwn/aws/iam.rb +10 -4
- data/lib/pwn/aws/import_export.rb +5 -2
- data/lib/pwn/aws/inspector.rb +5 -2
- data/lib/pwn/aws/iot.rb +5 -2
- data/lib/pwn/aws/iot_data_plane.rb +5 -2
- data/lib/pwn/aws/kinesis.rb +5 -2
- data/lib/pwn/aws/kinesis_analytics.rb +5 -2
- data/lib/pwn/aws/kms.rb +5 -2
- data/lib/pwn/aws/lambda.rb +5 -2
- data/lib/pwn/aws/lambda_preview.rb +5 -2
- data/lib/pwn/aws/lex.rb +5 -2
- data/lib/pwn/aws/lightsail.rb +5 -2
- data/lib/pwn/aws/machine_learning.rb +5 -2
- data/lib/pwn/aws/marketplace_commerce_analytics.rb +5 -2
- data/lib/pwn/aws/marketplace_metering.rb +5 -2
- data/lib/pwn/aws/ops_works.rb +5 -2
- data/lib/pwn/aws/ops_works_cm.rb +5 -2
- data/lib/pwn/aws/pinpoint.rb +5 -2
- data/lib/pwn/aws/polly.rb +5 -2
- data/lib/pwn/aws/rds.rb +5 -2
- data/lib/pwn/aws/redshift.rb +5 -2
- data/lib/pwn/aws/rekognition.rb +5 -2
- data/lib/pwn/aws/route53.rb +5 -2
- data/lib/pwn/aws/route53_domains.rb +5 -2
- data/lib/pwn/aws/s3.rb +5 -2
- data/lib/pwn/aws/service_catalog.rb +5 -2
- data/lib/pwn/aws/ses.rb +5 -2
- data/lib/pwn/aws/shield.rb +5 -2
- data/lib/pwn/aws/simple_db.rb +5 -2
- data/lib/pwn/aws/sms.rb +5 -2
- data/lib/pwn/aws/snowball.rb +5 -2
- data/lib/pwn/aws/sns.rb +5 -2
- data/lib/pwn/aws/sqs.rb +5 -2
- data/lib/pwn/aws/ssm.rb +5 -2
- data/lib/pwn/aws/states.rb +5 -2
- data/lib/pwn/aws/storage_gateway.rb +5 -2
- data/lib/pwn/aws/sts.rb +4 -1
- data/lib/pwn/aws/support.rb +5 -2
- data/lib/pwn/aws/swf.rb +5 -2
- data/lib/pwn/aws/waf.rb +5 -2
- data/lib/pwn/aws/waf_regional.rb +5 -2
- data/lib/pwn/aws/workspaces.rb +5 -2
- data/lib/pwn/aws/x_ray.rb +5 -2
- data/lib/pwn/aws.rb +4 -0
- data/lib/pwn/banner/anon.rb +3 -0
- data/lib/pwn/banner/bubble.rb +3 -0
- data/lib/pwn/banner/cheshire.rb +3 -0
- data/lib/pwn/banner/code_cave.rb +3 -0
- data/lib/pwn/banner/dont_panic.rb +3 -0
- data/lib/pwn/banner/f_society.rb +3 -0
- data/lib/pwn/banner/fork_bomb.rb +3 -0
- data/lib/pwn/banner/jmp_esp.rb +3 -0
- data/lib/pwn/banner/matrix.rb +5 -1
- data/lib/pwn/banner/ninja.rb +3 -0
- data/lib/pwn/banner/off_the_air.rb +3 -0
- data/lib/pwn/banner/pirate.rb +3 -0
- data/lib/pwn/banner/radare2.rb +3 -0
- data/lib/pwn/banner/radare2_ai.rb +3 -0
- data/lib/pwn/banner/white_rabbit.rb +3 -0
- data/lib/pwn/banner.rb +6 -2
- data/lib/pwn/blockchain/btc.rb +8 -3
- data/lib/pwn/blockchain/eth.rb +10 -3
- data/lib/pwn/blockchain.rb +4 -0
- data/lib/pwn/bounty/lifecycle_authz_replay.rb +46 -27
- data/lib/pwn/bounty.rb +4 -0
- data/lib/pwn/config.rb +79 -13
- data/lib/pwn/cron.rb +297 -20
- data/lib/pwn/driver.rb +2 -18
- data/lib/pwn/ffi/adalm_pluto.rb +65 -11
- data/lib/pwn/ffi/fftw.rb +31 -6
- data/lib/pwn/ffi/hack_rf.rb +59 -8
- data/lib/pwn/ffi/liquid.rb +63 -10
- data/lib/pwn/ffi/rtl_sdr.rb +35 -5
- data/lib/pwn/ffi/soapy_sdr.rb +60 -10
- data/lib/pwn/ffi/stdio.rb +7 -8
- data/lib/pwn/ffi/volk.rb +36 -7
- data/lib/pwn/ffi.rb +12 -0
- data/lib/pwn/memory.rb +136 -16
- data/lib/pwn/memory_index.rb +34 -19
- data/lib/pwn/migrate.rb +34 -24
- data/lib/pwn/module_skills.rb +39 -8
- data/lib/pwn/plugins/aflplusplus.rb +72 -0
- data/lib/pwn/plugins/android.rb +71 -245
- data/lib/pwn/plugins/artifact_registry.rb +71 -0
- data/lib/pwn/plugins/assembly.rb +9 -4
- data/lib/pwn/plugins/authentication_helper.rb +8 -5
- data/lib/pwn/plugins/baresip.rb +59 -12
- data/lib/pwn/plugins/basic_auth.rb +9 -3
- data/lib/pwn/plugins/beef.rb +28 -18
- data/lib/pwn/plugins/binary_parser.rb +133 -0
- data/lib/pwn/plugins/black_duck_binary_analysis.rb +63 -39
- data/lib/pwn/plugins/burp_suite.rb +98 -68
- data/lib/pwn/plugins/bus_pirate.rb +15 -8
- data/lib/pwn/plugins/char.rb +33 -3
- data/lib/pwn/plugins/credential_attack.rb +158 -0
- data/lib/pwn/plugins/credit_card.rb +6 -1
- data/lib/pwn/plugins/dao_ldap.rb +19 -13
- data/lib/pwn/plugins/dao_mongo.rb +11 -5
- data/lib/pwn/plugins/dao_postgres.rb +28 -19
- data/lib/pwn/plugins/dao_sqlite3.rb +15 -6
- data/lib/pwn/plugins/defect_dojo.rb +38 -22
- data/lib/pwn/plugins/detect_os.rb +5 -0
- data/lib/pwn/plugins/ein.rb +3 -0
- data/lib/pwn/plugins/exploit_db.rb +69 -0
- data/lib/pwn/plugins/exploit_dev.rb +330 -0
- data/lib/pwn/plugins/file_fu.rb +11 -8
- data/lib/pwn/plugins/frida.rb +112 -0
- data/lib/pwn/plugins/fuzz.rb +42 -6
- data/lib/pwn/plugins/gdb.rb +115 -0
- data/lib/pwn/plugins/git.rb +19 -14
- data/lib/pwn/plugins/github.rb +38 -15
- data/lib/pwn/plugins/google_workspace.rb +188 -45
- data/lib/pwn/plugins/hacker_one.rb +159 -35
- data/lib/pwn/plugins/hunter.rb +6 -3
- data/lib/pwn/plugins/ip_info.rb +9 -4
- data/lib/pwn/plugins/irc.rb +28 -15
- data/lib/pwn/plugins/jenkins.rb +65 -57
- data/lib/pwn/plugins/jira_data_center.rb +30 -22
- data/lib/pwn/plugins/jobs.rb +110 -0
- data/lib/pwn/plugins/json_pathify.rb +9 -5
- data/lib/pwn/plugins/k8s.rb +73 -0
- data/lib/pwn/plugins/log.rb +113 -13
- data/lib/pwn/plugins/mail_agent.rb +87 -79
- data/lib/pwn/plugins/metasploit.rb +11 -6
- data/lib/pwn/plugins/monkey_patch.rb +3 -0
- data/lib/pwn/plugins/msr206.rb +42 -28
- data/lib/pwn/plugins/nessus_cloud.rb +44 -4
- data/lib/pwn/plugins/nexpose_vuln_scan.rb +40 -24
- data/lib/pwn/plugins/nmap_it.rb +14 -34
- data/lib/pwn/plugins/nuclei.rb +90 -0
- data/lib/pwn/plugins/oauth2.rb +11 -5
- data/lib/pwn/plugins/ocr.rb +3 -0
- data/lib/pwn/plugins/open_api.rb +5 -2
- data/lib/pwn/plugins/openvas.rb +33 -25
- data/lib/pwn/plugins/packet.rb +152 -31
- data/lib/pwn/plugins/pdf_parse.rb +5 -2
- data/lib/pwn/plugins/pony.rb +86 -1
- data/lib/pwn/plugins/preflight_checker.rb +166 -0
- data/lib/pwn/plugins/process_tube.rb +139 -0
- data/lib/pwn/plugins/ps.rb +7 -1
- data/lib/pwn/plugins/pwn_logger.rb +6 -2
- data/lib/pwn/plugins/rabbit_mq.rb +12 -7
- data/lib/pwn/plugins/radare2.rb +253 -0
- data/lib/pwn/plugins/recon.rb +196 -0
- data/lib/pwn/plugins/repl.rb +122 -1
- data/lib/pwn/plugins/scannable_codes.rb +5 -1
- data/lib/pwn/plugins/semgrep.rb +61 -0
- data/lib/pwn/plugins/serial.rb +24 -14
- data/lib/pwn/plugins/shodan.rb +54 -35
- data/lib/pwn/plugins/slack_client.rb +11 -6
- data/lib/pwn/plugins/sock.rb +17 -8
- data/lib/pwn/plugins/spider.rb +5 -2
- data/lib/pwn/plugins/sqlmap.rb +49 -0
- data/lib/pwn/plugins/ssn.rb +3 -0
- data/lib/pwn/plugins/thread_pool.rb +6 -9
- data/lib/pwn/plugins/tor.rb +9 -4
- data/lib/pwn/plugins/transparent_browser.rb +62 -107
- data/lib/pwn/plugins/tty_spinner.rb +16 -2
- data/lib/pwn/plugins/twitter_api.rb +6 -2
- data/lib/pwn/plugins/uri_scheme.rb +4 -1
- data/lib/pwn/plugins/vault.rb +12 -3
- data/lib/pwn/plugins/vin.rb +24 -12
- data/lib/pwn/plugins/voice.rb +7 -2
- data/lib/pwn/plugins/volatility.rb +67 -0
- data/lib/pwn/plugins/vsphere.rb +9 -5
- data/lib/pwn/plugins/xxd.rb +12 -43
- data/lib/pwn/plugins/zaproxy.rb +30 -16
- data/lib/pwn/plugins.rb +22 -0
- data/lib/pwn/reports/ai_red_team.rb +6 -2
- data/lib/pwn/reports/csv.rb +8 -1
- data/lib/pwn/reports/fuzz.rb +5 -2
- data/lib/pwn/reports/html.rb +8 -1
- data/lib/pwn/reports/html_footer.rb +4 -3
- data/lib/pwn/reports/html_header.rb +6 -2
- data/lib/pwn/reports/json.rb +8 -1
- data/lib/pwn/reports/markdown.rb +8 -1
- data/lib/pwn/reports/pdf.rb +8 -1
- data/lib/pwn/reports/phone.rb +5 -2
- data/lib/pwn/reports/sast.rb +6 -2
- data/lib/pwn/reports/uri_buster.rb +5 -2
- data/lib/pwn/reports/xml.rb +8 -1
- data/lib/pwn/reports.rb +19 -0
- data/lib/pwn/sast/amqp_connect_as_guest.rb +9 -3
- data/lib/pwn/sast/apache_file_system_util_api.rb +9 -3
- data/lib/pwn/sast/aws.rb +9 -3
- data/lib/pwn/sast/banned_function_calls_c.rb +9 -3
- data/lib/pwn/sast/base64.rb +9 -3
- data/lib/pwn/sast/beef_hook.rb +9 -3
- data/lib/pwn/sast/cmd_execution_go_lang.rb +9 -3
- data/lib/pwn/sast/cmd_execution_java.rb +9 -3
- data/lib/pwn/sast/cmd_execution_python.rb +9 -3
- data/lib/pwn/sast/cmd_execution_ruby.rb +9 -3
- data/lib/pwn/sast/cmd_execution_scala.rb +9 -3
- data/lib/pwn/sast/csrf.rb +9 -3
- data/lib/pwn/sast/deserial_java.rb +9 -3
- data/lib/pwn/sast/emoticon.rb +9 -3
- data/lib/pwn/sast/eval.rb +9 -3
- data/lib/pwn/sast/factory.rb +9 -3
- data/lib/pwn/sast/http_authorization_header.rb +9 -3
- data/lib/pwn/sast/inner_html.rb +9 -3
- data/lib/pwn/sast/keystore.rb +9 -3
- data/lib/pwn/sast/local_storage.rb +9 -3
- data/lib/pwn/sast/location_hash.rb +9 -3
- data/lib/pwn/sast/log4j.rb +9 -3
- data/lib/pwn/sast/logger.rb +9 -3
- data/lib/pwn/sast/md5.rb +9 -3
- data/lib/pwn/sast/outer_html.rb +9 -3
- data/lib/pwn/sast/padding_oracle.rb +9 -3
- data/lib/pwn/sast/password.rb +9 -3
- data/lib/pwn/sast/php_input_mechanisms.rb +9 -3
- data/lib/pwn/sast/php_type_juggling.rb +9 -3
- data/lib/pwn/sast/pom_version.rb +9 -3
- data/lib/pwn/sast/port.rb +9 -3
- data/lib/pwn/sast/post_message.rb +9 -3
- data/lib/pwn/sast/private_key.rb +9 -3
- data/lib/pwn/sast/redirect.rb +9 -3
- data/lib/pwn/sast/redos.rb +9 -3
- data/lib/pwn/sast/shell.rb +9 -3
- data/lib/pwn/sast/signature.rb +9 -3
- data/lib/pwn/sast/sql.rb +9 -3
- data/lib/pwn/sast/ssl.rb +9 -3
- data/lib/pwn/sast/sudo.rb +9 -3
- data/lib/pwn/sast/task_tag.rb +9 -3
- data/lib/pwn/sast/test_case_engine.rb +11 -7
- data/lib/pwn/sast/throw_errors.rb +9 -3
- data/lib/pwn/sast/token.rb +9 -3
- data/lib/pwn/sast/type_script_type_juggling.rb +9 -3
- data/lib/pwn/sast/use_after_free.rb +9 -3
- data/lib/pwn/sast/version.rb +9 -3
- data/lib/pwn/sast/window_location_hash.rb +9 -3
- data/lib/pwn/sast.rb +4 -0
- data/lib/pwn/sdr/decoder/adsb.rb +36 -5
- data/lib/pwn/sdr/decoder/apt.rb +9 -6
- data/lib/pwn/sdr/decoder/base.rb +74 -22
- data/lib/pwn/sdr/decoder/bluetooth.rb +17 -5
- data/lib/pwn/sdr/decoder/dect.rb +12 -3
- data/lib/pwn/sdr/decoder/dsp.rb +229 -39
- data/lib/pwn/sdr/decoder/flex.rb +59 -11
- data/lib/pwn/sdr/decoder/gps.rb +12 -3
- data/lib/pwn/sdr/decoder/gsm.rb +24 -4
- data/lib/pwn/sdr/decoder/iridium.rb +12 -3
- data/lib/pwn/sdr/decoder/lora.rb +13 -4
- data/lib/pwn/sdr/decoder/lte.rb +27 -3
- data/lib/pwn/sdr/decoder/morse.rb +12 -3
- data/lib/pwn/sdr/decoder/p25.rb +12 -3
- data/lib/pwn/sdr/decoder/pager.rb +8 -5
- data/lib/pwn/sdr/decoder/pocsag.rb +29 -9
- data/lib/pwn/sdr/decoder/rds.rb +14 -8
- data/lib/pwn/sdr/decoder/rfid.rb +12 -3
- data/lib/pwn/sdr/decoder/rtl433.rb +12 -3
- data/lib/pwn/sdr/decoder/rtty.rb +8 -5
- data/lib/pwn/sdr/decoder/wifi.rb +12 -3
- data/lib/pwn/sdr/decoder/zigbee.rb +12 -3
- data/lib/pwn/sdr/decoder.rb +9 -0
- data/lib/pwn/sdr/flipper_zero.rb +17 -10
- data/lib/pwn/sdr/frequency_allocation.rb +4 -1
- data/lib/pwn/sdr/gqrx.rb +178 -119
- data/lib/pwn/sdr/rfidler.rb +4 -1
- data/lib/pwn/sdr/son_micro_rfid.rb +37 -24
- data/lib/pwn/sdr.rb +14 -0
- data/lib/pwn/sessions.rb +86 -16
- data/lib/pwn/setup.rb +106 -37
- data/lib/pwn/version.rb +1 -1
- data/lib/pwn/www/app_cobalt_io.rb +11 -5
- data/lib/pwn/www/bing.rb +10 -5
- data/lib/pwn/www/bug_crowd.rb +11 -5
- data/lib/pwn/www/checkip.rb +8 -4
- data/lib/pwn/www/coinbase_pro.rb +11 -5
- data/lib/pwn/www/duckduckgo.rb +12 -6
- data/lib/pwn/www/facebook.rb +11 -5
- data/lib/pwn/www/github.rb +11 -5
- data/lib/pwn/www/google.rb +11 -5
- data/lib/pwn/www/hacker_one.rb +20 -9
- data/lib/pwn/www/linkedin.rb +11 -5
- data/lib/pwn/www/pandora.rb +11 -5
- data/lib/pwn/www/pastebin.rb +9 -4
- data/lib/pwn/www/paypal.rb +19 -11
- data/lib/pwn/www/synack.rb +11 -5
- data/lib/pwn/www/torch.rb +13 -8
- data/lib/pwn/www/trading_view.rb +11 -5
- data/lib/pwn/www/twitter.rb +11 -5
- data/lib/pwn/www/uber.rb +11 -5
- data/lib/pwn/www/upwork.rb +11 -5
- data/lib/pwn/www/wayback_machine.rb +12 -6
- data/lib/pwn/www/youtube.rb +10 -5
- data/lib/pwn/www.rb +4 -0
- data/spec/conventions_spec.rb +118 -2
- data/spec/integration/help_contract_spec.rb +2 -0
- data/spec/lib/pwn/ai/agent/reward_spec.rb +9 -0
- data/spec/lib/pwn/plugins/aflplusplus_spec.rb +13 -0
- data/spec/lib/pwn/plugins/artifact_registry_spec.rb +13 -0
- data/spec/lib/pwn/plugins/binary_parser_spec.rb +21 -0
- data/spec/lib/pwn/plugins/credential_attack_spec.rb +13 -0
- data/spec/lib/pwn/plugins/exploit_db_spec.rb +13 -0
- data/spec/lib/pwn/plugins/exploit_dev_spec.rb +23 -0
- data/spec/lib/pwn/plugins/frida_spec.rb +13 -0
- data/spec/lib/pwn/plugins/gdb_spec.rb +13 -0
- data/spec/lib/pwn/plugins/jobs_spec.rb +13 -0
- data/spec/lib/pwn/plugins/k8s_spec.rb +13 -0
- data/spec/lib/pwn/plugins/nuclei_spec.rb +13 -0
- data/spec/lib/pwn/plugins/preflight_checker_spec.rb +23 -0
- data/spec/lib/pwn/plugins/process_tube_spec.rb +13 -0
- data/spec/lib/pwn/plugins/radare2_spec.rb +13 -0
- data/spec/lib/pwn/plugins/recon_spec.rb +26 -0
- data/spec/lib/pwn/plugins/semgrep_spec.rb +13 -0
- data/spec/lib/pwn/plugins/sqlmap_spec.rb +13 -0
- data/spec/lib/pwn/plugins/volatility_spec.rb +13 -0
- data/spec/lib/pwn/req_queue_spec.rb +168 -0
- data/third_party/pwn_rdoc.jsonl +160 -5
- metadata +63 -7
- data/etc/default_skills/pwn/memory_index/references/urls.md +0 -4
- data/etc/default_skills/pwn/plugins/transparent_browser/references/urls.md +0 -3
|
@@ -248,33 +248,52 @@ module PWN
|
|
|
248
248
|
# Display Usage Information
|
|
249
249
|
|
|
250
250
|
public_class_method def self.help
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
251
|
+
puts "USAGE:
|
|
252
|
+
# Run load plan and return its result
|
|
253
|
+
#{self}.load_plan(
|
|
254
|
+
yaml_path: 'required - /path/to/lifecycle_authz_replay.yaml'
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
# Run start run and return its result
|
|
258
|
+
#{self}.start_run(
|
|
259
|
+
yaml_path: 'optional - /path/to/lifecycle_authz_replay.yaml',
|
|
260
|
+
output_dir: 'required - /tmp/evidence_bundle',
|
|
261
|
+
plan: 'required - normalized_plan_hash',
|
|
262
|
+
run_id: 'required - run id value consumed by #start_run'
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
# Run record observation and return its result
|
|
266
|
+
#{self}.record_observation(
|
|
267
|
+
run_obj: 'required - run obj value consumed by #record_observation',
|
|
268
|
+
checkpoint: 'required - checkpoint value consumed by #record_observation',
|
|
269
|
+
actor: 'required - actor value consumed by #record_observation',
|
|
270
|
+
surface: 'required - repo_settings_page',
|
|
271
|
+
status: 'required - status value consumed by #record_observation',
|
|
272
|
+
request: 'optional - { method: GET, path: /org/repo/settings }',
|
|
273
|
+
response: 'optional - { http_status: 200 }',
|
|
274
|
+
notes: 'optional - Still reachable after collaborator removal',
|
|
275
|
+
artifact_paths: 'optional - Array [/tmp/screen.png]'
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
# Run finalize run and return its result
|
|
279
|
+
#{self}.finalize_run(
|
|
280
|
+
run_obj: 'required - run obj value consumed by #finalize_run'
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
# Run normalize plan and return its result
|
|
284
|
+
#{self}.normalize_plan(
|
|
285
|
+
plan: 'optional - plan value consumed by #normalize_plan',
|
|
286
|
+
campaign: 'required - { id: acme-revoke }',
|
|
287
|
+
actors: 'optional - [owner, revoked_user]',
|
|
288
|
+
surfaces: 'optional - surfaces value consumed by #normalize_plan',
|
|
289
|
+
checkpoints: 'required - [pre_change, post_change_t0]',
|
|
290
|
+
plan_id_hint: 'required - plan id hint value consumed by #normalize_plan'
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
# Print the AUTHOR(S) string for this module.
|
|
294
|
+
#{self}.authors
|
|
295
|
+
"
|
|
296
|
+
constants.sort
|
|
278
297
|
end
|
|
279
298
|
|
|
280
299
|
private_class_method def self.find_stale_access_findings(opts = {})
|
data/lib/pwn/bounty.rb
CHANGED
data/lib/pwn/config.rb
CHANGED
|
@@ -1050,39 +1050,105 @@ module PWN
|
|
|
1050
1050
|
|
|
1051
1051
|
public_class_method def self.help
|
|
1052
1052
|
puts "USAGE:
|
|
1053
|
+
# Run env template and return its result
|
|
1054
|
+
#{self}.env_template
|
|
1055
|
+
|
|
1056
|
+
# Run default env and return its result
|
|
1053
1057
|
#{self}.default_env(
|
|
1054
1058
|
pwn_env_path: 'optional - Path to pwn.yaml file. Defaults to ~/.pwn/pwn.yaml'
|
|
1055
1059
|
)
|
|
1056
1060
|
|
|
1061
|
+
# Run redact sensitive artifacts and return its result
|
|
1057
1062
|
#{self}.redact_sensitive_artifacts(
|
|
1058
1063
|
config: 'optional - Hash to redact sensitive artifacts from. Defaults to PWN::Env'
|
|
1059
1064
|
)
|
|
1060
1065
|
|
|
1061
|
-
#
|
|
1066
|
+
# Run init driver options and return its result
|
|
1067
|
+
#{self}.init_driver_options
|
|
1068
|
+
|
|
1069
|
+
# Run refresh env and return its result
|
|
1070
|
+
#{self}.refresh_env(
|
|
1071
|
+
pwn_env_path: 'required - pwn env path value consumed by #refresh_env',
|
|
1072
|
+
pwn_dec_path: 'required - pwn dec path value consumed by #refresh_env',
|
|
1073
|
+
key: 'optional - key value consumed by #refresh_env',
|
|
1074
|
+
iv: 'optional - iv value consumed by #refresh_env'
|
|
1075
|
+
)
|
|
1062
1076
|
|
|
1063
|
-
#
|
|
1077
|
+
# Run pwn skills path and return its result
|
|
1078
|
+
#{self}.pwn_skills_path(
|
|
1079
|
+
pwn_env_path: 'optional - Path to pwn.yaml file. Defaults to ~/.pwn/pwn.yaml'
|
|
1080
|
+
)
|
|
1064
1081
|
|
|
1082
|
+
# Run sanitize skill name and return its result
|
|
1083
|
+
#{self}.sanitize_skill_name(
|
|
1084
|
+
name: 'required - binary or identifier name'
|
|
1085
|
+
)
|
|
1086
|
+
|
|
1087
|
+
# Run parse skill frontmatter and return its result
|
|
1088
|
+
#{self}.parse_skill_frontmatter(
|
|
1089
|
+
content: 'optional - content value consumed by #parse_skill_frontmatter'
|
|
1090
|
+
)
|
|
1091
|
+
|
|
1092
|
+
# Run parse skill references and return its result
|
|
1093
|
+
#{self}.parse_skill_references(
|
|
1094
|
+
content: 'optional - content value consumed by #parse_skill_references'
|
|
1095
|
+
)
|
|
1096
|
+
|
|
1097
|
+
# Run write skill and return its result
|
|
1065
1098
|
#{self}.write_skill(
|
|
1066
|
-
name: 'required
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1099
|
+
name: 'required - free-form; sanitised to [a-z0-9-]',
|
|
1100
|
+
content: 'required - markdown body (WITHOUT frontmatter)',
|
|
1101
|
+
description: 'optional - 1..1024 chars; derived from body when omitted',
|
|
1102
|
+
references: 'optional - Array of URLs / CWE / CVE / ATT&CK / NIST ids',
|
|
1103
|
+
license: 'optional - SPDX id or free text',
|
|
1104
|
+
metadata: 'optional - Hash of arbitrary metadata',
|
|
1105
|
+
allowed_tools: 'optional - Array of toolset names',
|
|
1106
|
+
pwn_skills_path: 'optional - override skills root (defaults to pwn_skills_path)'
|
|
1070
1107
|
)
|
|
1071
1108
|
|
|
1072
|
-
#
|
|
1109
|
+
# Run migrate legacy skills and return its result
|
|
1110
|
+
#{self}.migrate_legacy_skills(
|
|
1111
|
+
pwn_skills_path: 'optional - override skills root (defaults to pwn_skills_path)',
|
|
1112
|
+
delete_legacy: 'optional - remove flat file after migration (default true)'
|
|
1113
|
+
)
|
|
1073
1114
|
|
|
1074
|
-
#
|
|
1115
|
+
# Run default skill names and return its result
|
|
1116
|
+
#{self}.default_skill_names(
|
|
1117
|
+
source: 'optional - source value consumed by #default_skill_names',
|
|
1118
|
+
root: 'optional - root value consumed by #default_skill_names'
|
|
1119
|
+
)
|
|
1075
1120
|
|
|
1076
|
-
#
|
|
1077
|
-
#{self}.
|
|
1121
|
+
# Run default skills dir and return its result
|
|
1122
|
+
#{self}.default_skills_dir
|
|
1078
1123
|
|
|
1079
|
-
#
|
|
1080
|
-
|
|
1081
|
-
|
|
1124
|
+
# Seed bundled skills into ~/.pwn/skills (or pwn_skills_path:)
|
|
1125
|
+
#{self}.install_default_skills(
|
|
1126
|
+
pwn_skills_path: 'optional - pwn skills path value consumed by #install_default_skills',
|
|
1127
|
+
source: 'optional - source value consumed by #install_default_skills'
|
|
1128
|
+
)
|
|
1129
|
+
|
|
1130
|
+
# Run load skills and return its result
|
|
1131
|
+
#{self}.load_skills(
|
|
1132
|
+
pwn_skills_path: 'optional - Path to skills folder. Defaults to ~/.pwn/skills',
|
|
1133
|
+
references: 'optional - frontmatter:, loaded:?, error:? }'
|
|
1082
1134
|
)
|
|
1083
1135
|
|
|
1136
|
+
# Run pwn memory path and return its result
|
|
1137
|
+
#{self}.pwn_memory_path
|
|
1138
|
+
|
|
1139
|
+
# Run load memory and return its result
|
|
1140
|
+
#{self}.load_memory
|
|
1141
|
+
|
|
1142
|
+
# Run pwn sessions path and return its result
|
|
1143
|
+
#{self}.pwn_sessions_path
|
|
1144
|
+
|
|
1145
|
+
# Run pwn cron path and return its result
|
|
1146
|
+
#{self}.pwn_cron_path
|
|
1147
|
+
|
|
1148
|
+
# Print the AUTHOR(S) string for this module.
|
|
1084
1149
|
#{self}.authors
|
|
1085
1150
|
"
|
|
1151
|
+
constants.sort
|
|
1086
1152
|
end
|
|
1087
1153
|
end
|
|
1088
1154
|
end
|
data/lib/pwn/cron.rb
CHANGED
|
@@ -1518,26 +1518,303 @@ module PWN
|
|
|
1518
1518
|
|
|
1519
1519
|
# Display Usage for this Module
|
|
1520
1520
|
public_class_method def self.help
|
|
1521
|
-
puts
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1521
|
+
puts "USAGE:
|
|
1522
|
+
# Run cron dir and return its result
|
|
1523
|
+
#{self}.cron_dir
|
|
1524
|
+
|
|
1525
|
+
# Run list and return its result
|
|
1526
|
+
#{self}.list
|
|
1527
|
+
|
|
1528
|
+
# Run create and return its result
|
|
1529
|
+
#{self}.create(
|
|
1530
|
+
name: 'optional - binary or identifier name (defaults to job-)',
|
|
1531
|
+
schedule: 'required - required e.g. 0 * * * * or 30m or every 2h',
|
|
1532
|
+
prompt: 'optional - pwn-ai prompt to run',
|
|
1533
|
+
ruby: 'optional - ruby snippet to eval',
|
|
1534
|
+
script: 'optional - path to external script',
|
|
1535
|
+
delivery: 'optional - log|stdout (default log)',
|
|
1536
|
+
enabled: 'optional - enabled value consumed by #create',
|
|
1537
|
+
install_crontab: 'optional - install crontab value consumed by #create'
|
|
1538
|
+
)
|
|
1539
|
+
|
|
1540
|
+
# Executes the job (for pwn-ai prompt it will use current active AI engine
|
|
1541
|
+
#{self}.run(
|
|
1542
|
+
id: 'required - id value consumed by #run'
|
|
1543
|
+
)
|
|
1544
|
+
|
|
1545
|
+
# Run remove and return its result
|
|
1546
|
+
#{self}.remove(
|
|
1547
|
+
id: 'optional - id value consumed by #remove'
|
|
1548
|
+
)
|
|
1549
|
+
|
|
1550
|
+
# Run enable and return its result
|
|
1551
|
+
#{self}.enable(
|
|
1552
|
+
id: 'optional - id value consumed by #enable'
|
|
1553
|
+
)
|
|
1554
|
+
|
|
1555
|
+
# Run disable and return its result
|
|
1556
|
+
#{self}.disable(
|
|
1557
|
+
id: 'optional - id value consumed by #disable'
|
|
1558
|
+
)
|
|
1559
|
+
|
|
1560
|
+
# Install a crontab line that invokes this job via pwn
|
|
1561
|
+
#{self}.install_crontab_entry
|
|
1562
|
+
|
|
1563
|
+
# Run install defaults and return its result
|
|
1564
|
+
#{self}.install_defaults
|
|
1565
|
+
|
|
1566
|
+
# Runtime paths follow cron_dir (and therefore a stubbed CRON_DIR)
|
|
1567
|
+
#{self}.jobs_file
|
|
1568
|
+
|
|
1569
|
+
# Run pid file and return its result
|
|
1570
|
+
#{self}.pid_file
|
|
1571
|
+
|
|
1572
|
+
# Run worker log and return its result
|
|
1573
|
+
#{self}.worker_log
|
|
1574
|
+
|
|
1575
|
+
# Run due and return its result
|
|
1576
|
+
#{self}.due?(
|
|
1577
|
+
schedule: 'required - 5-field cron or relative (30m, every 2h)',
|
|
1578
|
+
last_run: 'optional - Time / iso8601 / nil',
|
|
1579
|
+
now: 'optional - Time (default Time.now)'
|
|
1580
|
+
)
|
|
1581
|
+
|
|
1582
|
+
# Run due jobs and return its result
|
|
1583
|
+
#{self}.due_jobs(
|
|
1584
|
+
now: 'optional - now value consumed by #due_jobs (defaults to Time.now)'
|
|
1585
|
+
)
|
|
1586
|
+
|
|
1587
|
+
# Fires every currently-due enabled job via run(). Returns the list
|
|
1588
|
+
#{self}.run_due(
|
|
1589
|
+
now: 'optional - now value consumed by #run_due (defaults to Time.now)',
|
|
1590
|
+
jobs: 'optional - jobs value consumed by #run_due'
|
|
1591
|
+
)
|
|
1592
|
+
|
|
1593
|
+
# Run worker status and return its result
|
|
1594
|
+
#{self}.worker_status
|
|
1595
|
+
|
|
1596
|
+
# Idempotent. With restart:true (default) a live worker is replaced
|
|
1597
|
+
#{self}.start_worker(
|
|
1598
|
+
interval: 'optional - interval value consumed by #start_worker',
|
|
1599
|
+
foreground: 'optional - foreground value consumed by #start_worker',
|
|
1600
|
+
restart: 'optional - restart value consumed by #start_worker (defaults to foreground)'
|
|
1601
|
+
)
|
|
1602
|
+
|
|
1603
|
+
# Run stop worker and return its result
|
|
1604
|
+
#{self}.stop_worker
|
|
1605
|
+
|
|
1606
|
+
# Single tick used by the loop AND by tests (no sleep)
|
|
1607
|
+
#{self}.tick(
|
|
1608
|
+
now: 'optional - now value consumed by #tick'
|
|
1609
|
+
)
|
|
1610
|
+
|
|
1611
|
+
# Blocking poll loop. `once: true` runs a single tick then returns
|
|
1612
|
+
#{self}.worker_loop(
|
|
1613
|
+
interval: 'optional - interval value consumed by #worker_loop',
|
|
1614
|
+
once: 'optional - once value consumed by #worker_loop'
|
|
1615
|
+
)
|
|
1616
|
+
|
|
1617
|
+
# any setup action so YAML-only default jobs actually fire
|
|
1618
|
+
#{self}.ensure_worker(
|
|
1619
|
+
interval: 'optional - interval value consumed by #ensure_worker (defaults to DEFAULT_INTERVAL)'
|
|
1620
|
+
)
|
|
1621
|
+
|
|
1622
|
+
# Append an @reboot line so the worker comes back after a reboot
|
|
1623
|
+
#{self}.install_worker_crontab
|
|
1624
|
+
|
|
1625
|
+
# Run os type and return its result
|
|
1626
|
+
#{self}.os_type
|
|
1627
|
+
|
|
1628
|
+
# Run windows and return its result
|
|
1629
|
+
#{self}.windows?
|
|
1630
|
+
|
|
1631
|
+
# Run scheduler file and return its result
|
|
1632
|
+
#{self}.scheduler_file
|
|
1633
|
+
|
|
1634
|
+
# Run scheduler config and return its result
|
|
1635
|
+
#{self}.scheduler_config
|
|
1636
|
+
|
|
1637
|
+
# Run cron enabled and return its result
|
|
1638
|
+
#{self}.cron_enabled?
|
|
1639
|
+
|
|
1640
|
+
# Run persist scheduler config and return its result
|
|
1641
|
+
#{self}.persist_scheduler_config(
|
|
1642
|
+
backend: 'optional - backend value consumed by #persist_scheduler_config'
|
|
1643
|
+
)
|
|
1644
|
+
|
|
1645
|
+
# Run apply native and return its result
|
|
1646
|
+
#{self}.apply_native?(
|
|
1647
|
+
apply: 'optional - apply value consumed by #apply_native?'
|
|
1648
|
+
)
|
|
1649
|
+
|
|
1650
|
+
# Run which bin and return its result
|
|
1651
|
+
#{self}.which_bin(
|
|
1652
|
+
name: 'required - binary or identifier name'
|
|
1653
|
+
)
|
|
1654
|
+
|
|
1655
|
+
# Run crontab available and return its result
|
|
1656
|
+
#{self}.crontab_available?
|
|
1657
|
+
|
|
1658
|
+
# Run systemd user available and return its result
|
|
1659
|
+
#{self}.systemd_user_available?
|
|
1660
|
+
|
|
1661
|
+
# Run schtasks available and return its result
|
|
1662
|
+
#{self}.schtasks_available?
|
|
1663
|
+
|
|
1664
|
+
# Run scheduler backend and return its result
|
|
1665
|
+
#{self}.scheduler_backend(
|
|
1666
|
+
backend: 'optional - backend value consumed by #scheduler_backend',
|
|
1667
|
+
os: 'optional - os value consumed by #scheduler_backend'
|
|
1668
|
+
)
|
|
1669
|
+
|
|
1670
|
+
# Run native unit dir and return its result
|
|
1671
|
+
#{self}.native_unit_dir(
|
|
1672
|
+
backend: 'optional - backend value consumed by #native_unit_dir'
|
|
1673
|
+
)
|
|
1674
|
+
|
|
1675
|
+
# Run ruby lib dir and return its result
|
|
1676
|
+
#{self}.ruby_lib_dir
|
|
1677
|
+
|
|
1678
|
+
# Run ruby eval argv and return its result
|
|
1679
|
+
#{self}.ruby_eval_argv(
|
|
1680
|
+
snippet: 'optional - snippet value consumed by #ruby_eval_argv'
|
|
1681
|
+
)
|
|
1682
|
+
|
|
1683
|
+
# Run ruby eval shell and return its result
|
|
1684
|
+
#{self}.ruby_eval_shell(
|
|
1685
|
+
log: 'optional - log value consumed by #ruby_eval_shell'
|
|
1686
|
+
)
|
|
1687
|
+
|
|
1688
|
+
# Convert a 5-field cron expression into a portable calendar hash
|
|
1689
|
+
#{self}.cron_to_calendar(
|
|
1690
|
+
schedule: 'optional - schedule value consumed by #cron_to_calendar'
|
|
1691
|
+
)
|
|
1692
|
+
|
|
1693
|
+
# Run systemd on calendar and return its result
|
|
1694
|
+
#{self}.systemd_on_calendar(
|
|
1695
|
+
calendar: 'optional - calendar value consumed by #systemd_on_calendar',
|
|
1696
|
+
schedule: 'optional - schedule value consumed by #systemd_on_calendar'
|
|
1697
|
+
)
|
|
1698
|
+
|
|
1699
|
+
# Run launchd calendar interval and return its result
|
|
1700
|
+
#{self}.launchd_calendar_interval(
|
|
1701
|
+
calendar: 'optional - calendar value consumed by #launchd_calendar_interval',
|
|
1702
|
+
schedule: 'optional - schedule value consumed by #launchd_calendar_interval'
|
|
1703
|
+
)
|
|
1704
|
+
|
|
1705
|
+
# Run schtasks spec and return its result
|
|
1706
|
+
#{self}.schtasks_spec(
|
|
1707
|
+
calendar: 'optional - calendar value consumed by #schtasks_spec',
|
|
1708
|
+
schedule: 'optional - schedule value consumed by #schtasks_spec'
|
|
1709
|
+
)
|
|
1710
|
+
|
|
1711
|
+
# Run install scheduler and return its result
|
|
1712
|
+
#{self}.install_scheduler(
|
|
1713
|
+
enabled: 'optional - enabled value consumed by #install_scheduler',
|
|
1714
|
+
backend: 'optional - optional force',
|
|
1715
|
+
apply: 'optional - optional (default true unless PWN_CRON_DIR is set',
|
|
1716
|
+
sync_jobs: 'optional - sync jobs value consumed by #install_scheduler'
|
|
1717
|
+
)
|
|
1718
|
+
|
|
1719
|
+
# Run uninstall scheduler and return its result
|
|
1720
|
+
#{self}.uninstall_scheduler(
|
|
1721
|
+
backend: 'optional - backend value consumed by #uninstall_scheduler',
|
|
1722
|
+
persist: 'optional - persist value consumed by #uninstall_scheduler'
|
|
1723
|
+
)
|
|
1724
|
+
|
|
1725
|
+
# Run sync scheduler and return its result
|
|
1726
|
+
#{self}.sync_scheduler
|
|
1727
|
+
|
|
1728
|
+
# Run scheduler status and return its result
|
|
1729
|
+
#{self}.scheduler_status
|
|
1730
|
+
|
|
1731
|
+
# Run install native job and return its result
|
|
1732
|
+
#{self}.install_native_job(
|
|
1733
|
+
job: 'optional - job value consumed by #install_native_job',
|
|
1734
|
+
backend: 'optional - backend value consumed by #install_native_job'
|
|
1735
|
+
)
|
|
1736
|
+
|
|
1737
|
+
# Run remove native job and return its result
|
|
1738
|
+
#{self}.remove_native_job(
|
|
1739
|
+
job: 'optional - job value consumed by #remove_native_job',
|
|
1740
|
+
id: 'optional - id value consumed by #remove_native_job',
|
|
1741
|
+
name: 'optional - binary or identifier name',
|
|
1742
|
+
backend: 'optional - backend value consumed by #remove_native_job'
|
|
1743
|
+
)
|
|
1744
|
+
|
|
1745
|
+
# Run sync native jobs and return its result
|
|
1746
|
+
#{self}.sync_native_jobs(
|
|
1747
|
+
backend: 'optional - backend value consumed by #sync_native_jobs'
|
|
1748
|
+
)
|
|
1749
|
+
|
|
1750
|
+
# ---- crontab -------------------------------------------------------
|
|
1751
|
+
#{self}.install_crontab_worker
|
|
1752
|
+
|
|
1753
|
+
# Run install crontab job and return its result
|
|
1754
|
+
#{self}.install_crontab_job(
|
|
1755
|
+
job: 'optional - job value consumed by #install_crontab_job'
|
|
1756
|
+
)
|
|
1757
|
+
|
|
1758
|
+
# Run uninstall crontab and return its result
|
|
1759
|
+
#{self}.uninstall_crontab
|
|
1760
|
+
|
|
1761
|
+
# Run uninstall crontab job and return its result
|
|
1762
|
+
#{self}.uninstall_crontab_job(
|
|
1763
|
+
job: 'optional - job value consumed by #uninstall_crontab_job'
|
|
1764
|
+
)
|
|
1765
|
+
|
|
1766
|
+
# ---- systemd --user ------------------------------------------------
|
|
1767
|
+
#{self}.install_systemd_user_worker
|
|
1768
|
+
|
|
1769
|
+
# Run install systemd user job and return its result
|
|
1770
|
+
#{self}.install_systemd_user_job(
|
|
1771
|
+
job: 'optional - job value consumed by #install_systemd_user_job'
|
|
1772
|
+
)
|
|
1773
|
+
|
|
1774
|
+
# Run uninstall systemd user and return its result
|
|
1775
|
+
#{self}.uninstall_systemd_user
|
|
1776
|
+
|
|
1777
|
+
# Run uninstall systemd user job and return its result
|
|
1778
|
+
#{self}.uninstall_systemd_user_job(
|
|
1779
|
+
job: 'optional - job value consumed by #uninstall_systemd_user_job'
|
|
1780
|
+
)
|
|
1781
|
+
|
|
1782
|
+
# ---- launchd -------------------------------------------------------
|
|
1783
|
+
#{self}.install_launchd_worker
|
|
1784
|
+
|
|
1785
|
+
# Run install launchd job and return its result
|
|
1786
|
+
#{self}.install_launchd_job(
|
|
1787
|
+
job: 'optional - job value consumed by #install_launchd_job'
|
|
1788
|
+
)
|
|
1789
|
+
|
|
1790
|
+
# Run uninstall launchd and return its result
|
|
1791
|
+
#{self}.uninstall_launchd
|
|
1792
|
+
|
|
1793
|
+
# Run uninstall launchd job and return its result
|
|
1794
|
+
#{self}.uninstall_launchd_job(
|
|
1795
|
+
job: 'optional - job value consumed by #uninstall_launchd_job'
|
|
1796
|
+
)
|
|
1797
|
+
|
|
1798
|
+
# ---- schtasks (Windows) -------------------------------------------
|
|
1799
|
+
#{self}.install_schtasks_worker
|
|
1800
|
+
|
|
1801
|
+
# Run install schtasks job and return its result
|
|
1802
|
+
#{self}.install_schtasks_job(
|
|
1803
|
+
job: 'optional - job value consumed by #install_schtasks_job'
|
|
1804
|
+
)
|
|
1805
|
+
|
|
1806
|
+
# Run uninstall schtasks and return its result
|
|
1807
|
+
#{self}.uninstall_schtasks
|
|
1808
|
+
|
|
1809
|
+
# Run uninstall schtasks job and return its result
|
|
1810
|
+
#{self}.uninstall_schtasks_job(
|
|
1811
|
+
job: 'optional - job value consumed by #uninstall_schtasks_job'
|
|
1812
|
+
)
|
|
1813
|
+
|
|
1814
|
+
# Print the AUTHOR(S) string for this module.
|
|
1815
|
+
#{self}.authors
|
|
1816
|
+
"
|
|
1817
|
+
constants.sort
|
|
1541
1818
|
end
|
|
1542
1819
|
end
|
|
1543
1820
|
end
|
data/lib/pwn/driver.rb
CHANGED
|
@@ -69,26 +69,10 @@ module PWN
|
|
|
69
69
|
|
|
70
70
|
public_class_method def self.help
|
|
71
71
|
puts "USAGE:
|
|
72
|
-
#
|
|
73
|
-
opts = PWN::Env[:driver_opts]
|
|
74
|
-
#{self}::Parser.new.parse(&:on).parse!
|
|
75
|
-
|
|
76
|
-
# Add more options by passing a block to the parser
|
|
77
|
-
opts = PWN::Env[:driver_opts]
|
|
78
|
-
#{self}::Parser.new do |options|
|
|
79
|
-
# Boolean option
|
|
80
|
-
options.on('-b', '--boolean') do |o|
|
|
81
|
-
opts[:boolean] = o
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
# String option
|
|
85
|
-
options.on('-sSTRING', '--string=STRING') do |o|
|
|
86
|
-
opts[:string] = o
|
|
87
|
-
end
|
|
88
|
-
end.parse!
|
|
89
|
-
|
|
72
|
+
# Print the AUTHOR(S) string for this module.
|
|
90
73
|
#{self}.authors
|
|
91
74
|
"
|
|
75
|
+
constants.sort
|
|
92
76
|
end
|
|
93
77
|
end
|
|
94
78
|
end
|
data/lib/pwn/ffi/adalm_pluto.rb
CHANGED
|
@@ -455,22 +455,76 @@ module PWN
|
|
|
455
455
|
|
|
456
456
|
public_class_method def self.help
|
|
457
457
|
puts "USAGE:
|
|
458
|
+
# Run available and return its result
|
|
458
459
|
#{self}.available?
|
|
460
|
+
|
|
461
|
+
# Run info and return its result
|
|
459
462
|
#{self}.info
|
|
460
|
-
#{self}.list_uris
|
|
461
|
-
ctx = #{self}.open(uri: 'ip:192.168.2.1') # or nil for default
|
|
462
|
-
#{self}.device_info(context: ctx)
|
|
463
|
-
#{self}.configure(context: ctx, freq_hz:, rate_hz: 2_500_000, gain_db: nil)
|
|
464
|
-
h = #{self}.start_rx(context: ctx, samples: 262_144)
|
|
465
|
-
iq = #{self}.read_sync(handle: h) # cs16le interleaved String
|
|
466
|
-
#{self}.stop_rx(handle: h)
|
|
467
|
-
#{self}.close(context: ctx)
|
|
468
|
-
|
|
469
|
-
# one-shot
|
|
470
|
-
cap = #{self}.capture(freq_hz: 1090e6, rate_hz: 2_500_000, bytes: 1_048_576)
|
|
471
463
|
|
|
464
|
+
# Run list uris and return its result
|
|
465
|
+
#{self}.list_uris(
|
|
466
|
+
backends: 'optional - backends value consumed by #list_uris'
|
|
467
|
+
)
|
|
468
|
+
|
|
469
|
+
# Open a session or connection and return a handle.
|
|
470
|
+
#{self}.open(
|
|
471
|
+
uri: 'required - URI or URL string',
|
|
472
|
+
timeout_ms: 'optional - timeout ms value consumed by #open'
|
|
473
|
+
)
|
|
474
|
+
|
|
475
|
+
# Close a session previously returned by #open.
|
|
476
|
+
#{self}.close(
|
|
477
|
+
context: 'optional - context value consumed by #close'
|
|
478
|
+
)
|
|
479
|
+
|
|
480
|
+
# Run device info and return its result
|
|
481
|
+
#{self}.device_info(
|
|
482
|
+
context: 'required - context value consumed by #device_info'
|
|
483
|
+
)
|
|
484
|
+
|
|
485
|
+
# Run configure and return its result
|
|
486
|
+
#{self}.configure(
|
|
487
|
+
context: 'required - pointer from .open',
|
|
488
|
+
freq_hz: 'required - RX LO frequency Hz',
|
|
489
|
+
rate_hz: 'optional - sample rate (default 2_500_000)',
|
|
490
|
+
bw_hz: 'optional - RF bandwidth (default = rate_hz)',
|
|
491
|
+
gain_db: 'optional - manual gain dB; nil = slow_attack AGC',
|
|
492
|
+
gain_mode: 'optional - slow_attack|fast_attack|manual|hybrid'
|
|
493
|
+
)
|
|
494
|
+
|
|
495
|
+
# Run start rx and return its result
|
|
496
|
+
#{self}.start_rx(
|
|
497
|
+
context: 'required - pointer from .open',
|
|
498
|
+
samples: 'optional - samples-per-refill (default 262144)',
|
|
499
|
+
cyclic: 'optional - cyclic buffer (default false)'
|
|
500
|
+
)
|
|
501
|
+
|
|
502
|
+
# Run read sync and return its result
|
|
503
|
+
#{self}.read_sync(
|
|
504
|
+
handle: 'required - handle value consumed by #read_sync'
|
|
505
|
+
)
|
|
506
|
+
|
|
507
|
+
# Run stop rx and return its result
|
|
508
|
+
#{self}.stop_rx(
|
|
509
|
+
handle: 'optional - handle value consumed by #stop_rx'
|
|
510
|
+
)
|
|
511
|
+
|
|
512
|
+
# High-level one-shot: open → configure → start_rx → N refills → stop → close
|
|
513
|
+
#{self}.capture(
|
|
514
|
+
freq_hz: 'required - freq hz value consumed by #capture',
|
|
515
|
+
rate_hz: 'optional - rate hz value consumed by #capture',
|
|
516
|
+
bytes: 'optional - 1_048_576, # approximate payload size',
|
|
517
|
+
uri: 'optional - URI or URL string',
|
|
518
|
+
gain_db: 'optional - gain db value consumed by #capture',
|
|
519
|
+
timeout_ms: 'optional - timeout ms value consumed by #capture',
|
|
520
|
+
bw_hz: 'optional - bw hz value consumed by #capture',
|
|
521
|
+
gain_mode: 'optional - gain mode value consumed by #capture'
|
|
522
|
+
)
|
|
523
|
+
|
|
524
|
+
# Print the AUTHOR(S) string for this module.
|
|
472
525
|
#{self}.authors
|
|
473
526
|
"
|
|
527
|
+
constants.sort
|
|
474
528
|
end
|
|
475
529
|
|
|
476
530
|
class << self
|