// ==UserScript== // @name Papergames Ban Bypass // @namespace github.com/longkidkoolstar // @version 0.1 // @description Simple userscript to randomize browser fingerprints and block certain tracking APIs. // @author longkidkoolstar // @match https://papergames.io/* // @grant none // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; // Randomize User-Agent const userAgentList = [ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.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.3 Safari/605.1.15', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:93.0) Gecko/20100101 Firefox/93.0', 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.2 Mobile/15E148 Safari/604.1' ]; const randomUserAgent = userAgentList[Math.floor(Math.random() * userAgentList.length)]; Object.defineProperty(navigator, 'userAgent', { get: function() { return randomUserAgent; } }); // Spoof Screen Resolution const fakeScreenWidth = Math.floor(Math.random() * (1920 - 800 + 1) + 800); const fakeScreenHeight = Math.floor(Math.random() * (1080 - 600 + 1) + 600); Object.defineProperty(window.screen, 'width', { get: function() { return fakeScreenWidth; } }); Object.defineProperty(window.screen, 'height', { get: function() { return fakeScreenHeight; } }); // Block Canvas Fingerprinting const originalToDataURL = HTMLCanvasElement.prototype.toDataURL; HTMLCanvasElement.prototype.toDataURL = function(type) { console.log("Canvas toDataURL blocked."); return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA"; }; const originalGetImageData = CanvasRenderingContext2D.prototype.getImageData; CanvasRenderingContext2D.prototype.getImageData = function(x, y, width, height) { console.log("Canvas getImageData blocked."); return originalGetImageData.call(this, x, y, width, height); }; // Block WebGL Fingerprinting const getParameter = WebGLRenderingContext.prototype.getParameter; WebGLRenderingContext.prototype.getParameter = function(parameter) { if (parameter === 37446 || parameter === 37447) { console.log("WebGL parameter blocked."); return "Blocked"; } return getParameter.call(this, parameter); }; // Clear cookies and local storage on page load window.addEventListener('load', function() { console.log('Clearing cookies and local storage.'); document.cookie.split(";").forEach(function(c) { document.cookie = c.trim().split("=")[0] + "=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/"; }); localStorage.clear(); sessionStorage.clear(); }); })();