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.
- checksums.yaml +4 -4
- data/documentation/Installation.md +1 -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 +48 -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 +51 -0
- data/etc/default_skills/pwn/plugins/doctor/SKILL.md +57 -0
- data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +61 -0
- data/etc/default_skills/pwn/plugins/frida/SKILL.md +49 -0
- data/etc/default_skills/pwn/plugins/gdb/SKILL.md +52 -0
- data/etc/default_skills/pwn/plugins/jobs/SKILL.md +51 -0
- data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +48 -0
- data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +52 -0
- data/etc/default_skills/pwn/plugins/radare2/SKILL.md +59 -0
- data/etc/default_skills/pwn/plugins/recon/SKILL.md +55 -0
- data/etc/default_skills/pwn/plugins/recon/references/urls.md +5 -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 +48 -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/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 +5 -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 +52 -0
- data/lib/pwn/plugins/android.rb +65 -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 +99 -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/doctor.rb +149 -0
- data/lib/pwn/plugins/ein.rb +3 -0
- data/lib/pwn/plugins/exploit_dev.rb +264 -0
- data/lib/pwn/plugins/file_fu.rb +11 -8
- data/lib/pwn/plugins/frida.rb +61 -0
- data/lib/pwn/plugins/fuzz.rb +9 -6
- data/lib/pwn/plugins/gdb.rb +95 -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 +109 -0
- data/lib/pwn/plugins/json_pathify.rb +9 -5
- 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 +57 -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/process_tube.rb +120 -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 +161 -0
- data/lib/pwn/plugins/repl.rb +122 -1
- data/lib/pwn/plugins/scannable_codes.rb +5 -1
- 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 +16 -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 +48 -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 +19 -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 +94 -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/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/doctor_spec.rb +23 -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/nuclei_spec.rb +13 -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/sqlmap_spec.rb +13 -0
- data/spec/lib/pwn/plugins/volatility_spec.rb +13 -0
- data/third_party/pwn_rdoc.jsonl +126 -5
- metadata +47 -3
- 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
data/lib/pwn/ffi/rtl_sdr.rb
CHANGED
|
@@ -186,16 +186,46 @@ module PWN
|
|
|
186
186
|
|
|
187
187
|
public_class_method def self.help
|
|
188
188
|
puts "USAGE:
|
|
189
|
+
# Run available and return its result
|
|
189
190
|
#{self}.available?
|
|
191
|
+
|
|
192
|
+
# Run list devices and return its result
|
|
190
193
|
#{self}.list_devices
|
|
191
|
-
dev = #{self}.open(index: 0)
|
|
192
|
-
#{self}.configure(device: dev, freq_hz:, rate_hz: 2_048_000, gain_db: nil, ppm: 0)
|
|
193
|
-
#{self}.tuner_gains(device: dev)
|
|
194
|
-
iq = #{self}.read_sync(device: dev, bytes: 262_144) # u8 I/Q String
|
|
195
|
-
#{self}.close(device: dev)
|
|
196
194
|
|
|
195
|
+
# Open a session or connection and return a handle.
|
|
196
|
+
#{self}.open(
|
|
197
|
+
index: 'optional - index value consumed by #open'
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
# Close a session previously returned by #open.
|
|
201
|
+
#{self}.close(
|
|
202
|
+
device: 'optional - device value consumed by #close'
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
# Run configure and return its result
|
|
206
|
+
#{self}.configure(
|
|
207
|
+
device: 'required - pointer from .open',
|
|
208
|
+
freq_hz: 'required - center frequency Hz',
|
|
209
|
+
rate_hz: 'optional - sample rate (default 2.048e6)',
|
|
210
|
+
gain_db: 'optional - tenths of dB (e.g. 496 = 49.6 dB). nil = auto',
|
|
211
|
+
ppm: 'optional - freq correction ppm (default 0)'
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
# Run read sync and return its result
|
|
215
|
+
#{self}.read_sync(
|
|
216
|
+
device: 'required - pointer from .open',
|
|
217
|
+
bytes: 'optional - number of raw bytes to read (default 262144)'
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
# Run tuner gains and return its result
|
|
221
|
+
#{self}.tuner_gains(
|
|
222
|
+
device: 'required - device value consumed by #tuner_gains'
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
# Print the AUTHOR(S) string for this module.
|
|
197
226
|
#{self}.authors
|
|
198
227
|
"
|
|
228
|
+
constants.sort
|
|
199
229
|
end
|
|
200
230
|
|
|
201
231
|
class << self
|
data/lib/pwn/ffi/soapy_sdr.rb
CHANGED
|
@@ -317,22 +317,72 @@ module PWN
|
|
|
317
317
|
|
|
318
318
|
public_class_method def self.help
|
|
319
319
|
puts "USAGE:
|
|
320
|
+
# Run available and return its result
|
|
320
321
|
#{self}.available?
|
|
322
|
+
|
|
323
|
+
# Run info and return its result
|
|
321
324
|
#{self}.info
|
|
322
|
-
#{self}.list_devices
|
|
323
|
-
dev = #{self}.make(args: 'driver=rtlsdr')
|
|
324
|
-
#{self}.device_keys(device: dev)
|
|
325
|
-
#{self}.unmake(device: dev)
|
|
326
325
|
|
|
327
|
-
|
|
328
|
-
#{self}.
|
|
329
|
-
#{self}.start_rx(handle: h)
|
|
330
|
-
data = #{self}.read_sync(handle: h) # cs16le interleaved I/Q
|
|
331
|
-
#{self}.stop_rx(handle: h)
|
|
332
|
-
#{self}.close(handle: h)
|
|
326
|
+
# Run list devices and return its result
|
|
327
|
+
#{self}.list_devices
|
|
333
328
|
|
|
329
|
+
# Run make and return its result
|
|
330
|
+
#{self}.make(
|
|
331
|
+
args: 'required - args value consumed by #make'
|
|
332
|
+
)
|
|
333
|
+
|
|
334
|
+
# Run unmake and return its result
|
|
335
|
+
#{self}.unmake(
|
|
336
|
+
device: 'optional - device value consumed by #unmake'
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
# Run device keys and return its result
|
|
340
|
+
#{self}.device_keys(
|
|
341
|
+
device: 'required - device value consumed by #device_keys'
|
|
342
|
+
)
|
|
343
|
+
|
|
344
|
+
# Open a session or connection and return a handle.
|
|
345
|
+
#{self}.open(
|
|
346
|
+
args: 'optional - Soapy args string, e.g. driver=rtlsdr',
|
|
347
|
+
channel: 'optional - RX channel (default 0)'
|
|
348
|
+
)
|
|
349
|
+
|
|
350
|
+
# Run configure and return its result
|
|
351
|
+
#{self}.configure(
|
|
352
|
+
handle: 'required - from .open',
|
|
353
|
+
freq_hz: 'required - center frequency Hz',
|
|
354
|
+
rate_hz: 'optional - sample rate Hz (default 2_048_000)',
|
|
355
|
+
gain_db: 'optional - overall gain dB (default AGC on)',
|
|
356
|
+
bw_hz: 'optional - baseband filter BW Hz'
|
|
357
|
+
)
|
|
358
|
+
|
|
359
|
+
# Sets up + activates a CS16 RX stream. Extends handle in place
|
|
360
|
+
#{self}.start_rx(
|
|
361
|
+
handle: 'required - from .open',
|
|
362
|
+
samples: 'optional - MTU / read block size (default 65536)'
|
|
363
|
+
)
|
|
364
|
+
|
|
365
|
+
# Run read sync and return its result
|
|
366
|
+
#{self}.read_sync(
|
|
367
|
+
handle: 'required - from .start_rx',
|
|
368
|
+
timeout_us: 'optional - microseconds (default 1_000_000)'
|
|
369
|
+
)
|
|
370
|
+
|
|
371
|
+
# Run stop rx and return its result
|
|
372
|
+
#{self}.stop_rx(
|
|
373
|
+
handle: 'optional - handle value consumed by #stop_rx'
|
|
374
|
+
)
|
|
375
|
+
|
|
376
|
+
# Close a session previously returned by #open.
|
|
377
|
+
#{self}.close(
|
|
378
|
+
handle: 'optional - handle value consumed by #close',
|
|
379
|
+
device: 'optional - device value consumed by #close'
|
|
380
|
+
)
|
|
381
|
+
|
|
382
|
+
# Print the AUTHOR(S) string for this module.
|
|
334
383
|
#{self}.authors
|
|
335
384
|
"
|
|
385
|
+
constants.sort
|
|
336
386
|
end
|
|
337
387
|
end
|
|
338
388
|
end
|
data/lib/pwn/ffi/stdio.rb
CHANGED
|
@@ -34,17 +34,14 @@ module PWN
|
|
|
34
34
|
# Display Usage for this Module
|
|
35
35
|
|
|
36
36
|
public_class_method def self.help
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
#{self}.puts string
|
|
41
|
-
#{self}.printf(\"format string\", str, int, etc)
|
|
42
|
-
|
|
43
|
-
scanf_buffer = FFI::MemoryPointer.new(:char, 100)
|
|
44
|
-
#{self}.scanf(\"format string\", scanf_buffer)
|
|
37
|
+
puts "USAGE:
|
|
38
|
+
# Run available and return its result
|
|
39
|
+
#{self}.available?
|
|
45
40
|
|
|
41
|
+
# Print the AUTHOR(S) string for this module.
|
|
46
42
|
#{self}.authors
|
|
47
43
|
"
|
|
44
|
+
constants.sort
|
|
48
45
|
end
|
|
49
46
|
end
|
|
50
47
|
end
|
data/lib/pwn/ffi/volk.rb
CHANGED
|
@@ -173,16 +173,45 @@ module PWN
|
|
|
173
173
|
|
|
174
174
|
public_class_method def self.help
|
|
175
175
|
puts "USAGE:
|
|
176
|
-
#
|
|
177
|
-
#{self}.
|
|
178
|
-
#{self}.accumulate(samples:) # Σ samples
|
|
179
|
-
#{self}.magnitude_squared(iq:) # |z|² per complex pair
|
|
180
|
-
#{self}.sqrt(samples:)
|
|
181
|
-
#{self}.scale(samples:, factor:)
|
|
182
|
-
#{self}.dot_prod(a:, b:)
|
|
176
|
+
# Run available and return its result
|
|
177
|
+
#{self}.available?
|
|
183
178
|
|
|
179
|
+
# Run unpack s16le and return its result
|
|
180
|
+
#{self}.unpack_s16le(
|
|
181
|
+
data: 'required - raw String of little-endian signed 16-bit PCM'
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
# Run accumulate and return its result
|
|
185
|
+
#{self}.accumulate(
|
|
186
|
+
samples: 'optional - samples value consumed by #accumulate'
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
# Run magnitude squared and return its result
|
|
190
|
+
#{self}.magnitude_squared(
|
|
191
|
+
iq: 'required - Array of interleaved I/Q Floats (even length)'
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
# Run sqrt and return its result
|
|
195
|
+
#{self}.sqrt(
|
|
196
|
+
samples: 'optional - samples value consumed by #sqrt'
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
# Run scale and return its result
|
|
200
|
+
#{self}.scale(
|
|
201
|
+
samples: 'optional - samples value consumed by #scale',
|
|
202
|
+
factor: 'optional - factor value consumed by #scale'
|
|
203
|
+
)
|
|
204
|
+
|
|
205
|
+
# Run dot prod and return its result
|
|
206
|
+
#{self}.dot_prod(
|
|
207
|
+
a: 'required - a value consumed by #dot_prod',
|
|
208
|
+
b: 'required - b value consumed by #dot_prod'
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
# Print the AUTHOR(S) string for this module.
|
|
184
212
|
#{self}.authors
|
|
185
213
|
"
|
|
214
|
+
constants.sort
|
|
186
215
|
end
|
|
187
216
|
|
|
188
217
|
class << self
|
data/lib/pwn/ffi.rb
CHANGED
|
@@ -59,6 +59,18 @@ module PWN
|
|
|
59
59
|
# Display a List of Every PWN::FFI Module
|
|
60
60
|
|
|
61
61
|
public_class_method def self.help
|
|
62
|
+
puts "USAGE:
|
|
63
|
+
# Run available and return its result
|
|
64
|
+
#{self}.available?(
|
|
65
|
+
mod: 'required - Symbol or Module (e.g. :Liquid or PWN::FFI::Liquid)'
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
# Returns { ModuleName => true|false } for every registered binding
|
|
69
|
+
#{self}.backends
|
|
70
|
+
|
|
71
|
+
# Print the AUTHOR(S) string for this module.
|
|
72
|
+
#{self}.authors
|
|
73
|
+
"
|
|
62
74
|
constants.sort
|
|
63
75
|
end
|
|
64
76
|
end
|
data/lib/pwn/memory.rb
CHANGED
|
@@ -600,22 +600,142 @@ module PWN
|
|
|
600
600
|
|
|
601
601
|
# Display Usage for this Module
|
|
602
602
|
public_class_method def self.help
|
|
603
|
-
puts
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
603
|
+
puts "USAGE:
|
|
604
|
+
# Run load and return its result
|
|
605
|
+
#{self}.load
|
|
606
|
+
|
|
607
|
+
# Run save and return its result
|
|
608
|
+
#{self}.save(
|
|
609
|
+
mem: 'optional - mem value consumed by #save',
|
|
610
|
+
force: 'optional - force value consumed by #save'
|
|
611
|
+
)
|
|
612
|
+
|
|
613
|
+
# Run remember and return its result
|
|
614
|
+
#{self}.remember(
|
|
615
|
+
key: 'required - Symbol or String key for the memory fact',
|
|
616
|
+
value: 'required - The value (any JSON serializable)',
|
|
617
|
+
category: 'optional - e.g. :fact, :preference, :lesson, :env (default: :fact)',
|
|
618
|
+
source: 'optional - :human | :reflect | :heuristic | :resolve | :consolidate (M3 provenance)',
|
|
619
|
+
confidence: 'optional - 0.0..1.0 how sure the writer was (M3)',
|
|
620
|
+
importance: 'optional - 0.0..1.0 retrieval/eviction weight (M2/M3)',
|
|
621
|
+
ttl: 'optional - seconds until stale (M3; consolidate evicts stale low-conf first)'
|
|
622
|
+
)
|
|
623
|
+
|
|
624
|
+
# Run recall and return its result
|
|
625
|
+
#{self}.recall(
|
|
626
|
+
query: 'optional - string to search keys/values/categories (simple match)',
|
|
627
|
+
category: 'optional - filter by category (:session = transcript only)',
|
|
628
|
+
limit: 'optional - max results (default 50)',
|
|
629
|
+
session_id: 'optional - current session (default Env/Pry active id)',
|
|
630
|
+
include_session: 'optional - include session value consumed by #recall'
|
|
631
|
+
)
|
|
632
|
+
|
|
633
|
+
# Resolve the active pwn-ai session id (Env, then Pry config)
|
|
634
|
+
#{self}.current_session_id(
|
|
635
|
+
session_id: 'optional - session id value consumed by #current_session_id'
|
|
636
|
+
)
|
|
637
|
+
|
|
638
|
+
# Walk the current session transcript from the previous assistant response
|
|
639
|
+
#{self}.session_turns(
|
|
640
|
+
session_id: 'optional - session id value consumed by #session_turns',
|
|
641
|
+
query: 'required - search query string',
|
|
642
|
+
limit: 'optional - limit value consumed by #session_turns'
|
|
643
|
+
)
|
|
644
|
+
|
|
645
|
+
# Run recent dialog and return its result
|
|
646
|
+
#{self}.recent_dialog(
|
|
647
|
+
session_id: 'optional - session id value consumed by #recent_dialog',
|
|
648
|
+
pairs: 'optional - max user/assistant pairs (default 2)',
|
|
649
|
+
max_chars: 'optional - per-turn truncation (default 1200)'
|
|
650
|
+
)
|
|
651
|
+
|
|
652
|
+
# Previous non-empty user message in the active session (what the human
|
|
653
|
+
#{self}.prior_user_message(
|
|
654
|
+
pairs: 'optional - pairs value consumed by #prior_user_message',
|
|
655
|
+
max_chars: 'optional - max chars value consumed by #prior_user_message (defaults to 4_000)',
|
|
656
|
+
skip_meta: 'optional - skip meta value consumed by #prior_user_message',
|
|
657
|
+
session_id: 'optional - session id value consumed by #prior_user_message'
|
|
658
|
+
)
|
|
659
|
+
|
|
660
|
+
# Previous non-empty assistant message in the active session
|
|
661
|
+
#{self}.prior_assistant_message(
|
|
662
|
+
pairs: 'optional - pairs value consumed by #prior_assistant_message',
|
|
663
|
+
max_chars: 'optional - max chars value consumed by #prior_assistant_message (defaults to 4_000)',
|
|
664
|
+
skip_meta: 'optional - skip meta value consumed by #prior_assistant_message',
|
|
665
|
+
session_id: 'optional - session id value consumed by #prior_assistant_message'
|
|
666
|
+
)
|
|
667
|
+
|
|
668
|
+
# Build chronological user→assistant pairs from the active session
|
|
669
|
+
#{self}.turn_pairs(
|
|
670
|
+
pairs: 'optional - pairs value consumed by #turn_pairs',
|
|
671
|
+
max_chars: 'optional - max chars value consumed by #turn_pairs',
|
|
672
|
+
session_id: 'optional - session id value consumed by #turn_pairs',
|
|
673
|
+
include_orphan_user: 'optional - include orphan user value consumed by #turn_pairs'
|
|
674
|
+
)
|
|
675
|
+
|
|
676
|
+
# Find a user↔assistant pair in the active session
|
|
677
|
+
#{self}.find_turn_pair(
|
|
678
|
+
match: 'required - match value consumed by #find_turn_pair',
|
|
679
|
+
skip_meta: 'optional - skip meta value consumed by #find_turn_pair',
|
|
680
|
+
session_id: 'optional - session id value consumed by #find_turn_pair',
|
|
681
|
+
pairs: 'optional - pairs value consumed by #find_turn_pair (defaults to 12)',
|
|
682
|
+
max_chars: 'optional - max chars value consumed by #find_turn_pair (defaults to 4_000)'
|
|
683
|
+
)
|
|
684
|
+
|
|
685
|
+
# Run meta recall user and return its result
|
|
686
|
+
#{self}.meta_recall_user?(
|
|
687
|
+
text: 'optional - text value consumed by #meta_recall_user?'
|
|
688
|
+
)
|
|
689
|
+
|
|
690
|
+
# Run meta recall assistant and return its result
|
|
691
|
+
#{self}.meta_recall_assistant?(
|
|
692
|
+
text: 'optional - text value consumed by #meta_recall_assistant?'
|
|
693
|
+
)
|
|
694
|
+
|
|
695
|
+
# Run normalize utterance and return its result
|
|
696
|
+
#{self}.normalize_utterance(
|
|
697
|
+
text: 'optional - text value consumed by #normalize_utterance'
|
|
698
|
+
)
|
|
699
|
+
|
|
700
|
+
# Run recall semantic and return its result
|
|
701
|
+
#{self}.recall_semantic(
|
|
702
|
+
query: 'optional - search query string',
|
|
703
|
+
limit: 'optional - limit value consumed by #recall_semantic'
|
|
704
|
+
)
|
|
705
|
+
|
|
706
|
+
# Refuses PROTECT_KEY_PREFIXES / PROTECT_CATEGORIES unless force:true
|
|
707
|
+
#{self}.forget(
|
|
708
|
+
key: 'required - key value consumed by #forget',
|
|
709
|
+
force: 'optional - Boolean bypass protect policy (default false)'
|
|
710
|
+
)
|
|
711
|
+
|
|
712
|
+
# Requires force:true — protected prefs/SOPs must not vanish via bare clear
|
|
713
|
+
#{self}.clear(
|
|
714
|
+
force: 'required - force value consumed by #clear'
|
|
715
|
+
)
|
|
716
|
+
|
|
717
|
+
# Run to context and return its result
|
|
718
|
+
#{self}.to_context(
|
|
719
|
+
limit: 'optional - limit value consumed by #to_context (defaults to 20)'
|
|
720
|
+
)
|
|
721
|
+
|
|
722
|
+
# True when a memory key must survive cap eviction / age GC
|
|
723
|
+
#{self}.protected_entry?(
|
|
724
|
+
key: 'optional - key value consumed by #protected_entry?',
|
|
725
|
+
entry: 'optional - entry value consumed by #protected_entry?'
|
|
726
|
+
)
|
|
727
|
+
|
|
728
|
+
# Run lean and return its result
|
|
729
|
+
#{self}.lean!(
|
|
730
|
+
dry_run: 'optional - Boolean plan only (default false)',
|
|
731
|
+
value_max_chars: 'optional - truncate values (default VALUE_MAX_CHARS)',
|
|
732
|
+
ephemeral_ttl_secs: 'optional - drop expired session_* keys'
|
|
733
|
+
)
|
|
734
|
+
|
|
735
|
+
# Print the AUTHOR(S) string for this module.
|
|
736
|
+
#{self}.authors
|
|
737
|
+
"
|
|
738
|
+
constants.sort
|
|
619
739
|
end
|
|
620
740
|
end
|
|
621
741
|
end
|
data/lib/pwn/memory_index.rb
CHANGED
|
@@ -281,25 +281,40 @@ module PWN
|
|
|
281
281
|
# Display Usage for this Module
|
|
282
282
|
|
|
283
283
|
public_class_method def self.help
|
|
284
|
-
puts
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
284
|
+
puts "USAGE:
|
|
285
|
+
# Run available and return its result
|
|
286
|
+
#{self}.available?
|
|
287
|
+
|
|
288
|
+
# Run recall semantic and return its result
|
|
289
|
+
#{self}.recall_semantic(
|
|
290
|
+
query: 'required - user request / search text',
|
|
291
|
+
limit: 'optional - top-K by cosine similarity (default 6)'
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
# Run to context and return its result
|
|
295
|
+
#{self}.to_context(
|
|
296
|
+
limit: 'optional - limit value consumed by #to_context (defaults to 6)',
|
|
297
|
+
drop_hygiene_sops: 'optional - drop hygiene sops value consumed by #to_context',
|
|
298
|
+
query: 'optional - search query string'
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
# Run refresh and return its result
|
|
302
|
+
#{self}.refresh(
|
|
303
|
+
mem: 'optional - mem value consumed by #refresh (defaults to PWN::Memory.load)'
|
|
304
|
+
)
|
|
305
|
+
|
|
306
|
+
# Run embed and return its result
|
|
307
|
+
#{self}.embed(
|
|
308
|
+
texts: 'required - Array texts value consumed by #embed'
|
|
309
|
+
)
|
|
310
|
+
|
|
311
|
+
# Run reset and return its result
|
|
312
|
+
#{self}.reset
|
|
313
|
+
|
|
314
|
+
# Print the AUTHOR(S) string for this module.
|
|
315
|
+
#{self}.authors
|
|
316
|
+
"
|
|
317
|
+
constants.sort
|
|
303
318
|
end
|
|
304
319
|
end
|
|
305
320
|
end
|
data/lib/pwn/migrate.rb
CHANGED
|
@@ -679,40 +679,50 @@ module PWN
|
|
|
679
679
|
|
|
680
680
|
public_class_method def self.help
|
|
681
681
|
puts "USAGE:
|
|
682
|
-
#
|
|
683
|
-
#{self}.
|
|
682
|
+
# Run installed schema and return its result
|
|
683
|
+
#{self}.installed_schema
|
|
684
684
|
|
|
685
|
-
#
|
|
686
|
-
#{self}.
|
|
687
|
-
#{self}.check # human-readable to $stdout
|
|
685
|
+
# Run needed and return its result
|
|
686
|
+
#{self}.needed?
|
|
688
687
|
|
|
689
|
-
#
|
|
690
|
-
#
|
|
688
|
+
# Run status and return its result
|
|
689
|
+
#{self}.status
|
|
690
|
+
|
|
691
|
+
# Human-readable ~/.pwn state doctor. Read-only. Called from
|
|
692
|
+
#{self}.check(
|
|
693
|
+
io: 'optional - IO to write the report to (default $stdout)'
|
|
694
|
+
)
|
|
695
|
+
|
|
696
|
+
# Run run and return its result
|
|
691
697
|
#{self}.run(
|
|
692
|
-
fix:
|
|
693
|
-
backup:
|
|
694
|
-
dry_run: 'optional - default false',
|
|
695
|
-
key:
|
|
696
|
-
iv:
|
|
698
|
+
fix: 'optional - also autofix incompatible files (default: schema-migrations only)',
|
|
699
|
+
backup: 'optional - take timestamped backup of ~/.pwn first (default true)',
|
|
700
|
+
dry_run: 'optional - report what WOULD happen, write nothing (default false)',
|
|
701
|
+
key: 'optional - vault key (default: read ~/.pwn/pwn.yaml.decryptor)',
|
|
702
|
+
iv: 'optional - vault iv (default: read ~/.pwn/pwn.yaml.decryptor)',
|
|
703
|
+
io: 'optional - IO to write to (default $stdout)'
|
|
697
704
|
)
|
|
698
705
|
|
|
699
|
-
#
|
|
700
|
-
#
|
|
701
|
-
|
|
702
|
-
|
|
706
|
+
# Run vault drift and return its result
|
|
707
|
+
#{self}.vault_drift(
|
|
708
|
+
key: 'optional - vault key, iv: optional - vault iv'
|
|
709
|
+
)
|
|
703
710
|
|
|
704
|
-
#
|
|
705
|
-
#{self}
|
|
706
|
-
|
|
707
|
-
|
|
711
|
+
# Run backfill vault and return its result
|
|
712
|
+
#{self}.backfill_vault(
|
|
713
|
+
key: 'optional - optional, iv: optional, dry_run: false, io: $stdout',
|
|
714
|
+
io: 'optional - io value consumed by #backfill_vault',
|
|
715
|
+
dry_run: 'optional - dry run value consumed by #backfill_vault',
|
|
716
|
+
iv: 'optional - iv value consumed by #backfill_vault'
|
|
717
|
+
)
|
|
708
718
|
|
|
709
|
-
#
|
|
710
|
-
|
|
711
|
-
pwn setup --migrate --fix # == #{self}.run(fix: true)
|
|
712
|
-
pwn setup --migrate --dry-run
|
|
719
|
+
# Run env template and return its result
|
|
720
|
+
#{self}.env_template
|
|
713
721
|
|
|
722
|
+
# Print the AUTHOR(S) string for this module.
|
|
714
723
|
#{self}.authors
|
|
715
724
|
"
|
|
725
|
+
constants.sort
|
|
716
726
|
end
|
|
717
727
|
end
|
|
718
728
|
end
|
data/lib/pwn/module_skills.rb
CHANGED
|
@@ -435,14 +435,45 @@ module PWN
|
|
|
435
435
|
end
|
|
436
436
|
|
|
437
437
|
public_class_method def self.help
|
|
438
|
-
puts
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
#
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
438
|
+
puts "USAGE:
|
|
439
|
+
# Run enumerate and return its result
|
|
440
|
+
#{self}.enumerate(
|
|
441
|
+
lib_root: 'optional - lib root value consumed by #enumerate'
|
|
442
|
+
)
|
|
443
|
+
|
|
444
|
+
# Run relpath and return its result
|
|
445
|
+
#{self}.relpath(
|
|
446
|
+
source: 'optional - source value consumed by #relpath',
|
|
447
|
+
const: 'optional - const value consumed by #relpath'
|
|
448
|
+
)
|
|
449
|
+
|
|
450
|
+
# Run render and return its result
|
|
451
|
+
#{self}.render(
|
|
452
|
+
module: 'optional - module value consumed by #render (defaults to opts)'
|
|
453
|
+
)
|
|
454
|
+
|
|
455
|
+
# Run refresh and return its result
|
|
456
|
+
#{self}.refresh!(
|
|
457
|
+
dest: 'required - dest value consumed by #refresh!',
|
|
458
|
+
lib_root: 'optional - lib root value consumed by #refresh!'
|
|
459
|
+
)
|
|
460
|
+
|
|
461
|
+
# Run drift and return its result
|
|
462
|
+
#{self}.drift(
|
|
463
|
+
dest: 'required - dest value consumed by #drift',
|
|
464
|
+
lib_root: 'optional - lib root value consumed by #drift'
|
|
465
|
+
)
|
|
466
|
+
|
|
467
|
+
# Run install and return its result
|
|
468
|
+
#{self}.install(
|
|
469
|
+
pwn_skills_path: 'required - pwn skills path value consumed by #install',
|
|
470
|
+
source: 'optional - source value consumed by #install'
|
|
471
|
+
)
|
|
472
|
+
|
|
473
|
+
# Print the AUTHOR(S) string for this module.
|
|
474
|
+
#{self}.authors
|
|
475
|
+
"
|
|
476
|
+
constants.sort
|
|
446
477
|
end
|
|
447
478
|
end
|
|
448
479
|
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'open3'
|
|
4
|
+
|
|
5
|
+
module PWN
|
|
6
|
+
module Plugins
|
|
7
|
+
# AFL++ campaign wrapper.
|
|
8
|
+
module AFLplusplus
|
|
9
|
+
public_class_method def self.required_bins
|
|
10
|
+
%w[afl-fuzz]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
public_class_method def self.fuzz(opts = {})
|
|
14
|
+
PWN::Plugins::Doctor.require_bin!(name: 'afl-fuzz')
|
|
15
|
+
in_dir = opts[:in_dir] || opts[:corpus]
|
|
16
|
+
out_dir = opts[:out_dir] || opts[:output]
|
|
17
|
+
target = opts[:target]
|
|
18
|
+
raise 'ERROR: in_dir, out_dir, and target are required' if in_dir.to_s.empty? || out_dir.to_s.empty? || target.to_s.empty?
|
|
19
|
+
|
|
20
|
+
cmd = ['afl-fuzz', '-i', in_dir.to_s, '-o', out_dir.to_s, '--', target.to_s]
|
|
21
|
+
cmd.concat(Array(opts[:args]))
|
|
22
|
+
stdout, stderr, status = Open3.capture3(*cmd)
|
|
23
|
+
{ stdout: stdout, stderr: stderr, exit: status.exitstatus }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
public_class_method def self.authors
|
|
27
|
+
"AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
public_class_method def self.help
|
|
31
|
+
puts "USAGE:
|
|
32
|
+
# List host binaries this module expects to be installed.
|
|
33
|
+
#{self}.required_bins
|
|
34
|
+
|
|
35
|
+
# Run fuzz and return its result
|
|
36
|
+
#{self}.fuzz(
|
|
37
|
+
in_dir: 'required - in dir value consumed by #fuzz (defaults to opts[:corpus])',
|
|
38
|
+
corpus: 'optional - corpus value consumed by #fuzz',
|
|
39
|
+
out_dir: 'required - out dir value consumed by #fuzz (defaults to opts[:output])',
|
|
40
|
+
output: 'optional - output value consumed by #fuzz',
|
|
41
|
+
target: 'required - hostname, IP, or CIDR to scan',
|
|
42
|
+
args: 'optional - Array args value consumed by #fuzz'
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
# Print the AUTHOR(S) string for this module.
|
|
46
|
+
#{self}.authors
|
|
47
|
+
"
|
|
48
|
+
constants.sort
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|