pexels-pixabay-355770.jpg

Photo by Pixabay: https://www.pexels.com/photo/mountain-covered-with-snow-digital-wallpaper-355770/

截屏2026-09-11.jpg

P.S. https://ziziflix.com/ 网站仅作为举例;本文也是在利用 Gemini 完美解决网站弹窗问题后,让其总结归纳生成;很久以前还要纯手搓,自己找广告元素,弹窗js,触发逻辑...写代码,现在真的大大方便了... 完整源码直接丢给AI,让其分析,分分钟搞定。

这里有一份提示词:也是AI协助生成的。

你是一名顶级的前端安全专家与 Web 逆向工程师。我将提供一段包含视频播放器及变体广告的网页源码(或 iframe 源码)。

请从第一性原理出发,对这段源码进行深度的逻辑拆解,并输出一份精准的反制策略。

### 分析与输出要求:

1. **结构与 UI 欺骗识别**:
   - 提取并分析页面中用于“伪装点击”的全屏透明遮罩节点(如 CSS 中的 `#overlay`、高 `z-index` 浮层等)。
   - 描述该遮罩是如何通过伪装播放图标(如 SVG/CSS 居中按钮)诱导用户点击的。

2. **JS 行为与劫持链路拆解**:
   - 还原点击事件触发后的具体执行逻辑(如 `HTNChuf` 等劫持函数)。
   - 判定其触发弹窗跳转的具体实现(如 `window.open`、动态创建 `<a>` 标签或配置数组提取)。
   - 分析弹窗触发后节点的自毁或掩护逻辑(如 `overlay.remove()` 及后续调用播放器的链条)。

3. **反广告拦截(Anti-AdBlock)检测定位**:
   - 识别源码中是否包含反拦截检测机制(如 `fuckadblock.min.js`、`track.window` 计数器等)。
   - 说明直接封锁广告域名或脚本可能会引发的报复性逻辑(如 `document.write` 刷新页面或阻断播放)。

4. **反制代码设计**:
   - **CSS 规避**:给出直接剥夺遮罩层交互能力(`pointer-events: none`)的样式规则。
   - **JS 精准打击**:提供包含 API 劫持(如 `window.open`)、配置清空(如 `abyssConfig` 劫持)以及 DOM 动态销毁(利用 `MutationObserver` 瞬间移除遮罩)的三重拦截方案。
   - 方案必须做到**不破坏网页原有的 Anti-AdBlock 校验流程**,实现点击即无感播放。

---

### 以下是需要分析的网页源码:

[在此处粘贴你的 HTML / JS 源码]

第一性原理拆解:用 AI 精准打击伪装播放器透明遮罩弹窗

在浏览许多第三方视频播放页面时,经常会遇到一种极度影响体验的操作:页面中央明明显示着播放按钮,但当你点击时,视频未开始播放,反而弹出了恶意的第三方广告页面。更棘手的是,如果直接开启强力广告拦截插件,页面甚至会直接弹出警告拒绝对话,强制要求关闭 AdBlock。

面对这种兼具“伪装点击”与“反广告拦截检测”的变体广告,过去需要打开 DevTools 逐步排查 DOM 节点与 JS 交互逻辑;现在结合 Gemini 的代码分析能力,可以实现快速逆向与精准反制。

架构与风险定位:从 iframe 嵌套说起

