{"adoption": {"forks": 201, "observed_at": "2026-08-28T04:06:03.324112+00:00", "stars": 1994}, "canonical_url": "https://ross.abutalabs.com/products/bashfuscator", "card": {"archived": false, "artifact_type": "framework", "description": "A fully configurable and extendable Bash obfuscation framework. This tool is intended to help both red team and blue team.", "domain": ["security", "penetration-testing", "developer-tools"], "enriched": true, "function": ["security", "cli", "developer-tools"], "health_score": 20, "homepage": "https://bashfuscator.readthedocs.io/en/latest/index.html", "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["Bashfuscator/Bashfuscator"], "name": "Bashfuscator/Bashfuscator", "platform": ["python", "cli"], "pushed_at": "2023-09-05T10:40:25+00:00", "repo": "Bashfuscator/Bashfuscator", "stars": 1994, "tags": ["bash-obfuscation", "red-team", "blue-team", "evasion", "payload-generation", "detection-testing", "command-line", "linux"], "topics": ["bash", "linux", "linux-shell", "obfuscation", "red-team", "blue-team", "evasion", "incident-response", "infosec"], "urls": [], "use_cases": ["obfuscate a bash one-liner to evade static detection", "generate thousands of unique obfuscated bash scripts for testing detections", "build blue team detection rules for bash obfuscation techniques", "extend the framework with custom bash obfuscation mutators", "study bash obfuscation techniques for incident response analysis"], "what_it_is": "Bashfuscator is a modular, configurable Bash obfuscation framework written in Python 3 that transforms Bash commands and scripts into convoluted, randomized code that evaluates to the original input at runtime. It is designed for red teams to bypass static detections and for blue teams to generate test corpora for building obfuscation detections.", "when_to_avoid": ["you target BSD or non-GNU UNIX systems, where generated payloads may not work", "you need obfuscation for shells other than bash", "you need a maintained tool with frequent updates, as the latest release is from 2023"], "when_to_choose": ["you need configurable, randomized bash obfuscation on GNU Linux with Bash 4.0+", "you are a red teamer testing static detection of bash payloads", "you are a blue teamer generating obfuscation samples to train or validate detections"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/bashfuscator", "repo": "Bashfuscator/Bashfuscator", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.324112+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:02:31.866399+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88abf6d00ba7801661b3637941ca7ac55e672fa2085ca9a912e9402496ec13e8", "fetched_at": "2026-08-28T04:06:03.324112+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Bashfuscator/Bashfuscator"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.324112+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:02:31.866399+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88abf6d00ba7801661b3637941ca7ac55e672fa2085ca9a912e9402496ec13e8", "fetched_at": "2026-08-28T04:06:03.324112+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Bashfuscator/Bashfuscator"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:02:31.866399+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88abf6d00ba7801661b3637941ca7ac55e672fa2085ca9a912e9402496ec13e8", "fetched_at": "2026-08-28T04:06:03.324112+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Bashfuscator/Bashfuscator"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.324112+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.324112+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.324112+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:02:31.866399+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88abf6d00ba7801661b3637941ca7ac55e672fa2085ca9a912e9402496ec13e8", "fetched_at": "2026-08-28T04:06:03.324112+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Bashfuscator/Bashfuscator"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.324112+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.324112+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:02:31.866399+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88abf6d00ba7801661b3637941ca7ac55e672fa2085ca9a912e9402496ec13e8", "fetched_at": "2026-08-28T04:06:03.324112+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Bashfuscator/Bashfuscator"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.324112+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.324112+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.324112+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:02:31.866399+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88abf6d00ba7801661b3637941ca7ac55e672fa2085ca9a912e9402496ec13e8", "fetched_at": "2026-08-28T04:06:03.324112+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Bashfuscator/Bashfuscator"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.324112+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.324112+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:02:31.866399+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88abf6d00ba7801661b3637941ca7ac55e672fa2085ca9a912e9402496ec13e8", "fetched_at": "2026-08-28T04:06:03.324112+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Bashfuscator/Bashfuscator"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:02:31.866399+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88abf6d00ba7801661b3637941ca7ac55e672fa2085ca9a912e9402496ec13e8", "fetched_at": "2026-08-28T04:06:03.324112+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Bashfuscator/Bashfuscator"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:02:31.866399+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88abf6d00ba7801661b3637941ca7ac55e672fa2085ca9a912e9402496ec13e8", "fetched_at": "2026-08-28T04:06:03.324112+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Bashfuscator/Bashfuscator"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:02:31.866399+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "88abf6d00ba7801661b3637941ca7ac55e672fa2085ca9a912e9402496ec13e8", "fetched_at": "2026-08-28T04:06:03.324112+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Bashfuscator/Bashfuscator"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2952, "days_push": 1093, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}