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/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
|
data/lib/pwn/ffi/fftw.rb
CHANGED
|
@@ -178,14 +178,39 @@ module PWN
|
|
|
178
178
|
|
|
179
179
|
public_class_method def self.help
|
|
180
180
|
puts "USAGE:
|
|
181
|
-
#
|
|
182
|
-
#{self}.
|
|
183
|
-
|
|
184
|
-
#
|
|
185
|
-
#{self}.
|
|
186
|
-
|
|
181
|
+
# Run available and return its result
|
|
182
|
+
#{self}.available?
|
|
183
|
+
|
|
184
|
+
# Run rfft and return its result
|
|
185
|
+
#{self}.rfft(
|
|
186
|
+
samples: 'required - Array<Float> real input (length = n)',
|
|
187
|
+
n: 'optional - FFT size (default samples.length; zero-pads/truncates)'
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
# Run rfft magnitude and return its result
|
|
191
|
+
#{self}.rfft_magnitude(
|
|
192
|
+
samples: 'required - samples value consumed by #rfft_magnitude',
|
|
193
|
+
n: 'optional - FFT size'
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
# Run rfft power db and return its result
|
|
197
|
+
#{self}.rfft_power_db(
|
|
198
|
+
samples: 'required - samples value consumed by #rfft_power_db',
|
|
199
|
+
n: 'optional - FFT size',
|
|
200
|
+
floor: 'optional - dB floor for zeros (default -120.0)'
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
# Run cfft and return its result
|
|
204
|
+
#{self}.cfft(
|
|
205
|
+
iq: 'required - interleaved Array<Float> I/Q (even length)',
|
|
206
|
+
n: 'optional - number of complex samples (default iq.length/2)',
|
|
207
|
+
sign: 'optional - :forward (default) or :backward'
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
# Print the AUTHOR(S) string for this module.
|
|
187
211
|
#{self}.authors
|
|
188
212
|
"
|
|
213
|
+
constants.sort
|
|
189
214
|
end
|
|
190
215
|
end
|
|
191
216
|
end
|
data/lib/pwn/ffi/hack_rf.rb
CHANGED
|
@@ -282,19 +282,70 @@ module PWN
|
|
|
282
282
|
|
|
283
283
|
public_class_method def self.help
|
|
284
284
|
puts "USAGE:
|
|
285
|
+
# Run available and return its result
|
|
285
286
|
#{self}.available?
|
|
287
|
+
|
|
288
|
+
# Run info and return its result
|
|
286
289
|
#{self}.info
|
|
287
|
-
dev = #{self}.open(serial: nil)
|
|
288
|
-
#{self}.configure(device: dev, freq_hz:, rate_hz: 10e6, lna_gain: 16, vga_gain: 20, amp: false)
|
|
289
|
-
rx = #{self}.start_rx(device: dev)
|
|
290
|
-
data = #{self}.read_sync(handle: rx) # cs8 interleaved I/Q
|
|
291
|
-
#{self}.stop_rx(handle: rx)
|
|
292
|
-
data = #{self}.capture(freq_hz:, rate_hz: 10e6, samples: 262_144)
|
|
293
|
-
#{self}.device_info(device: dev)
|
|
294
|
-
#{self}.close(device: dev)
|
|
295
290
|
|
|
291
|
+
# Open a session or connection and return a handle.
|
|
292
|
+
#{self}.open(
|
|
293
|
+
serial: 'optional - serial value consumed by #open'
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
# Close a session previously returned by #open.
|
|
297
|
+
#{self}.close(
|
|
298
|
+
device: 'optional - device value consumed by #close'
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
# Run configure and return its result
|
|
302
|
+
#{self}.configure(
|
|
303
|
+
device: 'required - pointer from .open',
|
|
304
|
+
freq_hz: 'required - center frequency Hz',
|
|
305
|
+
rate_hz: 'optional - sample rate (default 10e6)',
|
|
306
|
+
lna_gain: 'optional - 0..40 step 8 (default 16)',
|
|
307
|
+
vga_gain: 'optional - 0..62 step 2 (default 20)',
|
|
308
|
+
amp: 'optional - true/false RF amp (default false)',
|
|
309
|
+
bb_bw_hz: 'optional - baseband filter BW Hz'
|
|
310
|
+
)
|
|
311
|
+
|
|
312
|
+
# Run device info and return its result
|
|
313
|
+
#{self}.device_info(
|
|
314
|
+
device: 'required - device value consumed by #device_info'
|
|
315
|
+
)
|
|
316
|
+
|
|
317
|
+
# Run start rx and return its result
|
|
318
|
+
#{self}.start_rx(
|
|
319
|
+
device: 'required - pointer from .open',
|
|
320
|
+
max_queue: 'optional - max buffered chunks (default 64)'
|
|
321
|
+
)
|
|
322
|
+
|
|
323
|
+
# Run read sync and return its result
|
|
324
|
+
#{self}.read_sync(
|
|
325
|
+
handle: 'required - handle from .start_rx',
|
|
326
|
+
timeout: 'optional - seconds to wait for a chunk (default 1.0)'
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
# Run stop rx and return its result
|
|
330
|
+
#{self}.stop_rx(
|
|
331
|
+
handle: 'optional - handle value consumed by #stop_rx'
|
|
332
|
+
)
|
|
333
|
+
|
|
334
|
+
# Run capture and return its result
|
|
335
|
+
#{self}.capture(
|
|
336
|
+
freq_hz: 'required - center frequency Hz',
|
|
337
|
+
rate_hz: 'optional - sample rate (default 10e6)',
|
|
338
|
+
samples: 'optional - I/Q sample pairs to capture (default 262_144)',
|
|
339
|
+
lna_gain: 'optional - optional, vga_gain: optional, amp: optional',
|
|
340
|
+
serial: 'optional - serial value consumed by #capture',
|
|
341
|
+
vga_gain: 'optional - vga gain value consumed by #capture',
|
|
342
|
+
amp: 'optional - amp value consumed by #capture'
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
# Print the AUTHOR(S) string for this module.
|
|
296
346
|
#{self}.authors
|
|
297
347
|
"
|
|
348
|
+
constants.sort
|
|
298
349
|
end
|
|
299
350
|
|
|
300
351
|
class << self
|
data/lib/pwn/ffi/liquid.rb
CHANGED
|
@@ -395,18 +395,71 @@ module PWN
|
|
|
395
395
|
|
|
396
396
|
public_class_method def self.help
|
|
397
397
|
puts "USAGE:
|
|
398
|
-
#
|
|
399
|
-
#{self}.
|
|
400
|
-
|
|
401
|
-
#
|
|
402
|
-
#{self}.
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
398
|
+
# Run available and return its result
|
|
399
|
+
#{self}.available?
|
|
400
|
+
|
|
401
|
+
# Run freq demod and return its result
|
|
402
|
+
#{self}.freq_demod(
|
|
403
|
+
iq: 'required - interleaved I/Q Array<Float> (even length)',
|
|
404
|
+
kf: 'optional - modulation factor (default 0.5)'
|
|
405
|
+
)
|
|
406
|
+
|
|
407
|
+
# Run resample and return its result
|
|
408
|
+
#{self}.resample(
|
|
409
|
+
samples: 'required - samples value consumed by #resample',
|
|
410
|
+
rate: 'required - output/input ratio (>0)',
|
|
411
|
+
as_db: 'optional - stop-band attenuation dB (default 60.0)'
|
|
412
|
+
)
|
|
413
|
+
|
|
414
|
+
# Run fir kaiser and return its result
|
|
415
|
+
#{self}.fir_kaiser(
|
|
416
|
+
samples: 'required - samples value consumed by #fir_kaiser',
|
|
417
|
+
length: 'optional - filter length (default 51, odd preferred)',
|
|
418
|
+
fc: 'optional - normalised cutoff 0..0.5 (default 0.1)',
|
|
419
|
+
as_db: 'optional - stop-band attenuation dB (default 60.0)',
|
|
420
|
+
mu: 'optional - fractional sample offset (default 0.0)'
|
|
421
|
+
)
|
|
422
|
+
|
|
423
|
+
# Run dc block and return its result
|
|
424
|
+
#{self}.dc_block(
|
|
425
|
+
samples: 'required - samples value consumed by #dc_block',
|
|
426
|
+
m: 'optional - prototype semi-length (default 7 → len 15)',
|
|
427
|
+
as_db: 'optional - stop-band attenuation dB (default 60.0)'
|
|
428
|
+
)
|
|
429
|
+
|
|
430
|
+
# Run resample iq and return its result
|
|
431
|
+
#{self}.resample_iq(
|
|
432
|
+
iq: 'required - interleaved I/Q Array<Float>',
|
|
433
|
+
rate: 'required - output/input ratio (>0)',
|
|
434
|
+
as_db: 'optional - stop-band attenuation dB (default 60.0)'
|
|
435
|
+
)
|
|
436
|
+
|
|
437
|
+
# Run mix down and return its result
|
|
438
|
+
#{self}.mix_down(
|
|
439
|
+
iq: 'required - interleaved I/Q Array<Float>',
|
|
440
|
+
freq: 'required - normalised angular freq (rad/sample, i.e. 2π·f/fs)'
|
|
441
|
+
)
|
|
442
|
+
|
|
443
|
+
# Run gmsk demod and return its result
|
|
444
|
+
#{self}.gmsk_demod(
|
|
445
|
+
iq: 'required - interleaved I/Q Array<Float>, length = k·sym·2',
|
|
446
|
+
sps: 'required - samples per symbol (integer ≥ 2)',
|
|
447
|
+
m: 'optional - filter delay (default 3)',
|
|
448
|
+
bt: 'optional - Gaussian BT (default 0.35)'
|
|
449
|
+
)
|
|
450
|
+
|
|
451
|
+
# Run mfsk demod and return its result
|
|
452
|
+
#{self}.mfsk_demod(
|
|
453
|
+
iq: 'required - interleaved I/Q Array<Float>',
|
|
454
|
+
m: 'required - bits per symbol (1=2FSK, 2=4FSK, …)',
|
|
455
|
+
sps: 'required - samples per symbol (integer ≥ 2^m)',
|
|
456
|
+
bw: 'optional - normalised bandwidth 0..0.5 (default 0.25)'
|
|
457
|
+
)
|
|
458
|
+
|
|
459
|
+
# Print the AUTHOR(S) string for this module.
|
|
408
460
|
#{self}.authors
|
|
409
461
|
"
|
|
462
|
+
constants.sort
|
|
410
463
|
end
|
|
411
464
|
|
|
412
465
|
class << self
|