Zeyneell/Zcheck

GitHub: Zeyneell/Zcheck

Stars: 0 | Forks: 0

# Zcheck **Async email → accounts OSINT.** Give it an email address; Zcheck tells you where that person has accounts — holehe-style, but **data-driven** and **self-checking** so it scales past 690 sites and doesn't quietly rot when a site changes. ____ _ _ |_ /__ __| |_ ___ __ __ | |__ / / _/ _| ' \/ -_) _| / /| / / /___\__\__|_||_\___\__|_\_\|_\_\ OSINT ## Why it's different from holehe | | holehe | **Zcheck** | |---|---|---| | Sites | ~120 email oracles | **3 email oracles + 690+ username sites** | | Adding a site | write a Python module | **edit one JSON entry** (or drop a plugin) | | Site changes its response | checker silently breaks | **`update` pulls the fix; `doctor` flags drift; canary suppresses false positives** | | False positives | trust the module | **every hit is re-validated against a throwaway canary** | ## How it works Two engines feed one runner: 1. **Email oracles** — a site's *"is this email already registered?"* endpoint (signup / reset). Simple ones live as JSON in [`email_sites.json`](src/zcheck/data/email_sites.json); the ones that need a CSRF token or multi-step flow are Python plugins in [`sites/plugins/`](src/zcheck/sites/plugins/). 2. **Username sweep** — derives a username from the email's local part and checks it against the **WhatsMyName** dataset (690+ sites), using each site's `e_code` / `e_string` / `m_string` contract. Redirects are **not** followed, so a redirect to a generic page can't be mistaken for a hit. ### Not lying to you — the three guarantees against false positives - **Canary validation.** After a scan, every site that claimed a hit is re-probed with a *guaranteed non-existent* identifier. If it "finds" that too, it's an over-matching oracle and the result is downgraded to `unknown`. (In testing this caught *Arch Linux GitLab* on a live run.) - **Negative markers.** Username checks require the positive marker **and** the absence of the site's "not found" marker — kills soft-404s. - **`zcheck doctor`.** Self-test: probes each checker with a known-good control + a canary and flags anything that reports phantom accounts. Wire it into CI to catch drift automatically. ### Self-updating `zcheck update` refreshes the datasets into your user cache, which takes precedence over the bundled snapshot. When a site changes and the dataset is fixed upstream, you get the fix **without a new release** — no code touched. ## Install git clone https://github.com/Zeyneell/Zcheck.git cd Zcheck python -m venv .venv .venv\Scripts\Activate.ps1 pip install -e . On Windows you can also just double-click **`Zcheck.bat`** — it builds the venv and installs on first run, then drops you into the interactive menu. ## Usage Interactive menu (same feel as Zloc): zcheck One-shot: zcheck scan someone@example.com # email oracles + username sweep zcheck scan someone@example.com --mode email # just the email oracles zcheck scan someone@example.com -u customhandle # override the guessed username zcheck scan someone@example.com --nsfw --json out.json --csv out.csv zcheck sites # what Zcheck can check, by category zcheck doctor --cat coding # health-check a category zcheck update # refresh the site datasets Useful flags: `--mode email|username|both`, `--only site,site`, `--cat cat,cat`, `--nsfw`, `--concurrency N`, `--timeout S`, `--no-canary`. ## Extending ## Ethics & scope