Advanced Anti-Fingerprinting Script

Advanced measures to reduce browser fingerprinting

当前为 2025-01-14 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Advanced Anti-Fingerprinting Script
// @namespace    http://tampermonkey.net/
// @version      0.3
// @author       saiHy
// @description  Advanced measures to reduce browser fingerprinting
// @match        *://*/*
// @grant        none
// @license     MIT
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    // 扩展 Canvas 防护
    function advancedCanvasProtection() {
        const originalGetContext = HTMLCanvasElement.prototype.getContext;
        HTMLCanvasElement.prototype.getContext = function(type, contextAttributes) {
            const ctx = originalGetContext.call(this, type, contextAttributes);
            if (ctx) {
                const randomOffset = Math.random() * 100;
                const randomFactor = Math.random();
                ['save', 'restore', 'fillRect', 'strokeRect', 'clearRect', 'fill', 'stroke', 'fillText', 'strokeText'].forEach(method => {
                    const originalMethod = ctx[method];
                    ctx[method] = function(...args) {
                        if (method.includes('Text')) {
                            args[1] += randomOffset; // 改变文本位置
                            args[2] += randomOffset;
                        } else if (method.includes('Rect')) {
                            args[1] += randomOffset * randomFactor; // 改变矩形位置
                            args[2] += randomOffset * randomFactor;
                            args[3] *= randomFactor; // 改变大小
                            args[4] *= randomFactor;
                        }
                        return originalMethod.apply(this, args);
                    };
                });
            }
            return ctx;
        };
    }

    // 增强 WebGL 防护
    function advancedWebGLProtection() {
        try {
            const originalGetParameter = WebGLRenderingContext.prototype.getParameter;
            WebGLRenderingContext.prototype.getParameter = function(param) {
                // 提供通用或随机化的信息
                switch(param) {
                    case 0x9245: // WebGL_VERSION
                        return 'WebGL 1.0';
                    case 0x8B31: // RENDERER
                        return 'Generic GPU';
                    case 0x8B30: // VENDOR
                        return 'Anonymous Vendor';
                    case 0x9242: // SHADING_LANGUAGE_VERSION
                        return 'WebGL GLSL ES 1.0';
                    case 0x9246: // UNMASKED_VENDOR_WEBGL
                    case 0x9247: // UNMASKED_RENDERER_WEBGL
                        return 'Anonymous';
                    default:
                        return originalGetParameter.call(this, param);
                }
            };

            // 屏蔽更多 WebGL 扩展
            const originalGetExtension = WebGLRenderingContext.prototype.getExtension;
            WebGLRenderingContext.prototype.getExtension = function(name) {
                if (['WEBGL_debug_renderer_info', 'WEBGL_compressed_texture_s3tc', 'WEBGL_depth_texture'].includes(name)) return null;
                return originalGetExtension.call(this, name);
            };
        } catch (e) {} // 如果不支持 WebGL 则忽略错误
    }

    // 进一步混淆浏览器信息
    function furtherObscureBrowserInfo() {
        // 语言信息
        Object.defineProperty(navigator, 'language', { get: () => 'en-US' });
        Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] });

        // 时区
        const offset = -new Date().getTimezoneOffset() / 60;
        Object.defineProperty(Intl, 'DateTimeFormat', {
            value: function() {
                return {
                    resolvedOptions: () => ({
                        timeZone: 'UTC'
                    })
                };
            }
        });

        // 插件信息
        Object.defineProperty(navigator, 'plugins', { get: () => [{ name: 'Generic Plugin', description: 'Generic Plugin' }] });

        // 字体
        const originalMeasureText = CanvasRenderingContext2D.prototype.measureText;
        CanvasRenderingContext2D.prototype.measureText = function() {
            const result = originalMeasureText.apply(this, arguments);
            result.width = 100 * Math.random(); // 随机化文本宽度
            return result;
        };

        // 屏幕尺寸
        const screenWidth = window.screen.width;
        const screenHeight = window.screen.height;
        Object.defineProperty(window.screen, 'width', { get: () => Math.floor(screenWidth / 100) * 100 });
        Object.defineProperty(window.screen, 'height', { get: () => Math.floor(screenHeight / 100) * 100 });

        // 硬件并发数
        Object.defineProperty(navigator, 'hardwareConcurrency', { get: () => 4 }); // 假设所有人都有4核

        // 浏览器特性
        Object.defineProperty(navigator, 'platform', { get: () => 'Win32' });
        Object.defineProperty(navigator, 'appVersion', { get: () => '5.0 (Windows)' });
        Object.defineProperty(navigator, 'userAgent', { get: () => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36' });
    }

    // 执行所有防护措施
    advancedCanvasProtection();
    advancedWebGLProtection();
    furtherObscureBrowserInfo();

})();