var background = (function () { var tmp = {}; chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { for (var id in tmp) { if (tmp[id] && (typeof tmp[id] === "function")) { if (request.path === "background-to-page") { if (request.method === id) tmp[id](request.data); } } } }); /* */ return { "receive": function (id, callback) {tmp[id] = callback}, "send": function (id, data) {chrome.runtime.sendMessage({"path": "page-to-background", "method": id, "data": data})} } })(); var inject = function () { function toString(){return Function.prototype.toString();} const lg = navigator.__proto__.__lookupGetter__ ; const lgs = navigator.__lookupGetter__.toString(); if(false)navigator.__lookupGetter__.__proto__.toString = function(){ console.log("%c++++++ navigator.__lookupGetter__",'background: #222; color: #bada55',arguments[0]); return lg.apply(this,arguments); } function req(c){console.log("%c"+c,"background:lightblue");}; var pl = {}; delete navigator.__proto__.connection; delete navigator.__proto__.brave; //delete navigator.__proto__.deviceMemory; navigator.__defineGetter__('deviceMemory', function(){req("deviceMemory");return 4;}); window.screen.__defineGetter__('availHeight', function(){req('availHeight');return window.screen.height-64}); //navigator.__defineGetter__('plugins', function(){req("plugins");return [];}); function __lookupGetter__(p){ var o=navigator.__proto__.__lookupGetter__(p); console.log("%c----------navigator.__lookupGetter__:", "background: yellow; color: red", p, o); return o; } navigator.__lookupGetter__ = __lookupGetter__ navigator.__lookupGetter__.toString = () => { console.log("%c++++++ navigator.__lookupGetter__ itself",'background: orange; color: blue'); return lgs; } navigator.__lookupGetter__.toString.toString = toString; Object.defineProperty(navigator, 'mimeTypes', { get: () => { var ChromiumPDFPlugin = {}; ChromiumPDFPlugin.__proto__ = MimeType.prototype; var plugins = { 0: { __proto__: ChromiumPDFPlugin, type: 'application/pdf', suffixes: 'pdf', description: '', enabledPlugin: null, length:1, }, length: 1, __proto__: MimeTypeArray.prototype, }; req("mimeTypes"); return plugins; }, }); Object.defineProperty(navigator, 'plugins', { get: () => { var ChromiumPDFPlugin = {}; ChromiumPDFPlugin.__proto__ = Plugin.prototype; var plugins = { 0: { __proto__: ChromiumPDFPlugin, description: 'Portable Document Format', filename: 'gjhy6t5r4yvbszanjhvr4ghy43s', name: 'PDF Plugin', length: 1, 0: navigator.mimeTypes[0] }, length: 1, __proto__: PluginArray.prototype, }; req("plugins"); return plugins; }, }); if(navigator.userAgent.indexOf("Windows")>-1) navigator.__defineGetter__('platform', function(){req("platform");return "Win32";}); function getOwnPropertyDescriptor(a,b){ if((a === navigator) || (a === window.screen)){ console.log("%c----descriptor:" + (typeof a) + " :","background-color:violet;color:white", a, "el: ",b, "output: ", a.__lookupGetter__(b)); return undefined; } else return gop.apply(this, arguments); } function getOwnPropertyDescriptors(a){ if((a === navigator) || (a === window.screen))console.log("%c----descriptors: " + (typeof a) + " :","background-color:violet;color:yellow", a, "output: ", gop2.apply(this, arguments)); return (a === navigator) || (a === window.screen) ? {} : gop2.apply(this, arguments); var desc = Object.getOwnPropertyDescriptors(a); for(let i in desc){ for(let k in desc[i])this[i][k] = desc[i][k]; this[i].get = a.__proto__.__lookupGetter__(i); } return this; } const gop = Object.getOwnPropertyDescriptor; const gops = Object.getOwnPropertyDescriptor.toString(); Object.getOwnPropertyDescriptor = getOwnPropertyDescriptor; Object.getOwnPropertyDescriptor.toString = () => gops; Object.getOwnPropertyDescriptor.toString.toString = toString; const gop2 = Object.getOwnPropertyDescriptors; const gops2 = Object.getOwnPropertyDescriptors.toString(); Object.getOwnPropertyDescriptors = getOwnPropertyDescriptors; Object.getOwnPropertyDescriptors.toString = () => gops2; Object.getOwnPropertyDescriptors.toString.toString = toString; //anonym!!----- var rn = 4 < 9; var nat = {}; var strnat = {}; var config = { "random": { "value": function () { return rn ? 0.80834 : Math.random(); }, "item": function (e) { var rand = e.length * config.random.value(); return e[Math.floor(rand)]; }, "number": function (power) { var tmp = []; for (var i = 0; i < power.length; i++) { tmp.push(Math.pow(2, power[i])); } /* */ return config.random.item(tmp); }, "int": function (power) { var tmp = []; for (var i = 0; i < power.length; i++) { var n = Math.pow(2, power[i]); tmp.push(new Int32Array([n, n])); } /* */ return config.random.item(tmp); }, "float": function (power) { var tmp = []; for (var i = 0; i < power.length; i++) { var n = Math.pow(2, power[i]); tmp.push(new Float32Array([1, n])); } /* */ return config.random.item(tmp); } }, "spoof": { "webgl": { "buffer": function (target) { var proto = target.prototype ? target.prototype : target.__proto__; nat["bufferData"] = proto.bufferData; strnat["bufferData"] = nat["bufferData"].toString(); function bufferData() { var index = Math.floor(config.random.value() * arguments[1].length); var noise = arguments[1][index] !== undefined ? 0.1 * config.random.value() * arguments[1][index] : 0; // arguments[1][index] = arguments[1][index] + noise; //window.top.postMessage("webgl-fingerprint-defender-alert", '*'); // return nat["bufferData"].apply(this, arguments); } proto.bufferData = bufferData; proto.bufferData.toString = () => { console.log('%cwebgl--bufferData func. check','background-color:black;color:orange'); return strnat["bufferData"]; } proto.bufferData.toString.toString = toString; }, "parameter": function (target) { var proto = target.prototype ? target.prototype : target.__proto__; nat["getParameter"] = proto.getParameter; strnat["getParameter"] = nat["getParameter"].toString(); function getParameter() { window.top.postMessage("webgl-fingerprint-defender-alert", '*'); // if (arguments[0] === 3415) return 0; else if (arguments[0] === 3414) return 24; else if (arguments[0] === 36348) return 30; else if (arguments[0] === 7936) return "WebKit"; else if (arguments[0] === 37445) return "Google Inc."; else if (arguments[0] === 7937) return "WebKit WebGL"; else if (arguments[0] === 3379) return config.random.number([14, 15]); else if (arguments[0] === 36347) return config.random.number([12, 13]); else if (arguments[0] === 34076) return config.random.number([14, 15]); else if (arguments[0] === 34024) return config.random.number([14, 15]); else if (arguments[0] === 3386) return config.random.int([13, 14, 15]); else if (arguments[0] === 3413) return config.random.number([1, 2, 3, 4]); else if (arguments[0] === 3412) return config.random.number([1, 2, 3, 4]); else if (arguments[0] === 3411) return config.random.number([1, 2, 3, 4]); else if (arguments[0] === 3410) return config.random.number([1, 2, 3, 4]); else if (arguments[0] === 34047) return config.random.number([1, 2, 3, 4]); else if (arguments[0] === 34930) return config.random.number([1, 2, 3, 4]); else if (arguments[0] === 34921) return config.random.number([1, 2, 3, 4]); else if (arguments[0] === 35660) return config.random.number([1, 2, 3, 4]); else if (arguments[0] === 35661) return config.random.number([4, 5, 6, 7, 8]); else if (arguments[0] === 36349) return config.random.number([10, 11, 12, 13]); else if (arguments[0] === 33902) return config.random.float([0, 10, 11, 12, 13]); else if (arguments[0] === 33901) return config.random.float([0, 10, 11, 12, 13]); else if (arguments[0] === 37446) return config.random.item(["Graphics", "HD Graphics", "Intel(R) HD Graphics"]); else if (arguments[0] === 7938) return config.random.item(["WebGL 1.0", "WebGL 1.0 (OpenGL)", "WebGL 1.0 (OpenGL Chromium)"]); else if (arguments[0] === 35724) return config.random.item(["WebGL", "WebGL GLSL", "WebGL GLSL ES", "WebGL GLSL ES (OpenGL Chromium)"]); // return nat["getParameter"].apply(this, arguments); } proto.getParameter = getParameter; proto.getParameter.toString = () => { console.log('%cwebgl--getParameter func. check','background-color:black;color:yellow'); return strnat["getParameter"] }; proto.getParameter.toString.toString = toString; } } } }; // config.spoof.webgl.buffer(WebGLRenderingContext); config.spoof.webgl.buffer(WebGL2RenderingContext); config.spoof.webgl.parameter(WebGLRenderingContext); config.spoof.webgl.parameter(WebGL2RenderingContext); const origToString = Function.prototype.toString; const origToStringToString = Function.prototype.toString.toString(); function toString(){return origToStringToString;} Function.prototype.toString = function(){ const fnames = Object.keys(nat); return fnames.indexOf(this.name)>-1 ? strnat[this.name]: origToString.apply(this, arguments) }; document.documentElement.dataset.wgscriptallow = true; }; function ochrana(){ if( true || document.createElemement.toString().indexOf("native")==-1|| document.constructor.prototype.createElemement.toString().indexOf("native")==-1 ){ document.documentElement.innerHTML="error"; return false; }else console.log("ochrana OK"); return true; } var script_1 = document.createElement("script"); script_1.textContent = "(" + inject + ")()"; document.documentElement.appendChild(script_1); script_1.remove(); delete script_1; if (document.documentElement.dataset.wgscriptallow !== "true") { var script_2 = document.createElement("script"); script_2.textContent = `{ const iframes = [...window.top.document.querySelectorAll("iframe[sandbox]")]; for (var i = 0; i < iframes.length; i++) { if (iframes[i].contentWindow) { if (iframes[i].contentWindow.WebGLRenderingContext) { iframes[i].contentWindow.WebGLRenderingContext.prototype.bufferData = WebGLRenderingContext.prototype.bufferData; iframes[i].contentWindow.WebGLRenderingContext.prototype.getParameter = WebGLRenderingContext.prototype.getParameter; } if (iframes[i].contentWindow.WebGL2RenderingContext) { iframes[i].contentWindow.WebGL2RenderingContext.prototype.bufferData = WebGL2RenderingContext.prototype.bufferData; iframes[i].contentWindow.WebGL2RenderingContext.prototype.getParameter = WebGL2RenderingContext.prototype.getParameter; } } } }`; // window.top.document.documentElement.appendChild(script_2); script_2.remove(); delete script_2; } window.addEventListener("message", function (e) { if (e.data && e.data === "webgl-fingerprint-defender-alert") { background.send("fingerprint", {"host": document.location.host}); } }, false);