{"adoption": {"forks": 130, "observed_at": "2026-08-28T04:03:43.845724+00:00", "stars": 1137}, "canonical_url": "https://ross.abutalabs.com/products/featherduster", "card": {"archived": false, "artifact_type": "cli-tool", "description": "An automated, modular cryptanalysis tool; i.e., a Weapon of Math Destruction", "domain": ["security", "penetration-testing"], "enriched": true, "function": ["security", "cryptography", "penetration-testing"], "health_score": 20, "homepage": null, "language": "Python", "license": "BSD-3-Clause", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["nccgroup/featherduster"], "name": "nccgroup/featherduster", "platform": ["python", "cli"], "pushed_at": "2021-12-02T16:59:31+00:00", "repo": "nccgroup/featherduster", "stars": 1137, "tags": ["cryptanalysis", "crypto-attacks", "ctf", "security-tooling", "cryptography", "linux", "macos"], "topics": ["crypto", "cryptography", "encryption", "security", "python", "cryptanalysis", "exploitation", "exploitation-framework", "exploit", "exploits"], "urls": [], "use_cases": ["break weak encryption from ciphertext samples", "identify the encoding and cipher of unknown ciphertexts", "automate CTF crypto challenge solving", "build custom crypto attack tools in Python", "exploit RSA padding oracle vulnerabilities", "break repeated-key XOR and many-time pad"], "what_it_is": "FeatherDuster is an automated, modular cryptanalysis tool from NCC Group that identifies and exploits weak cryptosystems from supplied ciphertext samples. It ships with Cryptanalib, a Python library of crypto attack primitives usable independently.", "when_to_avoid": ["you need actively maintained tooling with modern Python support", "you need analysis of modern, correctly-implemented cryptography", "you need a GUI or Windows-native tool"], "when_to_choose": ["you have ciphertext samples and want automated identification and attack of weak crypto", "you're solving CTF crypto challenges", "you want a Python library of classic cryptanalysis primitives"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/featherduster", "repo": "nccgroup/featherduster", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:43.845724+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:36:20.500853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1f2d3027e73997160537ba3aa496e4d9f91f14d13c7b25f215d6e05b711fca74", "fetched_at": "2026-08-28T04:03:43.845724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/featherduster"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:43.845724+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:36:20.500853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1f2d3027e73997160537ba3aa496e4d9f91f14d13c7b25f215d6e05b711fca74", "fetched_at": "2026-08-28T04:03:43.845724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/featherduster"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:36:20.500853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1f2d3027e73997160537ba3aa496e4d9f91f14d13c7b25f215d6e05b711fca74", "fetched_at": "2026-08-28T04:03:43.845724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/featherduster"}], "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:03:43.845724+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:43.845724+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:43.845724+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:36:20.500853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1f2d3027e73997160537ba3aa496e4d9f91f14d13c7b25f215d6e05b711fca74", "fetched_at": "2026-08-28T04:03:43.845724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/featherduster"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:43.845724+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:43.845724+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:36:20.500853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1f2d3027e73997160537ba3aa496e4d9f91f14d13c7b25f215d6e05b711fca74", "fetched_at": "2026-08-28T04:03:43.845724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/featherduster"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:43.845724+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:43.845724+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:43.845724+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:36:20.500853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1f2d3027e73997160537ba3aa496e4d9f91f14d13c7b25f215d6e05b711fca74", "fetched_at": "2026-08-28T04:03:43.845724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/featherduster"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:43.845724+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:43.845724+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:36:20.500853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1f2d3027e73997160537ba3aa496e4d9f91f14d13c7b25f215d6e05b711fca74", "fetched_at": "2026-08-28T04:03:43.845724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/featherduster"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:36:20.500853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1f2d3027e73997160537ba3aa496e4d9f91f14d13c7b25f215d6e05b711fca74", "fetched_at": "2026-08-28T04:03:43.845724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/featherduster"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:36:20.500853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1f2d3027e73997160537ba3aa496e4d9f91f14d13c7b25f215d6e05b711fca74", "fetched_at": "2026-08-28T04:03:43.845724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/featherduster"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:36:20.500853+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1f2d3027e73997160537ba3aa496e4d9f91f14d13c7b25f215d6e05b711fca74", "fetched_at": "2026-08-28T04:03:43.845724+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/featherduster"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3774, "days_push": 1735, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}