每日签到奶昔超市点数市场奶昔访达
123下一页
返回列表 发布新帖
查看: 1328|回复: 46

[教程] 防 切屏检测 脚本,可以用于某些神秘活动,理论上是通用的

发表于 2025-9-2 20:37:56 | 查看全部 |阅读模式

欢迎注册论坛,享受更多奶昔会员权益!

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 4th 于 2025-9-3 16:09 编辑

注意浏览器要开开发者模式,不然油猴脚本是不生效
理论上是通用的,其他检测切屏的场景也可以用,自行修改匹配的(@match部分)域名即可,
如需完整活动教程,可看飞书:https://acn4gjw5vke5.feishu.cn/wiki/DQIVw8GUbi4wkakFf5xc2eWdn2g
  1. // ==UserScript==
  2. // @namespace    http://tampermonkey.net/
  3. // @version      1.0.0
  4. // @description  阻止各类切屏检测
  5. // @author       4P
  6. // @match        https://connect.huaweicloud.com/courses/exam/*
  7. // @match        https://edu.huaweicloud.com/certifications/*
  8. // @match        https://edu.huaweicloud.com/signup/*
  9. // @match        https://www.huaweicloud.com
  10. // @run-at       document-start
  11. // @grant        unsafeWindow
  12. // @license      gpl-3.0
  13. // ==/UserScript==

  14. (function () {
  15.     'use strict';
  16.     const window = unsafeWindow;
  17.     const blackList = new Set(["visibilitychange", "blur", "pagehide", "mouseleave"]);
  18.     const isDebug = false;
  19.     const log = console.log.bind(console, "[阻止切屏检测]");
  20.     const debug = isDebug ? log : () => { };
  21.     function patchToString(obj, ref) {
  22.         return; // Not enabled for now
  23.         obj.toString = () => ref.toString();
  24.         obj.toString.toString = () => ref.toString.toString();
  25.         obj.toString.toString.toString = obj.toString.toString;
  26.     }
  27.     function patchAddEventListener(obj, name) {
  28.         obj._addEventListener = obj.addEventListener;
  29.         obj.addEventListener = (...args) => {
  30.             if (!blackList.has(args[0])) {
  31.                 debug(`allow ${name}.addEventListener`, ...args);
  32.                 return obj._addEventListener(...args);
  33.             } else {
  34.                 log(`block ${name}.addEventListener`, ...args);
  35.                 return undefined;
  36.             }
  37.         };
  38.         patchToString(obj.addEventListener, obj._addEventListener);
  39.     }
  40.     patchAddEventListener(window, "window");
  41.     patchAddEventListener(document, "document");
  42.     document.addEventListener("DOMContentLoaded", () => {
  43.         patchAddEventListener(document.body, "document.body");
  44.     }, { once: true, passive: true, capture: true });
  45.     log("addEventListener hooked!");
  46.     if (isDebug) { // DEBUG ONLY: find out all timers
  47.         window._setInterval = window.setInterval;
  48.         window.setInterval = (...args) => {
  49.             const id = window._setInterval(...args);
  50.             debug("calling window.setInterval", id, ...args);
  51.             return id;
  52.         };
  53.         debug("setInterval hooked!");
  54.         window._setTimeout = window.setTimeout;
  55.         window.setTimeout = (...args) => {
  56.             const id = window._setTimeout(...args);
  57.             debug("calling window.setTimeout", id, ...args);
  58.             return id;
  59.         };
  60.         debug("setTimeout hooked!");
  61.     }
  62.     Object.defineProperties(document, {
  63.         hidden: {
  64.             value: false
  65.         },
  66.         visibilityState: {
  67.             value: "visible"
  68.         },
  69.         hasFocus: {
  70.             value: () => true
  71.         },
  72.         onvisibilitychange: {
  73.             get: () => undefined,
  74.             set: () => { }
  75.         },
  76.         onblur: {
  77.             get: () => undefined,
  78.             set: () => { }
  79.         },
  80.         onmouseleave: {
  81.             get: () => undefined,
  82.             set: () => { }
  83.         },
  84.     });
  85.     log("document properties set!");
  86.     Object.defineProperties(window, {
  87.         onblur: {
  88.             get: () => undefined,
  89.             set: () => { }
  90.         },
  91.         onpagehide: {
  92.             get: () => undefined,
  93.             set: () => { }
  94.         },
  95.     });
  96.     log("window properties set!");
  97. })();
复制代码
爱生活,爱奶昔~
回复

使用道具 举报

发表于 2025-9-2 20:53:55 | 查看全部
些神秘活动,理
爱生活,爱奶昔~
发表于 2025-9-2 21:15:23 | 查看全部
感谢分享,让我看看
爱生活,爱奶昔~
发表于 2025-9-2 22:00:42 | 查看全部
什么神秘活动
爱生活,爱奶昔~
发表于 2025-9-2 22:07:05 | 查看全部
好奇神秘活動
爱生活,爱奶昔~
发表于 2025-9-2 22:13:28 | 查看全部
感谢楼主分享,看一下内容
爱生活,爱奶昔~
发表于 2025-9-2 22:49:17 来自手机 | 查看全部
看看内容,感谢分享
爱生活,爱奶昔~
发表于 2025-9-2 23:44:38 | 查看全部
感谢分享,支持一下。
爱生活,爱奶昔~
发表于 2025-9-2 23:48:04 来自手机 | 查看全部
感谢分享,学习学习
爱生活,爱奶昔~
发表于 2025-9-2 23:50:02 | 查看全部
感谢分享,让我看看
爱生活,爱奶昔~
发表于 2025-9-3 08:24:52 | 查看全部
这么强,学习了
爱生活,爱奶昔~
发表于 2025-9-3 09:37:26 | 查看全部
🆒学习一下
爱生活,爱奶昔~
发表于 2025-9-3 11:38:58 来自手机 | 查看全部
了解一下啊这个东西
爱生活,爱奶昔~
发表于 2025-9-3 12:15:02 | 查看全部
看上去不错~
爱生活,爱奶昔~
发表于 2025-9-3 12:32:19 | 查看全部
感谢分享,看看
爱生活,爱奶昔~
发表于 2025-9-3 12:32:41 | 查看全部
防 切屏检测 脚本,
爱生活,爱奶昔~
发表于 2025-9-3 12:46:02 来自手机 | 查看全部
了解一下咋回事。
爱生活,爱奶昔~
发表于 2025-9-3 14:13:51 | 查看全部
感谢分享看看
爱生活,爱奶昔~
发表于 2025-9-3 14:15:52 | 查看全部
支持一下,考试作弊很实用
爱生活,爱奶昔~
发表于 2025-9-3 14:18:37 | 查看全部
本帖最后由 mvc 于 2025-9-3 14:20 编辑

第2行代码出错了,帖子自动加的......
  1. // [url=home.php?mod=space&uid=4014]@name[/url]         防切屏检测
复制代码
  1. // @name 防切屏检测
复制代码
爱生活,爱奶昔~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

© 2025 Nyarime 沪ICP备13020230号-1|沪公网安备 31010702007642号手机版小黑屋RSS
返回顶部 关灯 在本版发帖
快速回复 返回顶部 返回列表