Cowanimato

Um UserScript que tenta fazer com que você fique anonimo ao maximo na internet.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

You will need to install an extension such as Tampermonkey to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name          Cowanimato
// @description   Um UserScript que tenta fazer com que você fique anonimo ao maximo na internet.
// @namespace     CowanNIMO
// @license       GPL-3.0
// @version       2.0
// @author        Cowanbas
// @match         *://*/*
// @run-at        document-start
// ==/UserScript==

(function () {
  'use strict';

  // Bloqueia cookies de rastreamento
  Object.defineProperty(document, 'cookie', {
    get: () => "",
    set: () => { },
    configurable: true
  });

  setInterval(() => {
    try {
      Object.defineProperty(document, 'cookie', {
        get: () => "",
        set: () => { },
        configurable: true
      });
    } catch (e) { }
  }, 1000);

  // Bloqueia Referer (evita que sites saibam de onde você veio)
  Object.defineProperty(document, 'referrer', { get: () => '', configurable: true });

  // Altera User-Agent e outras propriedades para evitar fingerprinting
  const fakeUA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36';

  Object.defineProperty(navigator, 'userAgent', { get: () => fakeUA, configurable: true });
  Object.defineProperty(navigator, 'platform', { get: () => 'Win32', configurable: true });
  Object.defineProperty(navigator, 'language', { get: () => 'en-US', configurable: true });
  Object.defineProperty(navigator, 'webdriver', { get: () => false, configurable: true });
  Object.defineProperty(navigator, 'plugins', { get: () => [], configurable: true });
  Object.defineProperty(navigator, 'hardwareConcurrency', { get: () => 4, configurable: true });

  // Impede fingerprinting básico (WebGL, Canvas, Audio)
  const blockFingerprinting = () => {
    const protectCanvas = (ctx) => {
      if (!ctx) return;
      const originalGetImageData = ctx.getImageData;
      ctx.getImageData = function (x, y, w, h) {
        const data = originalGetImageData.call(this, x, y, w, h);
        for (let i = 0; i < data.data.length; i += 4) {
          data.data[i] ^= 0xFF;
        }
        return data;
      };
    };
    protectCanvas(CanvasRenderingContext2D.prototype);

    // Bloqueia WebGL Fingerprinting
    const fakeWebGL = (gl) => {
      if (!gl) return;
      const originalGetParameter = gl.getParameter;
      gl.getParameter = function (param) {
        if (param === 37445) return 'Intel OpenGL Fake';
        if (param === 37446) return 'Fake GPU Model';
        return originalGetParameter.call(gl, param);
      };
    };
    fakeWebGL(WebGLRenderingContext.prototype);
    fakeWebGL(WebGL2RenderingContext.prototype);
  };
  blockFingerprinting();

  // Função utilitária para redefinir propriedades de objetos (usada nas novas proteções)
  function redefine(obj, prop, value) {
    try {
      Object.defineProperty(obj, prop, { get: () => value, set: () => { }, configurable: true });
    } catch (e) { }
  }

  // Acrescenta propriedades extras ao navigator
  redefine(navigator, 'languages', ['en-US', 'en']);
  redefine(navigator, 'deviceMemory', 8);

  // Canvas extra - Protege toDataURL e toBlob
  if (window.CanvasRenderingContext2D) {
    const ctxProto = CanvasRenderingContext2D.prototype;
    if (!ctxProto._anonimato_patched) {
      const scramble = str => str.split('').reverse().join('');
      const origToDataURL = ctxProto.toDataURL;
      ctxProto.toDataURL = function () {
        return scramble(origToDataURL.apply(this, arguments));
      };
      const origToBlob = ctxProto.toBlob;
      ctxProto.toBlob = function (callback, ...args) {
        origToBlob.call(this, function (blob) {
          callback(blob);
        }, ...args);
      };
      ctxProto._anonimato_patched = true;
    }
  }

  // Protege AudioContext (fingerprinting)
  if (window.OfflineAudioContext) {
    const origStartRendering = OfflineAudioContext.prototype.startRendering;
    OfflineAudioContext.prototype.startRendering = function () {
      this.oncomplete = null;
      return origStartRendering.apply(this, arguments);
    };
  }

  // Remove ou neutraliza APIs de rastreamento
  const blockAPIs = [
    'deviceorientation', 'devicemotion', 'geolocation', 'clipboard', 'bluetooth'
  ];
  blockAPIs.forEach(api => {
    if (navigator[api]) redefine(navigator, api, undefined);
  });

  // Remove permissões de rastreamento (Geolocalização, etc)
  if (navigator.permissions) {
    const originalQuery = navigator.permissions.query;
    navigator.permissions.query = function (parameters) {
      if (parameters.name === 'geolocation') {
        return Promise.resolve({ state: 'denied' });
      }
      return originalQuery.apply(this, arguments);
    };
  }

  // Tenta bloquear WebRTC (vaza IP local)
  if (window.RTCPeerConnection) {
    window.RTCPeerConnection = function () {
      throw new Error('WebRTC blocked');
    };
  }

  // Limpa localStorage e sessionStorage
  try { localStorage.clear(); } catch (e) { }
  try { sessionStorage.clear(); } catch (e) { }

  // Remove Service Workers
  if ('serviceWorker' in navigator) {
    navigator.serviceWorker.getRegistrations().then(function (registrations) {
      for (let registration of registrations) {
        registration.unregister();
      }
    });
  }

  // Remove event listeners suspeitos
  window.addEventListener = function () { };
  document.addEventListener = function () { };

  // Remove métodos de fingerprinting conhecidos
  if (window.Intl) window.Intl = undefined;
  if (window.screen) {
    redefine(window.screen, 'width', 1920);
    redefine(window.screen, 'height', 1080);
    redefine(window.screen, 'colorDepth', 24);
  }

})();