@elizaos/skills 2.0.0-alpha.3
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.
- package/README.md +126 -0
- package/package.json +53 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +96 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/bird/SKILL.md +224 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +203 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +284 -0
- package/skills/discord/SKILL.md +578 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/food-order/SKILL.md +48 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +77 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +74 -0
- package/skills/local-places/SERVER_README.md +101 -0
- package/skills/local-places/SKILL.md +102 -0
- package/skills/local-places/pyproject.toml +21 -0
- package/skills/local-places/src/local_places/__init__.py +2 -0
- package/skills/local-places/src/local_places/google_places.py +314 -0
- package/skills/local-places/src/local_places/main.py +65 -0
- package/skills/local-places/src/local_places/schemas.py +107 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +310 -0
- package/skills/nano-banana-pro/SKILL.md +58 -0
- package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/notion/SKILL.md +172 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-image-gen/SKILL.md +89 -0
- package/skills/openai-image-gen/scripts/gen.py +240 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +52 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +51 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/security-ask-questions-if-underspecified/.claude-plugin/plugin.json +10 -0
- package/skills/security-ask-questions-if-underspecified/README.md +24 -0
- package/skills/security-ask-questions-if-underspecified/skills/ask-questions-if-underspecified/SKILL.md +85 -0
- package/skills/security-audit-context-building/.claude-plugin/plugin.json +10 -0
- package/skills/security-audit-context-building/README.md +58 -0
- package/skills/security-audit-context-building/commands/audit-context.md +21 -0
- package/skills/security-audit-context-building/skills/audit-context-building/SKILL.md +297 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/COMPLETENESS_CHECKLIST.md +47 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/FUNCTION_MICRO_ANALYSIS_EXAMPLE.md +355 -0
- package/skills/security-audit-context-building/skills/audit-context-building/resources/OUTPUT_REQUIREMENTS.md +71 -0
- package/skills/security-building-secure-contracts/.claude-plugin/plugin.json +10 -0
- package/skills/security-building-secure-contracts/README.md +241 -0
- package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/SKILL.md +284 -0
- package/skills/security-building-secure-contracts/skills/algorand-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +405 -0
- package/skills/security-building-secure-contracts/skills/audit-prep-assistant/SKILL.md +409 -0
- package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/SKILL.md +329 -0
- package/skills/security-building-secure-contracts/skills/cairo-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +722 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/SKILL.md +218 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/ASSESSMENT_CRITERIA.md +355 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/EXAMPLE_REPORT.md +248 -0
- package/skills/security-building-secure-contracts/skills/code-maturity-assessor/resources/REPORT_FORMAT.md +33 -0
- package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/SKILL.md +334 -0
- package/skills/security-building-secure-contracts/skills/cosmos-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +740 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/SKILL.md +252 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/ASSESSMENT_AREAS.md +329 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/DELIVERABLES.md +118 -0
- package/skills/security-building-secure-contracts/skills/guidelines-advisor/resources/EXAMPLE_REPORT.md +298 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/SKILL.md +161 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/EXAMPLE_REPORT.md +279 -0
- package/skills/security-building-secure-contracts/skills/secure-workflow-guide/resources/WORKFLOW_STEPS.md +132 -0
- package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/SKILL.md +389 -0
- package/skills/security-building-secure-contracts/skills/solana-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +669 -0
- package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/SKILL.md +298 -0
- package/skills/security-building-secure-contracts/skills/substrate-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +791 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/SKILL.md +362 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/ASSESSMENT_CATEGORIES.md +571 -0
- package/skills/security-building-secure-contracts/skills/token-integration-analyzer/resources/REPORT_TEMPLATES.md +141 -0
- package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/SKILL.md +388 -0
- package/skills/security-building-secure-contracts/skills/ton-vulnerability-scanner/resources/VULNERABILITY_PATTERNS.md +595 -0
- package/skills/security-burpsuite-project-parser/.claude-plugin/plugin.json +10 -0
- package/skills/security-burpsuite-project-parser/README.md +103 -0
- package/skills/security-burpsuite-project-parser/commands/burp-search.md +18 -0
- package/skills/security-burpsuite-project-parser/skills/SKILL.md +358 -0
- package/skills/security-burpsuite-project-parser/skills/scripts/burp-search.sh +99 -0
- package/skills/security-claude-in-chrome-troubleshooting/.claude-plugin/plugin.json +8 -0
- package/skills/security-claude-in-chrome-troubleshooting/README.md +31 -0
- package/skills/security-claude-in-chrome-troubleshooting/skills/claude-in-chrome-troubleshooting/SKILL.md +251 -0
- package/skills/security-constant-time-analysis/.claude-plugin/plugin.json +9 -0
- package/skills/security-constant-time-analysis/README.md +381 -0
- package/skills/security-constant-time-analysis/commands/ct-check.md +20 -0
- package/skills/security-constant-time-analysis/ct_analyzer/__init__.py +49 -0
- package/skills/security-constant-time-analysis/ct_analyzer/analyzer.py +1284 -0
- package/skills/security-constant-time-analysis/ct_analyzer/script_analyzers.py +3081 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/__init__.py +1 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_analyzer.py +1397 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/bn_excerpt.js +205 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_constant_time.c +181 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.c +74 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.go +78 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/decompose_vulnerable.rs +92 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.cs +174 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.java +161 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.kt +181 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.php +140 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.py +252 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.rb +188 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.swift +199 -0
- package/skills/security-constant-time-analysis/ct_analyzer/tests/test_samples/vulnerable.ts +154 -0
- package/skills/security-constant-time-analysis/pyproject.toml +52 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/README.md +90 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/SKILL.md +219 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/compiled.md +129 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/javascript.md +136 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/kotlin.md +252 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/php.md +172 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/python.md +179 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/ruby.md +198 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/swift.md +288 -0
- package/skills/security-constant-time-analysis/skills/constant-time-analysis/references/vm-compiled.md +354 -0
- package/skills/security-constant-time-analysis/uv.lock +8 -0
- package/skills/security-culture-index/.claude-plugin/plugin.json +8 -0
- package/skills/security-culture-index/README.md +79 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/SKILL.md +293 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/anti-patterns.md +255 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/conversation-starters.md +408 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/interview-trait-signals.md +253 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/motivators.md +158 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/patterns-archetypes.md +147 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/primary-traits.md +307 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/secondary-traits.md +228 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/references/team-composition.md +148 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/check_deps.py +108 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/__init__.py +20 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/constants.py +122 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/extract.py +187 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/models.py +16 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/culture_index/opencv_extractor.py +520 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/extract_pdf.py +237 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/scripts/pyproject.toml +18 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/burnout-report.md +113 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/comparison-report.md +103 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/hiring-profile.md +127 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/individual-report.md +85 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/predicted-profile.md +165 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/templates/team-report.md +109 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/analyze-team.md +188 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/coach-manager.md +267 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/compare-profiles.md +188 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/define-hiring-profile.md +220 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/detect-burnout.md +206 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/extract-from-pdf.md +121 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interpret-individual.md +183 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/interview-debrief.md +234 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/mediate-conflict.md +306 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/plan-onboarding.md +322 -0
- package/skills/security-culture-index/skills/interpreting-culture-index/workflows/predict-from-interview.md +250 -0
- package/skills/security-differential-review/.claude-plugin/plugin.json +10 -0
- package/skills/security-differential-review/README.md +109 -0
- package/skills/security-differential-review/commands/diff-review.md +21 -0
- package/skills/security-differential-review/skills/differential-review/SKILL.md +220 -0
- package/skills/security-differential-review/skills/differential-review/adversarial.md +203 -0
- package/skills/security-differential-review/skills/differential-review/methodology.md +234 -0
- package/skills/security-differential-review/skills/differential-review/patterns.md +300 -0
- package/skills/security-differential-review/skills/differential-review/reporting.md +369 -0
- package/skills/security-dwarf-expert/.claude-plugin/plugin.json +10 -0
- package/skills/security-dwarf-expert/README.md +38 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/SKILL.md +93 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/coding.md +31 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/dwarfdump.md +50 -0
- package/skills/security-dwarf-expert/skills/dwarf-expert/reference/readelf.md +8 -0
- package/skills/security-entry-point-analyzer/.claude-plugin/plugin.json +10 -0
- package/skills/security-entry-point-analyzer/README.md +74 -0
- package/skills/security-entry-point-analyzer/commands/entry-points.md +18 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/SKILL.md +251 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/cosmwasm.md +182 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-aptos.md +107 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/move-sui.md +87 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solana.md +155 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/solidity.md +135 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/ton.md +185 -0
- package/skills/security-entry-point-analyzer/skills/entry-point-analyzer/references/vyper.md +141 -0
- package/skills/security-firebase-apk-scanner/.claude-plugin/plugin.json +10 -0
- package/skills/security-firebase-apk-scanner/README.md +85 -0
- package/skills/security-firebase-apk-scanner/commands/scan-apk.md +18 -0
- package/skills/security-firebase-apk-scanner/scanner.sh +1408 -0
- package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/SKILL.md +197 -0
- package/skills/security-firebase-apk-scanner/skills/firebase-apk-scanner/references/vulnerabilities.md +803 -0
- package/skills/security-fix-review/.claude-plugin/plugin.json +13 -0
- package/skills/security-fix-review/README.md +118 -0
- package/skills/security-fix-review/commands/fix-review.md +24 -0
- package/skills/security-fix-review/skills/fix-review/SKILL.md +264 -0
- package/skills/security-fix-review/skills/fix-review/references/bug-detection.md +408 -0
- package/skills/security-fix-review/skills/fix-review/references/finding-matching.md +298 -0
- package/skills/security-fix-review/skills/fix-review/references/report-parsing.md +398 -0
- package/skills/security-insecure-defaults/.claude-plugin/plugin.json +10 -0
- package/skills/security-insecure-defaults/README.md +45 -0
- package/skills/security-insecure-defaults/skills/insecure-defaults/SKILL.md +117 -0
- package/skills/security-insecure-defaults/skills/insecure-defaults/references/examples.md +409 -0
- package/skills/security-modern-python/.claude-plugin/plugin.json +10 -0
- package/skills/security-modern-python/README.md +58 -0
- package/skills/security-modern-python/hooks/hooks.json +16 -0
- package/skills/security-modern-python/hooks/intercept-legacy-python.bats +388 -0
- package/skills/security-modern-python/hooks/intercept-legacy-python.sh +109 -0
- package/skills/security-modern-python/hooks/test_helper.bash +75 -0
- package/skills/security-modern-python/skills/modern-python/SKILL.md +333 -0
- package/skills/security-modern-python/skills/modern-python/references/dependabot.md +43 -0
- package/skills/security-modern-python/skills/modern-python/references/migration-checklist.md +141 -0
- package/skills/security-modern-python/skills/modern-python/references/pep723-scripts.md +259 -0
- package/skills/security-modern-python/skills/modern-python/references/prek.md +211 -0
- package/skills/security-modern-python/skills/modern-python/references/pyproject.md +254 -0
- package/skills/security-modern-python/skills/modern-python/references/ruff-config.md +240 -0
- package/skills/security-modern-python/skills/modern-python/references/security-setup.md +255 -0
- package/skills/security-modern-python/skills/modern-python/references/testing.md +284 -0
- package/skills/security-modern-python/skills/modern-python/references/uv-commands.md +200 -0
- package/skills/security-modern-python/skills/modern-python/templates/dependabot.yml +36 -0
- package/skills/security-modern-python/skills/modern-python/templates/pre-commit-config.yaml +66 -0
- package/skills/security-property-based-testing/.claude-plugin/plugin.json +9 -0
- package/skills/security-property-based-testing/README.md +47 -0
- package/skills/security-property-based-testing/skills/property-based-testing/README.md +88 -0
- package/skills/security-property-based-testing/skills/property-based-testing/SKILL.md +109 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/design.md +191 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/generating.md +200 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/libraries.md +130 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/refactoring.md +181 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/reviewing.md +209 -0
- package/skills/security-property-based-testing/skills/property-based-testing/references/strategies.md +124 -0
- package/skills/semgrep-rule-creator/.claude-plugin/plugin.json +8 -0
- package/skills/semgrep-rule-creator/README.md +43 -0
- package/skills/semgrep-rule-creator/commands/semgrep-rule.md +26 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/SKILL.md +168 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/quick-reference.md +203 -0
- package/skills/semgrep-rule-creator/skills/semgrep-rule-creator/references/workflow.md +240 -0
- package/skills/semgrep-rule-variant-creator/.claude-plugin/plugin.json +9 -0
- package/skills/semgrep-rule-variant-creator/README.md +86 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/SKILL.md +205 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/applicability-analysis.md +250 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/language-syntax-guide.md +324 -0
- package/skills/semgrep-rule-variant-creator/skills/semgrep-rule-variant-creator/references/workflow.md +518 -0
- package/skills/session-logs/SKILL.md +115 -0
- package/skills/sharp-edges/.claude-plugin/plugin.json +10 -0
- package/skills/sharp-edges/README.md +48 -0
- package/skills/sharp-edges/skills/sharp-edges/SKILL.md +292 -0
- package/skills/sharp-edges/skills/sharp-edges/references/auth-patterns.md +252 -0
- package/skills/sharp-edges/skills/sharp-edges/references/case-studies.md +274 -0
- package/skills/sharp-edges/skills/sharp-edges/references/config-patterns.md +333 -0
- package/skills/sharp-edges/skills/sharp-edges/references/crypto-apis.md +190 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-c.md +205 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-csharp.md +285 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-go.md +270 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-java.md +263 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-javascript.md +269 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-kotlin.md +265 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-php.md +245 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-python.md +274 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-ruby.md +273 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-rust.md +272 -0
- package/skills/sharp-edges/skills/sharp-edges/references/lang-swift.md +287 -0
- package/skills/sharp-edges/skills/sharp-edges/references/language-specific.md +588 -0
- package/skills/sherpa-onnx-tts/SKILL.md +103 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +370 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +111 -0
- package/skills/skill-creator/scripts/quick_validate.py +101 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +46 -0
- package/skills/spec-to-code-compliance/.claude-plugin/plugin.json +10 -0
- package/skills/spec-to-code-compliance/README.md +67 -0
- package/skills/spec-to-code-compliance/commands/spec-compliance.md +22 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/SKILL.md +349 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/COMPLETENESS_CHECKLIST.md +69 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/IR_EXAMPLES.md +417 -0
- package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/OUTPUT_REQUIREMENTS.md +105 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/static-analysis/.claude-plugin/plugin.json +8 -0
- package/skills/static-analysis/README.md +59 -0
- package/skills/static-analysis/skills/codeql/SKILL.md +315 -0
- package/skills/static-analysis/skills/sarif-parsing/SKILL.md +479 -0
- package/skills/static-analysis/skills/sarif-parsing/resources/jq-queries.md +162 -0
- package/skills/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +331 -0
- package/skills/static-analysis/skills/semgrep/SKILL.md +337 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/testing-handbook-skills/.claude-plugin/plugin.json +8 -0
- package/skills/testing-handbook-skills/README.md +241 -0
- package/skills/testing-handbook-skills/scripts/pyproject.toml +8 -0
- package/skills/testing-handbook-skills/scripts/validate-skills.py +657 -0
- package/skills/testing-handbook-skills/skills/address-sanitizer/SKILL.md +341 -0
- package/skills/testing-handbook-skills/skills/aflpp/SKILL.md +640 -0
- package/skills/testing-handbook-skills/skills/atheris/SKILL.md +515 -0
- package/skills/testing-handbook-skills/skills/cargo-fuzz/SKILL.md +454 -0
- package/skills/testing-handbook-skills/skills/codeql/SKILL.md +549 -0
- package/skills/testing-handbook-skills/skills/constant-time-testing/SKILL.md +507 -0
- package/skills/testing-handbook-skills/skills/coverage-analysis/SKILL.md +607 -0
- package/skills/testing-handbook-skills/skills/fuzzing-dictionary/SKILL.md +297 -0
- package/skills/testing-handbook-skills/skills/fuzzing-obstacles/SKILL.md +426 -0
- package/skills/testing-handbook-skills/skills/harness-writing/SKILL.md +614 -0
- package/skills/testing-handbook-skills/skills/libafl/SKILL.md +625 -0
- package/skills/testing-handbook-skills/skills/libfuzzer/SKILL.md +795 -0
- package/skills/testing-handbook-skills/skills/ossfuzz/SKILL.md +426 -0
- package/skills/testing-handbook-skills/skills/ruzzy/SKILL.md +443 -0
- package/skills/testing-handbook-skills/skills/semgrep/SKILL.md +601 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/SKILL.md +372 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/agent-prompt.md +280 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/discovery.md +452 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/domain-skill.md +504 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/fuzzer-skill.md +454 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/technique-skill.md +527 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/tool-skill.md +366 -0
- package/skills/testing-handbook-skills/skills/testing-handbook-generator/testing.md +482 -0
- package/skills/testing-handbook-skills/skills/wycheproof/SKILL.md +533 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +135 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +95 -0
- package/skills/variant-analysis/.claude-plugin/plugin.json +8 -0
- package/skills/variant-analysis/README.md +41 -0
- package/skills/variant-analysis/commands/variants.md +23 -0
- package/skills/variant-analysis/skills/variant-analysis/METHODOLOGY.md +327 -0
- package/skills/variant-analysis/skills/variant-analysis/SKILL.md +142 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/cpp.ql +119 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/go.ql +69 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/java.ql +71 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/javascript.ql +63 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/codeql/python.ql +80 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/cpp.yaml +98 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/go.yaml +63 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/java.yaml +61 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/javascript.yaml +60 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/semgrep/python.yaml +72 -0
- package/skills/variant-analysis/skills/variant-analysis/resources/variant-report-template.md +75 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- package/skills/weather/SKILL.md +54 -0
- package/skills/yara-authoring/.claude-plugin/plugin.json +9 -0
- package/skills/yara-authoring/README.md +131 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/SKILL.md +645 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Mac_ProtonRAT_Jan25.yar +99 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_NPM_SupplyChain_Jan25.yar +170 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/MAL_Win_Remcos_Jan25.yar +103 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_CRX_SuspiciousPermissions.yar +134 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/examples/SUSP_JS_Obfuscation_Jan25.yar +185 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/crx-module.md +214 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/dex-module.md +383 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/performance.md +333 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/strings.md +433 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/style-guide.md +257 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/references/testing.md +399 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/atom_analyzer.py +526 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/pyproject.toml +25 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/scripts/yara_lint.py +631 -0
- package/skills/yara-authoring/skills/yara-rule-authoring/workflows/rule-development.md +493 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# YARA-X CRX Module Reference
|
|
2
|
+
|
|
3
|
+
The `crx` module enables analysis of Chrome extension packages (CRX files). Use it to detect malicious extensions based on their declared permissions, manifest structure, and metadata.
|
|
4
|
+
|
|
5
|
+
**Version requirements:** YARA-X v1.5.0+
|
|
6
|
+
|
|
7
|
+
## Module Import
|
|
8
|
+
|
|
9
|
+
```yara
|
|
10
|
+
import "crx"
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## API Reference
|
|
14
|
+
|
|
15
|
+
### File Type Validation
|
|
16
|
+
|
|
17
|
+
| Field | Type | Description |
|
|
18
|
+
|-------|------|-------------|
|
|
19
|
+
| `crx.is_crx` | bool | Returns true if file is a valid CRX package |
|
|
20
|
+
|
|
21
|
+
**Always check `crx.is_crx` first.** The module's other fields will not work correctly on non-CRX files.
|
|
22
|
+
|
|
23
|
+
### Extension Metadata
|
|
24
|
+
|
|
25
|
+
| Field | Type | Description |
|
|
26
|
+
|-------|------|-------------|
|
|
27
|
+
| `crx.id` | string | Extension identifier |
|
|
28
|
+
| `crx.version` | string | Extension version string |
|
|
29
|
+
| `crx.name` | string | Extension display name (localized) |
|
|
30
|
+
| `crx.description` | string | Extension description (localized) |
|
|
31
|
+
| `crx.raw_name` | string | Extension name without localization |
|
|
32
|
+
| `crx.raw_description` | string | Extension description without localization |
|
|
33
|
+
| `crx.homepage_url` | string | Extension homepage URL |
|
|
34
|
+
|
|
35
|
+
### CRX Format Information
|
|
36
|
+
|
|
37
|
+
| Field | Type | Description |
|
|
38
|
+
|-------|------|-------------|
|
|
39
|
+
| `crx.crx_version` | integer | CRX format version (2 or 3) |
|
|
40
|
+
| `crx.header_size` | integer | Size of the CRX header in bytes |
|
|
41
|
+
|
|
42
|
+
### Permission Analysis
|
|
43
|
+
|
|
44
|
+
| Field | Description | Example |
|
|
45
|
+
|-------|-------------|---------|
|
|
46
|
+
| `crx.permissions` | Array of declared permissions | `for any perm in crx.permissions` |
|
|
47
|
+
| `crx.optional_permissions` | Array of optional permissions | `for any perm in crx.optional_permissions` |
|
|
48
|
+
| `crx.host_permissions` | Array of host patterns (MV3) | `for any host in crx.host_permissions` |
|
|
49
|
+
| `crx.optional_host_permissions` | Array of optional host patterns | `for any host in crx.optional_host_permissions` |
|
|
50
|
+
|
|
51
|
+
### Signature Verification
|
|
52
|
+
|
|
53
|
+
| Field | Type | Description |
|
|
54
|
+
|-------|------|-------------|
|
|
55
|
+
| `crx.signatures` | array | Array of signature objects |
|
|
56
|
+
| `crx.signatures[i].key` | string | Public key for this signature |
|
|
57
|
+
| `crx.signatures[i].verified` | bool | Whether signature verification passed |
|
|
58
|
+
|
|
59
|
+
```yara
|
|
60
|
+
// Check if extension has a verified signature
|
|
61
|
+
rule CRX_VerifiedSignature
|
|
62
|
+
{
|
|
63
|
+
condition:
|
|
64
|
+
crx.is_crx and
|
|
65
|
+
for any sig in crx.signatures : (sig.verified)
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Permission Risk Assessment
|
|
70
|
+
|
|
71
|
+
### High-Risk Permissions
|
|
72
|
+
|
|
73
|
+
These permissions enable significant access and should trigger careful review:
|
|
74
|
+
|
|
75
|
+
| Permission | Risk | Legitimate Uses |
|
|
76
|
+
|------------|------|-----------------|
|
|
77
|
+
| `debugger` | Can intercept all traffic, modify any page | DevTools extensions |
|
|
78
|
+
| `nativeMessaging` | Communicate with local executables | Password managers, native integrations |
|
|
79
|
+
| `<all_urls>` | Access all websites | Ad blockers, universal tools |
|
|
80
|
+
| `proxy` | Route all traffic through specified proxy | VPN extensions |
|
|
81
|
+
| `webRequest` + `webRequestBlocking` | Intercept/modify requests | Ad blockers, privacy tools |
|
|
82
|
+
| `cookies` (with broad hosts) | Access authentication tokens | Session managers |
|
|
83
|
+
| `history` | Read complete browsing history | Productivity trackers |
|
|
84
|
+
|
|
85
|
+
### Red Flag Combinations
|
|
86
|
+
|
|
87
|
+
These permission combinations are especially suspicious:
|
|
88
|
+
|
|
89
|
+
```yara
|
|
90
|
+
// Data exfiltration potential
|
|
91
|
+
condition:
|
|
92
|
+
crx.is_crx and
|
|
93
|
+
for any perm in crx.permissions : (perm == "nativeMessaging") and
|
|
94
|
+
for any perm in crx.permissions : (perm == "<all_urls>" or perm == "*://*/*")
|
|
95
|
+
|
|
96
|
+
// Credential theft potential
|
|
97
|
+
condition:
|
|
98
|
+
crx.is_crx and
|
|
99
|
+
for any perm in crx.permissions : (perm == "webRequest") and
|
|
100
|
+
for any perm in crx.permissions : (perm == "webRequestBlocking") and
|
|
101
|
+
for any host in crx.host_permissions : (host contains "://*/*")
|
|
102
|
+
|
|
103
|
+
// Man-in-the-browser potential
|
|
104
|
+
condition:
|
|
105
|
+
crx.is_crx and
|
|
106
|
+
for any perm in crx.permissions : (perm == "debugger") and
|
|
107
|
+
for any perm in crx.permissions : (perm == "tabs")
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Example Rules
|
|
111
|
+
|
|
112
|
+
### Detect High-Risk Extension
|
|
113
|
+
|
|
114
|
+
```yara
|
|
115
|
+
import "crx"
|
|
116
|
+
|
|
117
|
+
rule SUSP_CRX_HighRiskProfile
|
|
118
|
+
{
|
|
119
|
+
meta:
|
|
120
|
+
description = "Detects extensions with high-risk permission combinations"
|
|
121
|
+
score = 70
|
|
122
|
+
|
|
123
|
+
condition:
|
|
124
|
+
crx.is_crx and
|
|
125
|
+
|
|
126
|
+
// Count dangerous permissions
|
|
127
|
+
(
|
|
128
|
+
(for any p in crx.permissions : (p == "debugger")) +
|
|
129
|
+
(for any p in crx.permissions : (p == "nativeMessaging")) +
|
|
130
|
+
(for any p in crx.permissions : (p == "proxy")) +
|
|
131
|
+
(for any p in crx.permissions : (p == "webRequestBlocking"))
|
|
132
|
+
) >= 2 and
|
|
133
|
+
|
|
134
|
+
// Has broad host access
|
|
135
|
+
for any h in crx.host_permissions : (
|
|
136
|
+
h == "<all_urls>" or h contains "://*/*"
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Detect Unverified Signatures
|
|
142
|
+
|
|
143
|
+
```yara
|
|
144
|
+
import "crx"
|
|
145
|
+
|
|
146
|
+
rule SUSP_CRX_UnverifiedSignature
|
|
147
|
+
{
|
|
148
|
+
meta:
|
|
149
|
+
description = "Detects CRX files with unverified or missing signatures"
|
|
150
|
+
score = 60
|
|
151
|
+
|
|
152
|
+
condition:
|
|
153
|
+
crx.is_crx and
|
|
154
|
+
not for any sig in crx.signatures : (sig.verified)
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Combine with String Patterns
|
|
159
|
+
|
|
160
|
+
```yara
|
|
161
|
+
import "crx"
|
|
162
|
+
|
|
163
|
+
rule SUSP_CRX_CryptoMiner
|
|
164
|
+
{
|
|
165
|
+
meta:
|
|
166
|
+
description = "Detects potential cryptomining extensions"
|
|
167
|
+
score = 80
|
|
168
|
+
|
|
169
|
+
strings:
|
|
170
|
+
$miner1 = "CoinHive" ascii wide nocase
|
|
171
|
+
$miner2 = "coinhive.min.js" ascii
|
|
172
|
+
$miner3 = /Miner\.(start|stop)\s*\(/
|
|
173
|
+
$wasm_miner = "cryptonight" ascii
|
|
174
|
+
$pool_stratum = /stratum\+tcp:\/\//
|
|
175
|
+
|
|
176
|
+
condition:
|
|
177
|
+
crx.is_crx and
|
|
178
|
+
|
|
179
|
+
// Needs background execution
|
|
180
|
+
for any perm in crx.permissions : (
|
|
181
|
+
perm == "background" or perm == "alarms"
|
|
182
|
+
) and
|
|
183
|
+
|
|
184
|
+
// Miner indicators
|
|
185
|
+
(2 of ($miner*) or $wasm_miner or $pool_stratum)
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Best Practices
|
|
190
|
+
|
|
191
|
+
1. **Always validate file type first** — Start conditions with `crx.is_crx`
|
|
192
|
+
|
|
193
|
+
2. **Don't over-match on common permissions** — `storage`, `activeTab`, `tabs` are used by most extensions
|
|
194
|
+
|
|
195
|
+
3. **Combine permissions with behavioral indicators** — Permission + suspicious string pattern is stronger than permission alone
|
|
196
|
+
|
|
197
|
+
4. **Use signatures for hunting** — Extensions with unverified signatures are worth investigating
|
|
198
|
+
|
|
199
|
+
5. **Test against legitimate extensions** — Chrome Web Store top extensions are your goodware corpus
|
|
200
|
+
|
|
201
|
+
## Troubleshooting
|
|
202
|
+
|
|
203
|
+
**Rule doesn't match CRX files:**
|
|
204
|
+
- Verify the file is a valid CRX (not just a renamed ZIP)
|
|
205
|
+
- Check YARA-X version (`yr --version`) meets requirements
|
|
206
|
+
- Use `yr dump -m crx extension.crx` to inspect what the module sees
|
|
207
|
+
|
|
208
|
+
**Permission iteration not working:**
|
|
209
|
+
- Ensure proper syntax: `for any perm in crx.permissions : (perm == "...")`
|
|
210
|
+
- Permissions are strings, not identifiers
|
|
211
|
+
|
|
212
|
+
**Signature verification questions:**
|
|
213
|
+
- `crx.signatures` may be empty for unsigned extensions
|
|
214
|
+
- CRX v2 uses RSA signatures; CRX v3 uses ECDSA
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
# YARA-X DEX Module Reference
|
|
2
|
+
|
|
3
|
+
The `dex` module enables analysis of Android Dalvik Executable (DEX) files. Use it to detect Android malware based on class structure, method signatures, string content, and obfuscation patterns.
|
|
4
|
+
|
|
5
|
+
**Version requirements:** YARA-X v1.11.0+
|
|
6
|
+
|
|
7
|
+
**Important:** The YARA-X `dex` module is **not compatible** with legacy YARA's `dex` module. The API is completely different. Rules must be rewritten.
|
|
8
|
+
|
|
9
|
+
## Module Import
|
|
10
|
+
|
|
11
|
+
```yara
|
|
12
|
+
import "dex"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## API Reference
|
|
16
|
+
|
|
17
|
+
### File Type Validation
|
|
18
|
+
|
|
19
|
+
| Field | Type | Description |
|
|
20
|
+
|-------|------|-------------|
|
|
21
|
+
| `dex.is_dex` | bool | Returns true if file is valid DEX |
|
|
22
|
+
|
|
23
|
+
**Always check `dex.is_dex` first.** Other fields will not work correctly on non-DEX files.
|
|
24
|
+
|
|
25
|
+
### Header Information
|
|
26
|
+
|
|
27
|
+
Access via `dex.header.*`:
|
|
28
|
+
|
|
29
|
+
| Field | Type | Description |
|
|
30
|
+
|-------|------|-------------|
|
|
31
|
+
| `dex.header.magic` | integer | DEX magic bytes (hex) |
|
|
32
|
+
| `dex.header.version` | integer | DEX version (35, 36, 37, ...) |
|
|
33
|
+
| `dex.header.checksum` | integer | Adler32 checksum from header (hex) |
|
|
34
|
+
| `dex.header.signature` | string | SHA-1 hash from header |
|
|
35
|
+
| `dex.header.file_size` | integer | Total file size in bytes |
|
|
36
|
+
| `dex.header.header_size` | integer | Header size (hex, usually 0x70) |
|
|
37
|
+
| `dex.header.endian_tag` | integer | Endianness indicator (hex) |
|
|
38
|
+
| `dex.header.link_size` | integer | Link section size |
|
|
39
|
+
| `dex.header.link_off` | integer | Link section offset (hex) |
|
|
40
|
+
| `dex.header.data_size` | integer | Data section size |
|
|
41
|
+
| `dex.header.data_off` | integer | Data section offset (hex) |
|
|
42
|
+
|
|
43
|
+
### Collections
|
|
44
|
+
|
|
45
|
+
| Field | Type | Description |
|
|
46
|
+
|-------|------|-------------|
|
|
47
|
+
| `dex.strings` | string[] | Array of all strings in DEX |
|
|
48
|
+
| `dex.types` | string[] | Array of type descriptors |
|
|
49
|
+
| `dex.protos` | array | Array of method prototypes |
|
|
50
|
+
| `dex.fields` | array | Array of field definitions |
|
|
51
|
+
| `dex.methods` | array | Array of method definitions |
|
|
52
|
+
| `dex.class_defs` | array | Array of class definitions |
|
|
53
|
+
|
|
54
|
+
### Method Item Structure
|
|
55
|
+
|
|
56
|
+
Each item in `dex.methods`:
|
|
57
|
+
|
|
58
|
+
| Field | Type | Description |
|
|
59
|
+
|-------|------|-------------|
|
|
60
|
+
| `class` | string | Owning class name |
|
|
61
|
+
| `name` | string | Method name |
|
|
62
|
+
| `proto.shorty` | string | Short-form method signature |
|
|
63
|
+
| `proto.return_type` | string | Return type descriptor |
|
|
64
|
+
| `proto.parameters_count` | integer | Number of parameters |
|
|
65
|
+
| `proto.parameters` | string[] | Parameter type descriptors |
|
|
66
|
+
|
|
67
|
+
### Class Definition Structure
|
|
68
|
+
|
|
69
|
+
Each item in `dex.class_defs`:
|
|
70
|
+
|
|
71
|
+
| Field | Type | Description |
|
|
72
|
+
|-------|------|-------------|
|
|
73
|
+
| `class` | string | Fully qualified class name |
|
|
74
|
+
| `access_flags` | integer | Class access modifiers |
|
|
75
|
+
| `superclass` | string | Parent class name |
|
|
76
|
+
| `source_file` | string | Source file name (if present) |
|
|
77
|
+
|
|
78
|
+
### Convenience Functions
|
|
79
|
+
|
|
80
|
+
These functions search across all entries efficiently using binary search:
|
|
81
|
+
|
|
82
|
+
| Function | Description | Example |
|
|
83
|
+
|----------|-------------|---------|
|
|
84
|
+
| `dex.contains_string(pattern)` | Check if any string matches | `dex.contains_string("decrypt")` |
|
|
85
|
+
| `dex.contains_method(pattern)` | Check if any method name matches | `dex.contains_method("loadClass")` |
|
|
86
|
+
| `dex.contains_class(pattern)` | Check if any class matches | `dex.contains_class("Ldalvik/system/DexClassLoader;")` |
|
|
87
|
+
|
|
88
|
+
### Integrity Functions
|
|
89
|
+
|
|
90
|
+
| Function | Description |
|
|
91
|
+
|----------|-------------|
|
|
92
|
+
| `dex.checksum()` | Compute actual Adler32 checksum (compare with `dex.header.checksum`) |
|
|
93
|
+
| `dex.signature()` | Compute actual SHA-1 signature (compare with `dex.header.signature`) |
|
|
94
|
+
|
|
95
|
+
```yara
|
|
96
|
+
// Detect tampered DEX files
|
|
97
|
+
rule SUSP_DEX_ChecksumMismatch
|
|
98
|
+
{
|
|
99
|
+
condition:
|
|
100
|
+
dex.is_dex and
|
|
101
|
+
dex.checksum() != dex.header.checksum
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Obfuscation Detection
|
|
106
|
+
|
|
107
|
+
### Single-Letter Class Names
|
|
108
|
+
|
|
109
|
+
Heavy obfuscation often produces single-letter class/package names:
|
|
110
|
+
|
|
111
|
+
```yara
|
|
112
|
+
import "dex"
|
|
113
|
+
|
|
114
|
+
rule SUSP_DEX_HeavyObfuscation
|
|
115
|
+
{
|
|
116
|
+
meta:
|
|
117
|
+
description = "Detects DEX with likely ProGuard/R8 aggressive obfuscation"
|
|
118
|
+
|
|
119
|
+
condition:
|
|
120
|
+
dex.is_dex and
|
|
121
|
+
|
|
122
|
+
// Count classes with single-letter names
|
|
123
|
+
for 10 c in dex.class_defs : (
|
|
124
|
+
c.class matches /^L[a-z]\/[a-z]\/[a-z];$/
|
|
125
|
+
)
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Missing Source File Info
|
|
130
|
+
|
|
131
|
+
Legitimate apps usually preserve source file names for crash reports:
|
|
132
|
+
|
|
133
|
+
```yara
|
|
134
|
+
rule SUSP_DEX_StrippedDebugInfo
|
|
135
|
+
{
|
|
136
|
+
meta:
|
|
137
|
+
description = "DEX has no source file information - unusual for production apps"
|
|
138
|
+
|
|
139
|
+
condition:
|
|
140
|
+
dex.is_dex and
|
|
141
|
+
|
|
142
|
+
// No class has source file info
|
|
143
|
+
for all c in dex.class_defs : (
|
|
144
|
+
c.source_file == ""
|
|
145
|
+
)
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### String Encryption Detection
|
|
150
|
+
|
|
151
|
+
Malware often encrypts strings to evade static analysis:
|
|
152
|
+
|
|
153
|
+
```yara
|
|
154
|
+
rule SUSP_DEX_StringDecryption
|
|
155
|
+
{
|
|
156
|
+
meta:
|
|
157
|
+
description = "Detects common string decryption patterns in Android malware"
|
|
158
|
+
|
|
159
|
+
condition:
|
|
160
|
+
dex.is_dex and
|
|
161
|
+
|
|
162
|
+
// Look for decryption method patterns
|
|
163
|
+
(
|
|
164
|
+
dex.contains_method("decrypt") or
|
|
165
|
+
dex.contains_method("deobfuscate")
|
|
166
|
+
) and
|
|
167
|
+
|
|
168
|
+
// Combined with XOR or Base64 indicators
|
|
169
|
+
dex.contains_string("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Common Malware Patterns
|
|
174
|
+
|
|
175
|
+
### Reflection-Based Loading
|
|
176
|
+
|
|
177
|
+
Malware uses reflection to load code dynamically:
|
|
178
|
+
|
|
179
|
+
```yara
|
|
180
|
+
import "dex"
|
|
181
|
+
|
|
182
|
+
rule SUSP_DEX_ReflectionLoading
|
|
183
|
+
{
|
|
184
|
+
meta:
|
|
185
|
+
description = "Detects dynamic class loading via reflection"
|
|
186
|
+
|
|
187
|
+
condition:
|
|
188
|
+
dex.is_dex and
|
|
189
|
+
|
|
190
|
+
// DexClassLoader or PathClassLoader usage
|
|
191
|
+
(
|
|
192
|
+
dex.contains_class("Ldalvik/system/DexClassLoader;") or
|
|
193
|
+
dex.contains_class("Ldalvik/system/PathClassLoader;") or
|
|
194
|
+
dex.contains_class("Ldalvik/system/InMemoryDexClassLoader;")
|
|
195
|
+
) and
|
|
196
|
+
|
|
197
|
+
// Combined with reflection
|
|
198
|
+
(
|
|
199
|
+
dex.contains_method("loadClass") or
|
|
200
|
+
dex.contains_method("forName")
|
|
201
|
+
)
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### SMS/Call Interception
|
|
206
|
+
|
|
207
|
+
Banking trojans commonly intercept SMS for 2FA bypass:
|
|
208
|
+
|
|
209
|
+
```yara
|
|
210
|
+
import "dex"
|
|
211
|
+
|
|
212
|
+
rule MAL_DEX_SMSInterception
|
|
213
|
+
{
|
|
214
|
+
meta:
|
|
215
|
+
description = "Detects SMS interception capabilities"
|
|
216
|
+
score = 70
|
|
217
|
+
|
|
218
|
+
condition:
|
|
219
|
+
dex.is_dex and
|
|
220
|
+
|
|
221
|
+
// SMS receiver registration
|
|
222
|
+
dex.contains_string("android.provider.Telephony.SMS_RECEIVED") and
|
|
223
|
+
|
|
224
|
+
// SMS content access
|
|
225
|
+
(
|
|
226
|
+
dex.contains_string("content://sms") or
|
|
227
|
+
dex.contains_method("getMessageBody")
|
|
228
|
+
) and
|
|
229
|
+
|
|
230
|
+
// Network exfiltration
|
|
231
|
+
(
|
|
232
|
+
dex.contains_class("Ljava/net/HttpURLConnection;") or
|
|
233
|
+
dex.contains_class("Lokhttp3/OkHttpClient;")
|
|
234
|
+
)
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Accessibility Service Abuse
|
|
239
|
+
|
|
240
|
+
Malware abuses accessibility for overlay attacks:
|
|
241
|
+
|
|
242
|
+
```yara
|
|
243
|
+
import "dex"
|
|
244
|
+
|
|
245
|
+
rule SUSP_DEX_AccessibilityAbuse
|
|
246
|
+
{
|
|
247
|
+
meta:
|
|
248
|
+
description = "Detects potential accessibility service abuse for overlay attacks"
|
|
249
|
+
|
|
250
|
+
condition:
|
|
251
|
+
dex.is_dex and
|
|
252
|
+
|
|
253
|
+
// AccessibilityService implementation
|
|
254
|
+
for any c in dex.class_defs : (
|
|
255
|
+
c.superclass contains "AccessibilityService"
|
|
256
|
+
) and
|
|
257
|
+
|
|
258
|
+
// Window overlay
|
|
259
|
+
(
|
|
260
|
+
dex.contains_string("android.permission.SYSTEM_ALERT_WINDOW") or
|
|
261
|
+
dex.contains_string("TYPE_APPLICATION_OVERLAY")
|
|
262
|
+
) and
|
|
263
|
+
|
|
264
|
+
// Combined with sensitive actions
|
|
265
|
+
(
|
|
266
|
+
dex.contains_string("performGlobalAction") or
|
|
267
|
+
dex.contains_method("dispatchGesture")
|
|
268
|
+
)
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
## Example Rules
|
|
273
|
+
|
|
274
|
+
### Banking Trojan Detection
|
|
275
|
+
|
|
276
|
+
```yara
|
|
277
|
+
import "dex"
|
|
278
|
+
|
|
279
|
+
rule MAL_DEX_BankingTrojan
|
|
280
|
+
{
|
|
281
|
+
meta:
|
|
282
|
+
description = "Detects common banking trojan patterns"
|
|
283
|
+
score = 80
|
|
284
|
+
|
|
285
|
+
strings:
|
|
286
|
+
// Overlay injection strings
|
|
287
|
+
$overlay1 = "android.app.action.ADD_DEVICE_ADMIN" ascii
|
|
288
|
+
$overlay2 = "BIND_ACCESSIBILITY_SERVICE" ascii
|
|
289
|
+
|
|
290
|
+
// Target banking app packages
|
|
291
|
+
$bank1 = "com.chase.sig.android" ascii
|
|
292
|
+
$bank2 = "com.wellsfargo.mobile" ascii
|
|
293
|
+
$bank3 = "com.bankofamerica" ascii
|
|
294
|
+
|
|
295
|
+
condition:
|
|
296
|
+
dex.is_dex and
|
|
297
|
+
|
|
298
|
+
// Has accessibility abuse potential
|
|
299
|
+
for any c in dex.class_defs : (
|
|
300
|
+
c.superclass contains "AccessibilityService"
|
|
301
|
+
) and
|
|
302
|
+
|
|
303
|
+
// Overlay indicators
|
|
304
|
+
any of ($overlay*) and
|
|
305
|
+
|
|
306
|
+
// Targets specific banks (reduce FPs)
|
|
307
|
+
any of ($bank*) and
|
|
308
|
+
|
|
309
|
+
// Network capability
|
|
310
|
+
(
|
|
311
|
+
dex.contains_class("Lokhttp3/") or
|
|
312
|
+
dex.contains_class("Ljava/net/HttpURLConnection;")
|
|
313
|
+
)
|
|
314
|
+
}
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### RAT Detection
|
|
318
|
+
|
|
319
|
+
```yara
|
|
320
|
+
import "dex"
|
|
321
|
+
|
|
322
|
+
rule MAL_DEX_RemoteAccessTrojan
|
|
323
|
+
{
|
|
324
|
+
meta:
|
|
325
|
+
description = "Detects Android RAT capabilities"
|
|
326
|
+
score = 85
|
|
327
|
+
|
|
328
|
+
condition:
|
|
329
|
+
dex.is_dex and
|
|
330
|
+
|
|
331
|
+
// Camera/mic access
|
|
332
|
+
(
|
|
333
|
+
dex.contains_string("android.permission.CAMERA") and
|
|
334
|
+
dex.contains_string("android.permission.RECORD_AUDIO")
|
|
335
|
+
) and
|
|
336
|
+
|
|
337
|
+
// Location tracking
|
|
338
|
+
dex.contains_string("android.permission.ACCESS_FINE_LOCATION") and
|
|
339
|
+
|
|
340
|
+
// Command channel
|
|
341
|
+
(
|
|
342
|
+
dex.contains_string("socket") or
|
|
343
|
+
dex.contains_class("Ljava/net/Socket;")
|
|
344
|
+
) and
|
|
345
|
+
|
|
346
|
+
// File exfiltration
|
|
347
|
+
(
|
|
348
|
+
dex.contains_method("getExternalStorage") or
|
|
349
|
+
dex.contains_string("/sdcard/")
|
|
350
|
+
)
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
## Best Practices
|
|
355
|
+
|
|
356
|
+
1. **Always validate file type first** — Start with `dex.is_dex`
|
|
357
|
+
|
|
358
|
+
2. **Use `contains_*()` functions** — They use binary search and are optimized
|
|
359
|
+
|
|
360
|
+
3. **Combine class/method patterns** — Single indicators are weak; combinations are stronger
|
|
361
|
+
|
|
362
|
+
4. **Account for obfuscation** — Class names may be mangled; look for method behaviors
|
|
363
|
+
|
|
364
|
+
5. **Test on legitimate apps** — Top Play Store apps are your goodware corpus
|
|
365
|
+
|
|
366
|
+
6. **Consider multi-dex** — Large apps split into multiple DEX files; scan all
|
|
367
|
+
|
|
368
|
+
## Troubleshooting
|
|
369
|
+
|
|
370
|
+
**Rule doesn't match DEX files:**
|
|
371
|
+
- Verify the file is valid DEX (`file sample.dex` should show "Dalvik dex file")
|
|
372
|
+
- Check YARA-X version is v1.11.0+
|
|
373
|
+
- Use `yr dump -m dex sample.dex` to inspect module output
|
|
374
|
+
|
|
375
|
+
**contains_* functions not working:**
|
|
376
|
+
- Requires YARA-X v1.11.0+
|
|
377
|
+
- String patterns are case-sensitive by default
|
|
378
|
+
- Use exact class names with L prefix and ; suffix: `Lcom/example/Class;`
|
|
379
|
+
|
|
380
|
+
**Migrating from legacy YARA dex module:**
|
|
381
|
+
- APIs are completely different — rewrite is required
|
|
382
|
+
- Legacy: `dex.has_class("...")` → YARA-X: `dex.contains_class("...")`
|
|
383
|
+
- Legacy field names differ from YARA-X field names
|