diff --git a/CHANGELOG.md b/CHANGELOG.md index 673b072..9527471 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,21 @@ Changes are tagged: **[wrapper]** for Python/JS wrapper, **[binary]** for Chromi --- +## [0.3.3] — 2026-03-03 + +All platforms now run Chromium 145 v2 with 25 patches. Windows x64 added. + +- **[binary]** Auto-spoof by default — binary is stealthy with zero flags. Random fingerprint seed auto-generated at startup, no wrapper or configuration required +- **[binary]** Platform-aware auto-detection — GPU, screen dimensions, and User-Agent automatically match the real OS (macOS, Linux, Windows) without explicit flags +- **[binary]** Expanded GPU model database for realistic per-session diversity +- **[binary]** First macOS v145 builds (arm64 + x64) — 25 patches, up from 16 on v142 +- **[binary]** First Windows x64 v145 build — 25 patches +- **[wrapper]** Add Windows x64 platform support — auto-download, binary path resolution, and platform detection +- **[wrapper]** Upgrade macOS (arm64 + x64) from Chromium 142 to 145 — all platforms now ship the same 25-patch build +- **[wrapper]** Add explicit Mac GPU flags (`Apple M3 Metal` renderer) to default stealth args for consistent WebGL fingerprints +- **[wrapper]** Improve reCAPTCHA stealth test — wait for score element instead of blind sleep +- **[wrapper]** JS: add `win32-x64` platform mapping, Windows binary path (`chrome.exe`) + ## [0.3.1] — 2026-03-03 - **[wrapper]** Auto-check for wrapper updates on startup (PyPI/npm). Notifies users when a newer wrapper version is available. Runs once per process, respects `CLOAKBROWSER_AUTO_UPDATE=false`. diff --git a/README.md b/README.md index 3e2d1d5..363ec75 100644 --- a/README.md +++ b/README.md @@ -342,7 +342,17 @@ clearCache(); ## Fingerprint Management -Every launch automatically generates a **unique fingerprint**. A random seed (10000–99999) drives all seed-based patches — canvas, WebGL, audio, fonts, and client rects all produce consistent, correlated values derived from that single seed. +The binary is **stealthy by default** — no flags needed. It auto-generates a random fingerprint seed at startup and spoofs all detectable values (GPU, hardware specs, screen dimensions, canvas, WebGL, audio, fonts). Every launch produces a fresh, coherent identity. + +**How fingerprinting works:** + +| Scenario | What happens | +|----------|-------------| +| **No flags** | Random seed auto-generated at startup. GPU, screen, hardware specs, and all noise patches are spoofed automatically. Fresh identity each launch. | +| **`--fingerprint=seed`** | Deterministic identity from the seed. Same seed = same fingerprint across launches. Use this for session persistence (returning visitor). | +| **`--fingerprint=seed` + explicit flags** | Explicit flags override individual auto-generated values. The seed fills in everything else. | + +The binary detects its platform at compile time — a macOS binary reports Apple GPU and macOS screen (1440x900), a Linux binary reports NVIDIA GPU and 1080p screen. Override with `--fingerprint-platform` for cross-platform spoofing (e.g. Linux binary appearing as Windows). > **Tip: Use a fixed seed when revisiting the same site.** A random seed makes every session look like a different device — which can be suspicious when hitting the same site repeatedly from the same IP. For reCAPTCHA v3 Enterprise and similar scoring systems, a fixed seed produces a consistent fingerprint across sessions, making you look like a returning visitor: > ```python @@ -368,9 +378,9 @@ Every `launch()` call sets these automatically. Defaults are **platform-aware** | `--fingerprint-screen-height` | `1080` | *(not set)* | Screen height reporting | | `--window-size` | `1920,1080` | *(not set)* | Browser window dimensions | -> **Important:** `--fingerprint-platform` should always be set. Without it, platform-specific patches (GPU, UA, screen, taskbar) won't activate. The wrapper handles this automatically. +> **Using the binary directly?** It works out of the box with zero flags — the binary auto-spoofs everything. Pass `--fingerprint=seed` for a persistent identity, or use explicit flags like `--fingerprint-gpu-renderer` to override any auto-generated value. -> **⚠️ Using the binary directly (without the wrapper)?** The binary does not auto-spoof without flags. You must pass `--fingerprint`, `--fingerprint-platform`, and GPU flags explicitly. Without these, real device values pass through unmodified. See the table above for the full list of flags the wrapper sets automatically. +> **Production tip:** For better stealth at scale, pass your own GPU, screen, and hardware values instead of relying on defaults. Custom parameters make your sessions harder to cluster by anti-bot systems that look for uniform fingerprint profiles. ### Additional Flags diff --git a/cloakbrowser/_version.py b/cloakbrowser/_version.py index 260c070..e19434e 100644 --- a/cloakbrowser/_version.py +++ b/cloakbrowser/_version.py @@ -1 +1 @@ -__version__ = "0.3.1" +__version__ = "0.3.3" diff --git a/examples/stealth_test.py b/examples/stealth_test.py index c8e6221..d549b97 100644 --- a/examples/stealth_test.py +++ b/examples/stealth_test.py @@ -146,8 +146,12 @@ def test_recaptcha(page): wait_until="domcontentloaded", timeout=30000, ) - # Page auto-submits via grecaptcha.execute() — wait for backend response - time.sleep(8) + # Wait for backend response (step3 element appears when score arrives) + try: + page.wait_for_selector("li.step3", timeout=20000) + time.sleep(1) + except Exception: + time.sleep(10) # fallback results = page.evaluate("""() => { const text = document.body.innerText; diff --git a/js/package.json b/js/package.json index ab4ab2b..076b80d 100644 --- a/js/package.json +++ b/js/package.json @@ -1,6 +1,6 @@ { "name": "cloakbrowser", - "version": "0.3.1", + "version": "0.3.3", "description": "Stealth Chromium that passes every bot detection test. Drop-in Playwright/Puppeteer replacement with source-level fingerprint patches.", "type": "module", "main": "dist/index.js",