强力反「反调试」(Anti Anti-Debugger Enhanced)

清除 Function/eval/Worker 等途径注入的 debugger,提供可选的已知反调试库精准防护与控制台防刷屏,并兼容常见人机验证

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

작성자
流萤可爱捏
일일 설치 수
1
총 설치 수
180
평점
2 0 0
버전
1.11.0
생성일
2026-03-29
갱신일
2026-08-02
크기
134KB
라이선스
MIT
적용 사이트
모든 사이트

强力反「反调试」(Anti Anti-Debugger Enhanced)

这是一个比较通用的阻止常见反调试的脚本,覆盖范围达80%左右!清除网页通过 debugger 无限断点、Function/eval 动态构造、Worker/SharedWorker/Worklet 等途径实施的调试阻断,同时智能兼容人机验证(Cloudflare Turnstile、reCAPTCHA、hCaptcha、Arkose/FunCaptcha),并提供油猴菜单一键开关。


✨ 功能特性

  • 精准剔除 debugger 语句:内置手写词法分析器,正确跳过字符串、注释、正则、模板字面量,绝不误删字符串里的 "debugger" 文本。
  • 全链路覆盖:主线程 eval / Function / AsyncFunction / GeneratorFunction / setTimeout / setInterval,以及 DOM 注入(appendChildinnerHTMLinsertAdjacentHTMLdocument.write 等)。
  • Worker 深度处理:通过 Blob / createObjectURL / Worker 链路追踪,将清洗逻辑注入 Worker 引导代码,并保持相对 importScripts 的原始基址。
  • SharedWorker 可选覆盖:考虑到唯一 blob: URL 会改变跨页面共享语义,v1.10 起改为显式开关,默认不开启。
  • Worklet 覆盖:清洗 Worklet.addModule 加载的 paint/audio/layout/animation 模块;发现相对模块依赖时安全回退。
  • 人机验证兼容:检测到验证资源时自动回滚全部补丁,避免把验证码 / 登录流程搞坏。
  • 反检测Function.prototype.toString 伪装,隐藏补丁痕迹。
  • 三档模式stable(默认稳健)/ aggressive(激进)/ diagnostic(诊断)。
  • 油猴菜单:一键切换模式、一键禁用 / 启用当前站点,配置持久化。
  • 页面状态提示:每次进入网页都会提示脚本是否正在运行及当前模式;菜单切换后显示对应结果。
  • 可选精准防护:精确识别 disable-devtool 的官方 CDN、自托管文件名、disable-devtool-auto 属性及独有代码指纹,并优先通过公开 isSuspend API 暂停探针。
  • 控制台防刷屏:聚合短时间内的重复、同形及极高频日志;连续刷屏进入静默,安静一个统计窗口后自动恢复。
  • 运行时统计:诊断模式下可查看清洗次数、包裹的 Worker 数等指标。
  • 防重复注入:多脚本管理器 / 多次注入下也不会 Proxy 套 Proxy。

📦 安装

  1. 安装用户脚本管理器:Tampermonkey / Violentmonkey
  2. 从 GreasyFork 安装本脚本。
  3. 打开任意网页即自动生效(默认 stable 模式)。

🚀 使用方式

默认即开箱即用。若某网站仍然疯狂断点,可切到激进模式:

  • 点击浏览器里的脚本管理器图标 → 选择本脚本的菜单命令:
    • 切换模式(stable → aggressive → diagnostic):循环切换并自动刷新,刷新后提示切换结果。
    • 精准防护(开启 / 关闭):独立于三档模式持久化;默认关闭,遇到已知反调试库或控制台持续刷屏时再开启。
    • 切换本站开关(禁用 / 启用):把当前域名加入 / 移出禁用名单并自动刷新;重新启用时同时提示当前模式。

每次进入新页面时,顶层页面底部会短暂显示运行状态:正常运行时显示 stable / aggressive / diagnostic 模式,本站被禁用或因人机验证兼容而跳过时显示“未运行”及原因;内嵌 iframe 不重复弹出。

⚠️ 由于脚本使用 @inject-into page 运行在页面上下文,个别脚本管理器可能不注入同步 GM_* API。此时菜单与持久化会静默失效,但核心反调试功能不受影响,会以源码内默认配置运行。


⚙️ 配置项

打开脚本源码顶部的 CONFIG 对象即可调整:

