Behavioral Obfuscator

Anti-Fingerprinting Timing & Scroll Protection - Introduces randomized timing jitter to prevent fingerprinting via scroll and typing patterns without affecting UX.

// ==UserScript==
// @name            Behavioral Obfuscator
// @description     Anti-Fingerprinting Timing & Scroll Protection - Introduces randomized timing jitter to prevent fingerprinting via scroll and typing patterns without affecting UX.
// @name:zh-TW      行為混淆器
// @description:zh-TW 防指紋時間與滾動保護 - 引入隨機化的時間顫動,防止通過滾動和打字模式進行指紋識別,且不影響用戶體驗。
// @name:zh-HK      行為混淆器
// @description:zh-HK 防指紋時間與滾動保護 - 引入隨機化的時間顫動,防止通過滾動和打字模式進行指紋識別,且不影響用戶體驗。
// @name:zh-CN      行为混淆器
// @description:zh-CN 防指纹时间和滚动保护 - 引入随机化的时间抖动,防止通过滚动和打字模式进行指纹识别,同时不影响用户体验。
// @name:ja         行動の難読化ツール
// @description:ja 指紋防止タイミングとスクロール保護 - スクロールとタイピングのパターンを通じて指紋を防ぐためにランダム化されたタイミングジッターを導入し、UXには影響を与えません。
// @name:kr         행동 은폐기
// @description:kr 지문 방지 타이밍 및 스크롤 보호 - 스크롤 및 타이핑 패턴을 통한 지문 식별을 방지하기 위해 무작위 타이밍 지터를 도입하며 사용자 경험에는 영향을 주지 않습니다.
// @name:ar         مُربك سلوكي
// @description:ar حماية ضد التعرف على بصمات الأصابع من خلال التوقيت والتمرير - يقدم اهتزازات توقيت عشوائية لمنع التعرف على بصمات الأصابع عبر نمط التمرير والكتابة دون التأثير على تجربة المستخدم.
// @name:bg         Поведенчески Препокривател
// @description:bg Анти-фингерпринтинг защита на времето и скролиране - Внедрява рандомизирано времево трептене, за да предотврати откриването на пръстови отпечатъци чрез скролиране и типови модели без да влияе на потребителския опит.
// @name:cs         Behaviorální zakrytí
// @description:cs Ochrana proti fingerprintingu pomocí časování a posouvání - Zavádí náhodné časové kolísání, které brání fingerprintingu pomocí vzorců posouvání a psaní, aniž by ovlivnilo uživatelský zážitek.
// @name:da         Adfærdsforvirrer
// @description:da Anti-fingeraftryk timing- og scrollbeskyttelse - Introducerer tilfældig tidsforstyrrelse for at forhindre fingeraftryk via rulle- og tastemønstre uden at påvirke brugeroplevelsen.
// @name:de         Verhaltensverschleierer
// @description:de Anti-Fingerprinting Timing- und Scrollschutz - Führt zufällige Zeitstörungen ein, um Fingerprinting über Scroll- und Tippmuster zu verhindern, ohne die Benutzererfahrung zu beeinträchtigen.
// @name:tel        ప్రవర్తనాత్మక గందరగోళం
// @description:tel స్క్రోల్ మరియు టైపింగ్ ప్యాటర్న్స్ ద్వారా ఫింగర్‌ప్రింటింగ్‌ను నివారించేందుకు యూజర్ అనుభవాన్ని ప్రభావితం చేయకుండా రాండమైజ్ చేసిన టైమింగ్ జిట్టర్‌ను ప్రవేశపెడుతుంది.
// @name:es         Ofuscador Comportamental
// @description:es Protección contra huellas dactilares mediante tiempo y desplazamiento - Introduce variaciones aleatorias de tiempo para evitar la huella digital mediante patrones de desplazamiento y escritura sin afectar la experiencia del usuario.
// @name:en         Behavioral Obfuscator
// @description:en Anti-Fingerprinting Timing & Scroll Protection - Introduces randomized timing jitter to prevent fingerprinting via scroll and typing patterns without affecting UX.
// @name:fr         Obfuscateur Comportemental
// @description:fr Protection contre le fingerprinting via le timing et le défilement - Introduit une variation aléatoire du timing pour empêcher le fingerprinting via les modèles de défilement et de frappe sans affecter l'expérience utilisateur.
// @name:fr-CA      Obfuscateur Comportemental
// @description:fr-CA Protection contre le fingerprinting via le timing et le défilement - Introduit une variation aléatoire du timing pour empêcher le fingerprinting via les modèles de défilement et de frappe sans affecter l'expérience utilisateur.
// @name:he         מטשטש התנהגותי
// @description:he הגנה מפני זיהוי פינגרפרינטינג על ידי זמנים וגלילה - מציג חרסום זמנים אקראיים כדי למנוע זיהוי פינגרפרינטינג דרך דפוסי גלילה והקלדה מבלי להשפיע על חווית המשתמש.
// @name:hu         Viselkedési Rejtés
// @description:hu Anti-fingerprinting időzítés és görgetés védelem - Véletlenszerű időzítési ingadozásokat vezet be a görgetési és gépelési mintákon keresztül történő fingerprinting megakadályozására anélkül, hogy befolyásolná a felhasználói élményt.
// @name:id         Pengaburan Perilaku
// @description:id Perlindungan Anti-Fingerprinting dengan Waktu & Scroll - Memperkenalkan jitter waktu acak untuk mencegah fingerprinting melalui pola gulir dan ketikan tanpa memengaruhi pengalaman pengguna.
// @name:it         Ofuscante Comportamentale
// @description:it Protezione contro il fingerprinting tramite tempo e scorrimento - Introduce una variazione casuale del timing per prevenire il fingerprinting tramite modelli di scorrimento e digitazione senza influire sull'esperienza utente.
// @name:ko         행동 은폐기
// @description:ko 지문 방지 타이밍 및 스크롤 보호 - 스크롤 및 타이핑 패턴을 통한 지문 식별을 방지하기 위해 무작위 타이밍 지터를 도입하며 UX에 영향을 주지 않습니다.
// @name:nb         Atferdsforvirrer
// @description:nb Anti-fingerprinting tid og rullebeskyttelse - Introducerer tilfeldig tidsforstyrrelse for å hindre fingeravtrykk via rulle- og tastemønstre uten å påvirke brukeropplevelsen.
// @name:nl         Gedragsverduisteraar
// @description:nl Anti-fingerprinting tijd en scrollbescherming - Introduceert willekeurige tijdsvariaties om fingerprinting via scroll- en typemodellen te voorkomen zonder de gebruikerservaring te beïnvloeden.
// @name:pl         Obfuscator Zachowań
// @description:pl Ochrona przed fingerprintingiem za pomocą czasu i przewijania - Wprowadza losowe drgania czasowe, aby zapobiec fingerprintingowi za pomocą wzorców przewijania i pisania, nie wpływając na doświadczenie użytkownika.
// @name:pt-BR      Ofuscador Comportamental
// @description:pt-BR Proteção contra Fingerprinting por Tempo e Rolagem - Introduz uma variação de tempo aleatória para prevenir fingerprinting por padrões de rolagem e digitação sem afetar a experiência do usuário.
// @name:ro         Ofuscator Comportamental
// @description:ro Protecție Anti-Fingerprinting prin sincronizare și derulare - Introduce fluctuații de timp aleatorii pentru a preveni fingerprinting-ul prin modelele de derulare și tastare fără a afecta experiența utilizatorului.
// @name:ru         Поведенческий Обфускатор
// @description:ru Защита от отпечатков пальцев с помощью времени и прокрутки - Внедряет случайные колебания времени, чтобы предотвратить сбор отпечатков пальцев через прокрутку и типовые паттерны без влияния на пользовательский интерфейс.
// @name:sk         Behaviorálny Zmätkovač
// @description:sk Ochrana proti fingerprintingu cez časovanie a rolovanie - Zavádza náhodné kolísanie času na zabránenie fingerprintingu cez rolovanie a písanie vzorcov bez ovplyvnenia používateľského zážitku.
// @name:sr         Behvioralni Obfuskator
// @description:sr Zaštita od fingerprintinga pomoću vremena i skrolovanja - Uvođenje nasumičnih vremenskih varijacija da se spreči fingerprinting putem obrazaca skrolovanja i kucanja bez uticaja na koris
// @version         0.1.1
// @author          PolyMegos (https://github.com/polymegos)
// @namespace       https://github.com/polymegos/behavioral-obfuscator
// @supportURL      https://github.com/polymegos/behavioral-obfuscator/issues
// @license         MIT
// @match           *://*/*
// @run-at          document-start
// @grant           none
// @compatible      chrome
// @compatible      firefox
// @compatible      opera
// @compatible      edge
// @compatible      safari
// ==/UserScript==

