Greasy Fork

Greasy Fork is available in English.

Bypass网页调试限制

用于绕过限制和调试问题的差价,绕过debugger,绕过移动端检测,绕过ua检测,限制RTC泄露等功能

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Bypass网页调试限制
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  用于绕过限制和调试问题的差价,绕过debugger,绕过移动端检测,绕过ua检测,限制RTC泄露等功能
// @author       arschlochnop
// @license   MIT
// @match        *://*/*
// @run-at       document-start
// ==/UserScript==

// 删除RTC相关对象,防止泄露真实IP
["","webkit","moz","ms"].forEach(prefix => {
    [
        "RTCError",
        "RTCRtpSender",
        "RTCDTMFSender",
        "RTCErrorEvent",
        "RTCTrackEvent",
        "RTCCertificate",
        "RTCDataChannel",
        "RTCRtpReceiver",
        "RTCStatsReport",
        "RTCIceCandidate",
        "RTCIceTransport",
        "RTCDtlsTransport",
        "RTCSctpTransport",
        "RTCPeerConnection",
        "RTCRtpTransceiver",
        "RTCDataChannelEvent",
        "RTCEncodedAudioFrame",
        "RTCEncodedVideoFrame",
        "RTCSessionDescription",
        "RTCDTMFToneChangeEvent",
        "RTCPeerConnectionIceEvent",
        "RTCPeerConnectionIceErrorEvent"
    ].forEach(rtc => {
        const obj = prefix + rtc;
        if (unsafeWindow[obj]) delete unsafeWindow[obj];
    });
});

// 修改navigator对象,防止泄露真实信息
const platform = "Android";
const platforms = {
    "HP-UX": "Mozilla/5.0 (HP-UX; HP-UX 11.31)",
    "Linux i686": "Mozilla/5.0 (Linux; i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
    "Linux armv7l": "Mozilla/5.0 (Linux; ARM; Android 4.4.2; Nexus 7 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
    "Mac68K": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)",
    "MacPPC": "Mozilla/5.0 (Macintosh; PPC Mac OS X 10_15_7)",
    "MacIntel": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)",
    "SunOS": "Mozilla/5.0 (SunOS; SunOS 5.11)",
    "Win16": "Mozilla/5.0 (Windows 3.1)",
    "Win32": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
    "WinCE": "Mozilla/5.0 (Windows CE; IEMobile 10.0)",
    "iPhone": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",
    "iPod": "Mozilla/5.0 (iPod; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",
    "iPad": "Mozilla/5.0 (iPad; CPU OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",
    "Android": "Mozilla/5.0 (Linux; Android 10; Pixel 3 XL Build/QQ1A.200205.002) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Mobile Safari/537.36",
    "BlackBerry": "Mozilla/5.0 (BB10; Touch) AppleWebKit/537.36 (KHTML, like Gecko) Version/10.3.3.2204 Mobile Safari/537.36",
    "Opera": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2516.0"
};


    Object.defineProperty(navigator, 'platform', { get: function() {console.log("禁止查看浏览器平台"); return platform; } });
    Object.defineProperty(navigator,'userAgent',{get:function(){console.log("禁止查看浏览器UA");return platforms[platform];}});
    Object.defineProperty(navigator,'language',{get:function(){console.log("禁止查看浏览器语言");return 'en-US';}});
    Object.defineProperty(navigator,'languages',{get:function(){console.log("禁止查看浏览器语言集"); return ['en-GB', 'en-US'];}});
    Object.defineProperty(navigator,'userAgentData',{get:function(){console.log("禁止查看userAgentData"); return '';}});
    Object.defineProperty(navigator,'appVersion',{get:function(){console.log("禁止查看appVersion"); return '999';}});
Intl.DateTimeFormat.prototype.resolvedOptions = function() {
    console.log("禁止查看时区");
};


// 绕过debugger防调试功能
console.log("========== my hook start ==========");

function hook_Function() {
    let raw_F_c = Function.prototype.constructor;
    let _constructor = function (params) {
        //注释输出,避免影响性能
        //console.log("调用 Function.prototype.constructor: ", params);
        if (params.includes("debugger")) {
            //console.log("发现 debugger in Function.prototype.constructor");
            params = params.replaceAll("debugger", "");
        }
        return raw_F_c(params);
    }
    Object.defineProperty(window.Function.prototype, "constructor", { value: _constructor })
}

function hook_setInterval() {
    let raw_set = setInterval;
    let _setInterval = function () {
        console.log("调用 setInterval: ", arguments)
        // 直接置空似乎没有什么影响
        return;  // 如果出现问题可以删除该语句

        let s = arguments[0].toString();
        if (s.includes("debugger")) {
            console.log("发现 debugger in setInterval");
            s = s.replaceAll("debugger", "");
            arguments[0] = eval(s);
        }
        raw_set(...arguments);
    }
    Object.defineProperty(window, "setInterval", { value: _setInterval })
}

function hook_eval() {
    let raw_eval = eval;
    let _eval = function(param) {
        console.log("调用 eval: ", param);
        if (param.includes("debugger")) {
            console.log("发现 debugger in eval");
            if (param === "(function() {var a = new Date(); debugger; return new Date() - a > 100;}())") {
                param = "(function() { return false; })()";
            }
            param = param.replaceAll("debugger", "");
        }
        raw_eval(param);
    }
    Object.defineProperty(window, "eval", { value: _eval })
}


hook_setInterval();
hook_eval();

// 如果置空 setInterval 出现了其它问题,可以取消该注释
// 可能会影响一些负责页面的渲染功能,默认关闭,如果无法绕过debugger可以取消注释
//hook_Function();