您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Hides all Brave browser traces and spoofs key browser properties to mimic Google Chrome for anti-detection and fingerprinting evasion.
// ==UserScript== // @name BraveStealth ™ (Chrome-Only Spoof) // @namespace https://tampermonkey.net/ // @version 1.0 // @description Hides all Brave browser traces and spoofs key browser properties to mimic Google Chrome for anti-detection and fingerprinting evasion. // @author Seed Taha // @match *://*/* // @icon https://i.postimg.cc/X7xRSKgh/1447-02-09-07-28-05-4d711534.jpg // @run-at document-start // @grant none // @license MIT // ==/UserScript== (() => { "use strict"; const fakeBrands = [ { brand: "Google Chrome", version: "138" }, { brand: "Not.A/Brand", version: "99" } ]; const fakeHigh = { fullVersionList: fakeBrands.map(b => ({ brand: b.brand, version: b.version })), platform: "Windows", platformVersion: "10.0", architecture: "x86", model: "", mobile: false }; function overrideProperty(parent, prop, getValue) { Object.defineProperty(parent, prop, { get: getValue, configurable: false, enumerable: true }); } // 1. Hide navigator.brave overrideProperty(navigator, "brave", () => undefined); // 2. Override userAgentData const uaDescriptor = Object.getOwnPropertyDescriptor(Navigator.prototype, "userAgentData") || Object.getOwnPropertyDescriptor(window.navigator, "userAgentData") || { configurable: true }; overrideProperty(Navigator.prototype, "userAgentData", () => ({ get highEntropyValues() { return fakeHigh; }, brands: fakeBrands, mobile: false, platform: "Windows", getHighEntropyValues: async hints => { const out = {}; hints.forEach(h => { if (h in fakeHigh) out[h] = fakeHigh[h]; }); return out; } })); // 3. Override navigator.platform, languages, appVersion overrideProperty(Navigator.prototype, "platform", () => "Win32"); overrideProperty(Navigator.prototype, "languages", () => ["en-US", "en"]); overrideProperty(Navigator.prototype, "appVersion", () => navigator.userAgent); // 4. Spoof WebGL Vendor/Renderer const glProto = WebGLRenderingContext.prototype; const origGetParam = glProto.getParameter; glProto.getParameter = function(p) { if (p === this.UNMASKED_VENDOR_WEBGL) return "Intel Inc."; if (p === this.UNMASKED_RENDERER_WEBGL) return "ANGLE (Intel, Intel(R) UHD Graphics 620 Direct3D11 vs_5_0 ps_5_0)"; return origGetParam.call(this, p); }; // 5. Add minor noise to Canvas toDataURL const origToDataURL = HTMLCanvasElement.prototype.toDataURL; HTMLCanvasElement.prototype.toDataURL = function(...args) { const ctx = this.getContext("2d"); if (ctx) { const w = this.width | 0, h = this.height | 0; if (w * h < 100_000) { try { const imageData = ctx.getImageData(0, 0, w, 1); const d = imageData.data; for (let i = 0; i < d.length; i += 4) { const noise = Math.floor(Math.random() * 3) - 1; d[i] = d[i] + noise; } ctx.putImageData(imageData, 0, 0); } catch (e) { } } } return origToDataURL.apply(this, args); }; // 6. Remove plugins and mimeTypes overrideProperty(Navigator.prototype, "plugins", () => []); overrideProperty(Navigator.prototype, "mimeTypes", () => []); })();