您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Advanced spoofing of fingerprint vectors: canvas, WebGL, audio, language, timezone, cores, screen, sensors, and more.
当前为
// ==UserScript== // @name Anti-Fingerprinting Shield // @namespace https://365devnet.eu/userscripts // @version 4.0 // @description Advanced spoofing of fingerprint vectors: canvas, WebGL, audio, language, timezone, cores, screen, sensors, and more. // @match *://*/* // @grant none // @license MIT // @run-at document-start // ==/UserScript== (function () { 'use strict'; console.log('[AFS+] Advanced Anti-Fingerprinting Shield is active'); // ===== RANDOMIZATION POOLS ===== const platforms = ['Win32', 'Linux x86_64', 'MacIntel', 'FreeBSD']; const languages = ['en-US', 'nl-NL', 'fr-FR', 'de-DE', 'sv-SE']; const timezones = ['UTC', 'Europe/Amsterdam', 'America/New_York', 'Asia/Tokyo']; const userAgents = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' ]; const cores = [2, 4, 6, 8]; const screenWidths = [1920, 1680, 1366]; const screenHeights = [1080, 1050, 768]; // ===== RANDOMIZED SESSION VALUES ===== const spoofed = { platform: pick(platforms), language: pick(languages), languages: [pick(languages), 'en'], timezone: pick(timezones), userAgent: pick(userAgents), cores: pick(cores), screenWidth: pick(screenWidths), screenHeight: pick(screenHeights) }; function pick(arr) { return arr[Math.floor(Math.random() * arr.length)]; } // ===== LANGUAGE & PLATFORM ===== spoofProperty(navigator, 'language', () => spoofed.language); spoofProperty(navigator, 'languages', () => spoofed.languages); spoofProperty(navigator, 'platform', () => spoofed.platform); // ===== USER AGENT ===== spoofProperty(navigator, 'userAgent', () => spoofed.userAgent); // ===== CPU CORES ===== spoofProperty(navigator, 'hardwareConcurrency', () => spoofed.cores); // ===== TOUCH ===== spoofProperty(navigator, 'maxTouchPoints', () => 1); window.TouchEvent = undefined; window.ontouchstart = undefined; // ===== TIMEZONE ===== try { const original = Intl.DateTimeFormat.prototype.resolvedOptions; Intl.DateTimeFormat.prototype.resolvedOptions = function () { const options = original.call(this); options.timeZone = spoofed.timezone; return options; }; } catch (e) {} // ===== SCREEN SIZE & WINDOW ===== spoofProperty(window.screen, 'width', () => spoofed.screenWidth); spoofProperty(window.screen, 'height', () => spoofed.screenHeight); spoofProperty(window, 'innerWidth', () => spoofed.screenWidth); spoofProperty(window, 'innerHeight', () => spoofed.screenHeight - 40); // ===== PLUGINS & MEDIA DEVICES ===== spoofProperty(navigator, 'plugins', () => []); spoofProperty(navigator, 'mediaDevices', () => ({ enumerateDevices: () => Promise.resolve([]) })); // ===== BATTERY API BLOCK ===== delete navigator.getBattery; // ===== AUDIO FINGERPRINT SPOOFING ===== const AudioContext = window.AudioContext || window.webkitAudioContext; if (AudioContext) { const original = AnalyserNode.prototype.getFloatFrequencyData; AnalyserNode.prototype.getFloatFrequencyData = function (array) { original.call(this, array); for (let i = 0; i < array.length; i++) { array[i] += Math.random() * 0.1; } }; } // ===== CANVAS SPOOFING ===== const originalGetImageData = CanvasRenderingContext2D.prototype.getImageData; CanvasRenderingContext2D.prototype.getImageData = function (x, y, w, h) { const imageData = originalGetImageData.call(this, x, y, w, h); for (let i = 0; i < imageData.data.length; i += 4) { imageData.data[i] ^= 1; imageData.data[i + 1] ^= 1; imageData.data[i + 2] ^= 1; } return imageData; }; // ===== WEBGL SPOOFING ===== const originalGLGetParameter = WebGLRenderingContext.prototype.getParameter; WebGLRenderingContext.prototype.getParameter = function (param) { const spoofMap = { 37445: 'FakeVendor Inc.', // UNMASKED_VENDOR_WEBGL 37446: 'Virtual GPU Renderer', // UNMASKED_RENDERER_WEBGL 3379: 4096, // MAX_TEXTURE_SIZE 35661: 8 // MAX_COMBINED_TEXTURE_IMAGE_UNITS }; return spoofMap[param] || originalGLGetParameter.call(this, param); }; // ===== SENSOR API BLOCK ===== window.DeviceMotionEvent = undefined; window.DeviceOrientationEvent = undefined; // ===== BEFOREUNLOAD BLOCK ===== window.addEventListener('beforeunload', e => { e.stopImmediatePropagation(); e.preventDefault(); return undefined; }, true); // ===== UTILITY ===== function spoofProperty(obj, prop, getter) { try { Object.defineProperty(obj, prop, { get: getter, configurable: true }); } catch (e) {} } })();