{"adoption": {"forks": 301, "observed_at": "2026-08-28T04:04:11.333721+00:00", "stars": 1267}, "canonical_url": "https://ross.abutalabs.com/products/evilurl", "card": {"archived": true, "artifact_type": "cli-tool", "description": "Generate unicode domains for IDN Homograph Attack and detect them.", "domain": ["security", "penetration-testing"], "enriched": true, "function": ["security", "penetration-testing"], "health_score": 10, "homepage": "https://t.me/UndeadSec", "language": "Python", "license": "BSD-3-Clause", "license_family": "permissive", "maturity": "active", "member_repos": ["UndeadSec/EvilURL"], "name": "UndeadSec/EvilURL", "platform": ["cli", "python", "cross-platform", "windows"], "pushed_at": "2026-05-19T00:29:25+00:00", "repo": "UndeadSec/EvilURL", "stars": 1267, "tags": ["idn-homograph-attack", "phishing", "unicode-domains", "domain-spoofing", "pentest", "brand-protection", "url-security", "domain-monitoring", "linux", "macos"], "topics": ["python", "idn", "attack", "pentest", "phishing", "idn-homograph-attack"], "urls": [], "use_cases": ["generate IDN homograph attack domains for a pentest", "detect lookalike unicode domains impersonating my brand", "check if spoofed versions of my domain are registered or available", "find domain permutations using confusable unicode characters", "test which homograph domains actually resolve and connect", "audit a list of domains for homograph spoofing risk"], "what_it_is": "EvilURL is a Python CLI tool that generates Unicode (IDN) domain permutations used in homograph attacks, where look-alike characters trick users into visiting spoofed domains. It can also detect potential homograph domains, check their registration availability, test connectivity, and process domain lists in bulk.", "when_to_avoid": ["you need continuous large-scale phishing detection or email gateway filtering rather than on-demand domain generation", "you require alerting, dashboards, or integration into a defensive monitoring pipeline", "you want a general-purpose domain name generator unrelated to spoofing or security testing"], "when_to_choose": ["you need to generate realistic homograph domain candidates during an authorized penetration test or red-team engagement", "you are doing brand protection and want to find registered or available look-alike domains", "you want a lightweight offline CLI that also checks domain availability and connectivity"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/evilurl", "repo": "UndeadSec/EvilURL", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:11.333721+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T05:03:41.482339+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "249bf723631d93166763c7deea190a25fe2ff9422c43d630936b338997b0cca5", "fetched_at": "2026-08-28T04:04:11.333721+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UndeadSec/EvilURL"}, {"content_hash": "556a81a37935be8483fcf778d0784f788fbfa388de762686a927f7b5eb5bc0a3", "fetched_at": "2026-08-29T12:15:40.912445+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/UndeadSec"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:11.333721+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T05:03:41.482339+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "249bf723631d93166763c7deea190a25fe2ff9422c43d630936b338997b0cca5", "fetched_at": "2026-08-28T04:04:11.333721+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UndeadSec/EvilURL"}, {"content_hash": "556a81a37935be8483fcf778d0784f788fbfa388de762686a927f7b5eb5bc0a3", "fetched_at": "2026-08-29T12:15:40.912445+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/UndeadSec"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T05:03:41.482339+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "249bf723631d93166763c7deea190a25fe2ff9422c43d630936b338997b0cca5", "fetched_at": "2026-08-28T04:04:11.333721+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UndeadSec/EvilURL"}, {"content_hash": "556a81a37935be8483fcf778d0784f788fbfa388de762686a927f7b5eb5bc0a3", "fetched_at": "2026-08-29T12:15:40.912445+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/UndeadSec"}], "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:04:11.333721+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:11.333721+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:11.333721+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T05:03:41.482339+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "249bf723631d93166763c7deea190a25fe2ff9422c43d630936b338997b0cca5", "fetched_at": "2026-08-28T04:04:11.333721+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UndeadSec/EvilURL"}, {"content_hash": "556a81a37935be8483fcf778d0784f788fbfa388de762686a927f7b5eb5bc0a3", "fetched_at": "2026-08-29T12:15:40.912445+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/UndeadSec"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:11.333721+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:11.333721+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T05:03:41.482339+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "249bf723631d93166763c7deea190a25fe2ff9422c43d630936b338997b0cca5", "fetched_at": "2026-08-28T04:04:11.333721+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UndeadSec/EvilURL"}, {"content_hash": "556a81a37935be8483fcf778d0784f788fbfa388de762686a927f7b5eb5bc0a3", "fetched_at": "2026-08-29T12:15:40.912445+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/UndeadSec"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:11.333721+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:11.333721+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:11.333721+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T05:03:41.482339+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "249bf723631d93166763c7deea190a25fe2ff9422c43d630936b338997b0cca5", "fetched_at": "2026-08-28T04:04:11.333721+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UndeadSec/EvilURL"}, {"content_hash": "556a81a37935be8483fcf778d0784f788fbfa388de762686a927f7b5eb5bc0a3", "fetched_at": "2026-08-29T12:15:40.912445+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/UndeadSec"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:11.333721+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:11.333721+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T05:03:41.482339+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "249bf723631d93166763c7deea190a25fe2ff9422c43d630936b338997b0cca5", "fetched_at": "2026-08-28T04:04:11.333721+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UndeadSec/EvilURL"}, {"content_hash": "556a81a37935be8483fcf778d0784f788fbfa388de762686a927f7b5eb5bc0a3", "fetched_at": "2026-08-29T12:15:40.912445+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/UndeadSec"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T05:03:41.482339+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "249bf723631d93166763c7deea190a25fe2ff9422c43d630936b338997b0cca5", "fetched_at": "2026-08-28T04:04:11.333721+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UndeadSec/EvilURL"}, {"content_hash": "556a81a37935be8483fcf778d0784f788fbfa388de762686a927f7b5eb5bc0a3", "fetched_at": "2026-08-29T12:15:40.912445+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/UndeadSec"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T05:03:41.482339+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "249bf723631d93166763c7deea190a25fe2ff9422c43d630936b338997b0cca5", "fetched_at": "2026-08-28T04:04:11.333721+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UndeadSec/EvilURL"}, {"content_hash": "556a81a37935be8483fcf778d0784f788fbfa388de762686a927f7b5eb5bc0a3", "fetched_at": "2026-08-29T12:15:40.912445+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/UndeadSec"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T05:03:41.482339+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "249bf723631d93166763c7deea190a25fe2ff9422c43d630936b338997b0cca5", "fetched_at": "2026-08-28T04:04:11.333721+00:00", "kind": "readme", "missing": false, "url": "https://github.com/UndeadSec/EvilURL"}, {"content_hash": "556a81a37935be8483fcf778d0784f788fbfa388de762686a927f7b5eb5bc0a3", "fetched_at": "2026-08-29T12:15:40.912445+00:00", "kind": "homepage", "missing": false, "url": "https://t.me/UndeadSec"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 83, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["archived"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3227, "days_push": 107, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 10, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}