You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TamperMonkey脚本Hook setInterval失效,无法阻止无限debugger求排查

问题分析与修复方案

你的Hook代码没生效主要是执行时机太晚,加上代码本身存在小缺陷,具体问题和修复如下:

核心问题

  1. 脚本注入时机滞后:TamperMonkey默认运行时机是document-end或DOMContentLoaded,此时网站的反调试代码已经先调用了setInterval,你的Hook根本没来得及拦截。
  2. 未返回合法定时器ID:原代码调用new_setInterval(a,b)时没有用return返回结果,会导致正常的setInterval调用返回undefined,可能引发其他异常。
  3. 字符串匹配存在漏洞:如果网站用Function('debugger')这类方式创建反调试函数,a.toString()可能不会直接包含debugger字符串,导致拦截失效。

修复后的代码

// ==UserScript==
// @name         Block Animelon Anti-Debugger
// @namespace    http://tampermonkey.net/
// @version      0.1
// @match        https://animelon.com/video/*
// @run-at       document-start  // 关键:在页面脚本执行前注入
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    const originalSetInterval = window.setInterval;
    window.setInterval = function(callback, delay, ...args) {
        // 用正则更严谨匹配debugger指令
        const callbackStr = callback.toString();
        if (/debugger/i.test(callbackStr)) {
            console.log('Blocked anti-debugger setInterval');
            return null;
        }
        // 必须返回原函数的返回值,保证正常定时器工作
        return originalSetInterval(callback, delay, ...args);
    };
})();

额外优化(可选)

部分网站还会用setTimeout实现反调试,或者直接在全局插入debugger指令,可以补充以下代码增强拦截:

// 同时Hook setTimeout
const originalSetTimeout = window.setTimeout;
window.setTimeout = function(callback, delay, ...args) {
    const callbackStr = callback.toString();
    if (/debugger/i.test(callbackStr)) {
        console.log('Blocked anti-debugger setTimeout');
        return null;
    }
    return originalSetTimeout(callback, delay, ...args);
};

// 全局禁用debugger指令
window.debugger = function() {
    console.log('Debugger call blocked');
};

内容的提问来源于stack exchange,提问作者Toxican

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:30:03