(function() {
    'use strict';

    // Small-range subtle jitter generation
    function generateJitter(range) {
        return (Math.random() * 2 - 1) * range;
    }

    // Apply typing jitter only when a keys are pressed
    let typingTimer = null;
    window.addEventListener('keydown', (e) => {
        if (typingTimer) clearTimeout(typingTimer);
        // Some small delay before processing key event
        typingTimer = setTimeout(() => {
            const delay = Math.random() * 40 + Math.random() * 40; // 0-80ms delay for typing
            e.preventDefault();
            setTimeout(() => {
                // Simulate the keypress after random delay
                document.dispatchEvent(new KeyboardEvent('keydown', {
                    key: e.key,
                    code: e.code,
                    keyCode: e.keyCode,
                    which: e.which
                }));
            }, delay);
        }, 5); // Prefix with tiny added initial delay before simulating keypress
    });

    // Apply scroll delay jitter only when user actually scrolls
    let lastScrollTime = 0;
    window.addEventListener('scroll', () => {
        const now = performance.now();
        const delay = Math.random() * 75 + Math.random() * 75; // 0-150ms delay between scrolls
        
        // Add small jitter to scroll position when the user scrolls
        if (now - lastScrollTime < delay) return; // Don't interrupt if scrolling too fast
        lastScrollTime = now;
        let scrollX = window.scrollX;
        let scrollY = window.scrollY;
        
        // Add small jitter to scroll position (1-2 pixels offset)
        const noiseX = generateJitter(2);
        const noiseY = generateJitter(2);
        window.scrollTo(scrollX + noiseX, scrollY + noiseY);
    }, { passive: true });

})();