在分析该问题时,首先需要厘清页面的真正结构:

  • 主页面壳[https://ziziflix.com/dldss-533/](https://ziziflix.com/dldss-533/) 仅作为展现的框架。

  • 目标 iframe:真正包含视频播放与广告代码的是嵌套在其中的 [https://play.ziziflix.com/dldss-533/](https://play.ziziflix.com/dldss-533/)

因为主页面与 iframe 属于跨子域关系,浏览器的样式与脚本无法穿透 iframe 作用域。因此,所有的防护与拦截规则必须精准匹配并作用于 iframe 域名(play.ziziflix.com)内部

通过将 iframe 的网页源码提交给 Gemini 分析,得到了底层逻辑链条:

1. CSS 结构欺骗

  • 全屏透明遮罩(#overlay:页面使用 z-index: 100000 将一个透明浮层覆盖在整个播放器顶部[cite: 1]。

  • 伪装 UI:浮层内居中放置了一个标准播放图标(SVG),使用户误以为自己在直接操作播放器[cite: 1]。

2. JS 行为劫持

  • 点击事件捕获:用户点击遮罩层触发 HTNChuf 函数[cite: 1]。

  • 强制弹窗跳转:代码使用 window.open 或动态创建 <a target="_blank"> 强行弹出广告链接(如 decafeligiblyhad.com)[cite: 1]。

  • 节点自毁机制:弹窗触发后,脚本才执行 overlay.remove() 销毁遮罩,并调用 jwplayer().play() 开始正常播放[cite: 1]。

3. 反防御检测(Anti-AdBlock)

  • 页面引入了 fuckadblock.min.js[cite: 1]。如果直接封锁广告域名或阻断脚本,代码中的 track.window 计数器会增加[cite: 1],最终使用 document.write 冲刷整个页面并提示拒绝服务[cite: 1]。

多视角推演与解题策略

针对上述代码逻辑,推演不同切入点的反制效果:

视角 侧重点 结论与结果
传统过滤视角 直接拦截广告域名(如 decafeligiblyhad.com) 容易被反制:触发网页 Anti-AdBlock 机制,导致播放器直接被替换为报错文本[cite: 1]。
用户体验视角 点击即播放,无需再次交互 最佳方案:提前销毁 #overlay 遮罩[cite: 1],让用户的首次点击直接落在底层的 JWPlayer 播放器上。
脚本开发视角 规则可维护性与通用性 网络层自动注入:通过代理工具在 HTTP 响应头剥离 CSP 限制[cite: 3],并在 HTML <head> 后动态注入通用 JS 及对应域名的专属 CSS 样式[cite: 3]。

实战解决方案:最终采用的 CSS 与 JS 反制代码

将防护代码分别部署在自用样式与脚本文件中,并在 <head> 区域加载:

HTML

<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="https://limbopro.com/CSS/ziziflix.com.css" type="text/css" />
    <script type="text/javascript" defer src="https://limbopro.com/Adguard/Adblock4limbo.user.js"></script>
</head>

1. 样式层拦截:ziziflix.com.css

在渲染初期直接剥夺遮罩层的鼠标交互,防止任何误触[cite: 1]:

CSS

/* 强制隐藏透明遮罩并禁用其点击响应 */
#overlay {
    display: none !important;
    pointer-events: none !important;
    z-index: -99999 !important;
}

/* 恢复底层播放器的正常交互状态 */
#player, .stage, .wrap {
    pointer-events: auto !important;
}

2. 逻辑层清理:Adblock4limbo.user.js

在脚本中写入三重拦截逻辑,兼顾 API 劫持全局配置清空DOM 动态监听[cite: 1]:

JavaScript

(function () {
    'use strict';

    // 1. 劫持 window.open:从根源阻止弹出广告页面
    const rawOpen = window.open;
    window.open = function (url, name, specs) {
        if (url && (url.includes('decafeligiblyhad.com') || url.includes('abyss.to'))) {
            console.log('[防护] 已成功拦截广告弹窗跳转:', url);
            return null; // 阻止弹窗
        }
        return rawOpen.apply(this, arguments);
    };

    // 2. 清空/劫持配置中的弹窗 URL 数组
    Object.defineProperty(window, 'abyssConfig', {
        set: function (config) {
            if (config && config.popups) {
                config.popups = []; // 强行清空广告链接
            }
            this._abyssConfig = config;
        },
        get: function () {
            return this._abyssConfig;
        },
        configurable: true
    });

    // 3. 动态监听 DOM:一旦发现 #overlay 节点出现,立即将其强行销毁
    const killOverlay = () => {
        const overlay = document.getElementById('overlay');
        if (overlay) {
            overlay.remove(); // 移除全屏透明遮罩
            console.log('[防护] 已成功移除广告遮罩节点');
        }
    };

    // 页面还在加载时,开启监听器
    const observer = new MutationObserver((mutations, obs) => {
        const overlay = document.getElementById('overlay');
        if (overlay) {
            killOverlay();
            obs.disconnect(); // 销毁遮罩后停止监听
        }
    });

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

    // 兜底机制:文档加载完成后再次确认清理
    document.addEventListener('DOMContentLoaded', killOverlay);
})();

使用 Quantumult X 等代理工具脚本在 <head> 标签后插入脚本与 CSS 文件

1. 响应体重写(Response Body Rewrite)原理

代理工具拦截目标网站的 text/html 响应体后[cite: 3],通过脚本正则匹配 HTML 源码中的开放标签 <head>[cite: 3],并在其后接续插入自定义的 CSS 样式表与 JS 脚本链接[cite: 3],同时抹除源站的 CSP(内容安全策略)响应头限制[cite: 3],使得跨域资源得以在浏览器无感无阻碍执行[cite: 3]。

2. 核心代码实现(Adblock4limbo.js

通过生产级脚本 Adblock4limbo.js 统一实现响应流重写与多端自动兼容[cite: 3]:

JavaScript

/**
 * Adblock4limbo - Ziziflix Special Body Rewrite Script
 * 作用:拦截 HTML 响应,在 <head> 后精准注入专属 CSS 与 JS
 */

function main() {
    try {
        const url = $request.url;
        const headers = $response.headers;
        let body = $response.body;

        // 1. 严格校验 Content-Type,仅对 HTML 网页生效[cite: 3]
        const contentType = headers['Content-Type'] || headers['content-type'] || '';
        if (!contentType.includes('text/html') || typeof body !== 'string') {
            $done({});
            return;
        }

        // 2. 构造要注入到 <head> 后的 CSS 与 JS 资源标签[cite: 3]
        const JS_URL = "https://limbopro.com/Adguard/Adblock4limbo.user.js";
        const CSS_URL = "https://limbopro.com/CSS/ziziflix.com.css";

        const INJECTION_TAGS = `<head>
    <link rel="stylesheet" href="${CSS_URL}" type="text/css" />
    <script type="text/javascript" defer src="${JS_URL}"></script>`;

        // 3. 正则匹配 <head> 并在其后缝合注入资源[cite: 3]
        const HEAD_REGEX = /<head\b[^>]*>/i;
        if (HEAD_REGEX.test(body)) {
            const newBody = body.replace(HEAD_REGEX, INJECTION_TAGS);

            // 4. 移除 CSP 等同源防护响应头,确保注入的外部资源正常加载[cite: 3]
            const newHeaders = { ...headers };
            delete newHeaders["Content-Security-Policy"];
            delete newHeaders["content-security-policy"];
            delete newHeaders["X-Frame-Options"];
            delete newHeaders["x-frame-options"];

            $done({
                headers: newHeaders,
                body: newBody
            });
        } else {
            $done({});
        }

    } catch (error) {
        console.log(`[Ziziflix Injector Error]: ${error.message}`);
        $done({});
    }
}

main();

复杂版:https://raw.githubusercontent.com/limbopro/Adblock4limbo/refs/heads/main/Adguard/Adblock4limbo.js

3. 配置代理工具规则 (Quantumult X 配置)

在配置文件中的 [rewrite_local][mitm] 模块下分别填入如下重写逻辑[cite: 3]:

Ini, TOML

[rewrite_local]
# 匹配目标网页 HTML 响应并交由 Adblock4limbo.js 执行正文重写
^https?:\/\/play\.ziziflix\.com(?!(.*(cdn-cgi|(\.(js|css|jpg|jpeg|png|webp|gif|zip|woff|woff2|m3u8|mp4|mov|m4v|avi|mkv|flv|rmvb|wmv|rm|asf|asx|mp3|json|ico|otf|ttf))))).* url script-response-body https://limbopro.com/Adguard/Adblock4limbo.js

[mitm]
# 开启针对播放器主体的 TLS/SSL 解密
hostname = play.ziziflix.com

批判性评估(优势与风险)

  • 优势

    • 零秒响应:CSS 在加载瞬间即屏蔽点击[cite: 1],配合 MutationObserver 做到 DOM 节点的瞬时移除。

    • 多重安全兜底:即便节点移除存在极短延迟,window.open 劫持与 abyssConfig.popups 清空机制也能确保弹窗无法触发[cite: 1]。

    • 无感避开检测:直接移除事件触发源(#overlay)[cite: 1],不破坏网页原有的 Anti-AdBlock 校验流程,完美避免触发警告页[cite: 1]。

    • 网络层无缝跨设备部署:结合 Quantumult X 脚本在 HTTP 层剥除 CSP 防护并自动注入同名 CSS[cite: 3],无需在各类终端独立安装油脂猴扩展。

  • 劣势(潜在风险)

    • 置信度评级:中高。若目标网站后续更新代码,改动了 #overlay 的节点 ID 或更换了弹窗域名[cite: 1],静态匹配规则将失效,届时需再次提取源码分析。

通过将网页逻辑从 DOM 结构、事件流与跨域架构层逐一拆解,借助 AI 即可快速跳过手动调试步骤,实现高效精准的反制。

附注

最后修改:2026 年 09 月 11 日 12 : 57 PM