Anti-Adblock & Bypass Cloaker

Masque Tampermonkey + bloqueurs anti-bypass (Revbid, Coinzilla, Netpub...)

// ==UserScript==
// @name         Anti-Adblock & Bypass Cloaker
// @namespace    elite.bypass
// @version      1.0
// @description  Masque Tampermonkey + bloqueurs anti-bypass (Revbid, Coinzilla, Netpub...)
// @author       Abdelali
// @match        *://*/*
// @run-at       document-start
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    // Étape 1 - Camoufler Tampermonkey
    const oldDefineProperty = Object.defineProperty;
    Object.defineProperty = function (obj, prop, descriptor) {
        if (prop === '__tampermonkey__') return;
        return oldDefineProperty(obj, prop, descriptor);
    };

    const oldCall = Function.prototype.call;
    Function.prototype.call = function (...args) {
        if (this.name === 'toString' && args[0] && args[0].__tampermonkey__) return () => '';
        return oldCall.apply(this, args);
    };

    // Étape 2 - Bloquer les scripts des régies avant chargement
    const blockedPatterns = [
        "prebid.revbid.net",
        "fstatic.netpub.media",
        "moonboom.net/public/banner.js",
        "shareus.io/scripts/tag/js/gpt.js",
        "static.criteo.net/js/ld/publishertag.prebid.js",
        "cdn.id5-sync.com/api"
    ];

    const observer = new MutationObserver((mutations) => {
        for (const mutation of mutations) {
            for (const node of mutation.addedNodes) {
                if (node.tagName === 'SCRIPT' && node.src) {
                    if (blockedPatterns.some(pattern => node.src.includes(pattern))) {
                        node.remove();
                        console.warn("❌ Script publicitaire bloqué :", node.src);
                    }
                }
            }
        }
    });

    observer.observe(document.documentElement, { childList: true, subtree: true });

    // Étape 3 - Faux positifs (anti-adblock)
    Object.defineProperty(window, "adblock", { value: false });
    Object.defineProperty(window, "adBlockActive", { value: false });
    Object.defineProperty(window, "isUsingAdblocker", { value: false });

    Object.defineProperty(navigator, "userAgent", {
        get: () => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/119.0.0.0 Safari/537.36"
    });

    // Étape 4 - Cacher les extensions
    try {
        delete window.chrome.runtime;
    } catch (e) {}

    // Étape 5 - Surpasser les tests fetch / XHR si nécessaire
    const originalFetch = window.fetch;
    window.fetch = async (...args) => {
        const url = args[0];
        if (blockedPatterns.some(p => url.includes(p))) {
            return new Response("", { status: 200, statusText: "OK" });
        }
        return originalFetch(...args);
    };

    const OriginalXHR = window.XMLHttpRequest;
    function FakeXHR() {
        const xhr = new OriginalXHR();
        const open = xhr.open;
        xhr.open = function (method, url, ...rest) {
            if (blockedPatterns.some(p => url.includes(p))) {
                this.send = () => {
                    this.readyState = 4;
                    this.status = 200;
                    this.responseText = '';
                    this.onreadystatechange && this.onreadystatechange();
                };
            } else {
                open.call(this, method, url, ...rest);
            }
        };
        return xhr;
    }
    window.XMLHttpRequest = FakeXHR;
})();