配置项 默认 说明
MODE 'stable' 运行模式:stable / aggressive / diagnostic
DEBUG_LOG false 控制台调试日志(diagnostic 模式自动开启)
PATCH_EVAL false 代理 eval(激进;会影响 direct eval 的局部作用域)
PATCH_WORKER false 注入 classic Worker 引导(aggressive 自动开启)
PATCH_SHARED_WORKER false 包裹 classic SharedWorker;会改变跨页面共享语义,须手动开启
PATCH_WORKLET false 清洗 Worklet.addModule 模块(激进)
PATCH_BLOB true 追踪脚本型 Blob,在 Worker / script 等代码入口使用清洗副本,不改写普通 Blob 数据
AGGRESSIVE_IMPORT_SCRIPTS false Worker 内 importScripts 用 XHR+eval 拦截(激进)
ALLOW_SYNC_WORKER_FETCH false 允许主线程同步读取未追踪的 Worker/Worklet URL(激进)
BLOCK_CONSOLE_CLEAR true 阻止 console.clear
PRECISE_GUARD false 精准防护总开关;也可在油猴菜单中切换并持久化
GUARD_KNOWN_ANTI_DEBUG_LIBS true 总开关开启时,精确阻断或暂停已知反调试库
GUARD_CONSOLE_FLOOD true 总开关开启时,聚合重复日志并限制明显控制台洪泛
CONSOLE_REPEAT_LIMIT 8 同类控制台消息在统计窗口内允许输出的次数
CONSOLE_FLOOD_LIMIT 120 单个 console 方法在统计窗口内的总调用阈值
CONSOLE_FLOOD_WINDOW_MS 2000 控制台洪泛统计及安静恢复窗口(毫秒)
PATCH_INNER_HTML true 拦截 innerHTML 中的反调试代码
PATCH_REQUEST_ANIMATION_FRAME false 阻断可疑 rAF 回调(激进)
PATCH_DEBUGGER_CALLBACKS false 阻断整段含 debugger 的回调(激进)
HUMAN_VERIFICATION_COMPAT true 检测到人机验证时恢复原生环境
EXPOSE_DEBUG_API false 暴露 window.__ANTI_DEBUGGER__ 调试接口(诊断)
SHOW_STATUS_TOAST true 每次进入页面提示脚本运行状态和当前模式
DISABLE_HOSTS [] 命中的域名完全跳过(支持 example.com / *.example.com
FORCE_AGGRESSIVE_HOSTS [] 命中的域名强制 aggressive

切到 aggressive 时,会自动开启:PATCH_EVALPATCH_WORKERPATCH_WORKLETAGGRESSIVE_IMPORT_SCRIPTSALLOW_SYNC_WORKER_FETCHPATCH_REQUEST_ANIMATION_FRAMEPATCH_DEBUGGER_CALLBACKS


🔍 诊断 API

MODE 设为 'diagnostic'(或将 EXPOSE_DEBUG_API 设为 true)后,控制台可用 window.__ANTI_DEBUGGER__

// 查看运行时统计
__ANTI_DEBUGGER__.getStats();
// => { stripped, workersWrapped, workerFallbacks, bootstrapBuilds,
//      bootstrapCacheHits, workletModulesCleaned, workletRelativeSkips, ... }

// 查看兼容模式状态
__ANTI_DEBUGGER__.getCompatibilityState();

// 手动测试某段代码是否会被判定可疑 / 被清洗
__ANTI_DEBUGGER__.looksSuspicious('setInterval("debugger", 100)');
__ANTI_DEBUGGER__.stripDebugger('function f(){debugger;return 1}');
统计字段 含义
stripped 实际发生清洗的代码片段次数
workersWrapped 包裹的专用 Worker 数
workerFallbacks 临时 Worker URL 构造失败并回退原始 URL 的次数
sharedWorkersWrapped 包裹的 SharedWorker 数
workletModulesCleaned 清洗的 Worklet 模块数
workletRelativeSkips 为保留相对模块依赖而跳过清洗的次数
bootstrapBuilds / bootstrapCacheHits Worker 引导核心的构建 / 缓存命中次数
knownLibrariesDetected 精准防护命中的已知反调试库特征数
knownLibrariesBlocked / knownLibrariesSuspended 插入前阻断的脚本数 / 通过公开 API 暂停的库实例数
consoleCallsSuppressed / consoleFloodBursts 被抑制的控制台调用数 / 进入静默的洪泛批次数
compatActivations 人机验证兼容模式触发次数

🛡️ 人机验证兼容

脚本会在以下情况自动回滚全部补丁,恢复原生环境,避免破坏验证流程:

  • 页面本身即验证页(Cloudflare challenges.cloudflare.com/cdn-cgi/challenge-platform/、reCAPTCHA、hCaptcha、Arkose/FunCaptcha 等)。
  • 通过 <script>/<iframe>/setAttribute/innerHTML/srcdoc 等注入验证资源。
  • 触发与验证相关的 CSP 违规。

⚠️ 已知限制

  • SharedWorker:包裹后通过唯一 blob: URL 构造,跨标签页 / 跨上下文的「共享」语义会退化为每次构造独立,因此 v1.10 不再随 aggressive 自动开启;确有需要时手动开启 PATCH_SHARED_WORKER
  • Module Worker:为避免 classic bootstrap 破坏 ES module 语义,当前保持原生行为。
  • Worklet:作用域高度受限,无法承载完整引导逻辑;跨域模块无法同步读取,或源码含相对 import / export 依赖时会回退原始行为。
  • CSP:若站点异步阻止 blob: Worker 加载,浏览器不会在构造阶段抛错,脚本无法自动重试原始 URL;构造阶段的同步失败会自动回退。
  • 同步读取(激进模式)ALLOW_SYNC_WORKER_FETCH / AGGRESSIVE_IMPORT_SCRIPTS 使用同步 XHR,可能在极端情况下造成短暂卡顿;默认关闭。
  • PATCH_EVAL:代理 eval 会破坏 direct eval 的局部作用域语义,故默认关闭,仅激进模式开启。
  • 精准防护:当前只对 disable-devtool 系列采用高置信度特征;被深度改名、打包进业务 bundle 且不暴露公开 API 的变体仍可能绕过。静态 parser script 可能先开始执行,此时脚本会尽快通过公开 API 暂停,而不会改写已连接节点造成二次加载。
  • 控制台防刷屏:仅在手动开启精准防护后生效。高频业务日志也可能被聚合;需要完整日志时可从油猴菜单暂时关闭精准防护。
  • 无法阻止已经开始执行的内联脚本(MutationObserver 触发时可能已运行),但对后续动态插入的脚本仍然有效。

📝 更新日志

v1.11.0

  • 新增默认关闭的“精准防护”功能,可识别并阻止常见 disable-devtool 类反调试脚本,同时尽量保留网站原有快捷键、右键、复制和拖放功能。
  • 新增控制台洪泛抑制,自动限制重复或高频日志,并在洪泛停止后恢复正常输出。
  • 优化 Worker、SharedWorker、Worklet、evalFunction 的兼容性处理,修复相对路径、模块依赖及共享语义异常。
  • 改进脚本扫描、缓存和包装性能,减少重复解析及页面运行开销。
  • 新增防护状态、阻断结果、API 暂停、日志抑制及回退情况的诊断统计。
  • 补充多模式浏览器回归测试,并默认关闭普通控制台日志。

v1.10.0

  • 新增每页运行状态提示,明确显示脚本是否运行及当前模式。
  • 完善油猴菜单反馈:三种模式切换均有提示,本站启用时同时显示当前模式。
  • Blob 改为在 Worker / script 等代码入口使用清洗副本,避免修改普通文本、JSON 或下载数据。
  • 修复模板插值下等长清洗失效、Worker importScripts 异常后可能重复执行等问题。
  • 修正人机验证页的安装标记和状态提示顺序。

v1.8.0

  • 新增 SharedWorker 覆盖。
  • 新增 Worklet.addModule 模块清洗(paint/audio/layout/animation)。
  • 新增 运行时统计__ANTI_DEBUGGER__.getStats())。
  • 新增 防重复注入守卫
  • 新增 油猴菜单(切换模式 / 站点开关)与配置持久化。
  • 新增 站点白 / 黑名单DISABLE_HOSTS / FORCE_AGGRESSIVE_HOSTS)。
  • 优化 Worker 引导体积:仅序列化 stripDebugger 的真实依赖,移除无用函数。

v1.7.0

  • 词法分析式 debugger 剔除、评分制可疑检测、Blob/Worker 链路增强、人机验证兼容等。

🙏 致谢


📄 许可证

本项目基于 MIT License 开源。