看似正常的下载页,其实在偷跑,我把“黑料每日”的链路追完了:你以为关掉就完事,其实还没结束

前言 很多人对“下载页”印象是:点一个按钮,文件就下来了;如果不想要,关掉页面就行。可现实比这复杂得多。我最近跟踪了某个看起来非常常规的下载页——列名为“黑料每日”的一条推广链路,发现它在用户以为结束的时候仍在“偷偷干活”:静默触发第三方请求、注册 service worker、推送权限诱导、埋点转化流量到广告 / 联盟收益等。把链路追完之后,想把我的发现整理出来,给大家一个完整的脉络和可操作的自查/清理方法。
第一印象:页面很普通,但细节异常 入口通常来自社交分享、搜索或短链。页面样式干净、有明显的“下载”按钮,甚至写着“官方发布”“无广告”。点下去后会看到两种常见场景:
- 直接开始下载(或弹出浏览器下载框),但同时网络请求在后台继续;
- 弹出一个“等待完成”或“检测中”的遮罩,几秒后提示“为保证下载体验,请允许通知/安装XXX扩展/完成验证”等。
这两种看似各有合乎逻辑的理由,但隐藏行为才是关键。
完整链路拆解(我追到的典型流程) 下面把我在一个样本上追到的典型链路按阶段拆开,方便理解每一步发生了什么:
1) 引导与初始加载
- 来源:短链、社交文章或第三方站点的 iframe 嵌入。
- 首次加载会注入一些小脚本,负责 A/B 测试、用户画像与设备指纹(screen/device info、时区、语言、浏览器特征)。
- 加载主脚本后会根据规则决定展示哪种下载按钮或弹窗文案(文案个性化以降低用户警惕)。
2) 下载点击与静默请求
- 用户点击下载后,会触发正式下载请求(通常是真实文件或伪装的安装器)。
- 同时,页面会在后台发送若干 fetch/beacon 请求到第三方域名,携带 referer、fingerprint、广告 id(若可获取)等数据,用于归因和转化计费。
- 有的页面会先返回一个真正的资源 URL,但在另一个线程或异步任务中继续加载广告脚本或跟踪像素。
3) 权限诱导与持久化入口
- 常见手法包括:使用模糊语言提示“允许通知以便完成下载/获取更新”、伪造浏览器提示样式引导用户安装 PWA/扩展、或要求打开系统级权限以“优化下载速度”。
- 成功诱导后,可能注册 service worker 或在浏览器里安装 web app,从而实现即使页面关闭也能运行的一些定时请求或推送交互。
4) 隐藏跳转与第三方变现
- 后端会根据用户属性,把请求转成多个跳转,最终落地到广告联盟、下载镜像或付费页面(若有付费欺诈,则可能模拟“支付失败/成功”的流程进行二次诱导)。
- 每一次跳转、每一个成功的推送或通知点击都能带来收益(按 CPA、CPI、点击计费等模式)。
5) 残留影响(真正的“偷跑”所在)
- 即便用户关闭标签页,已注册的 service worker、已授权的通知、已安装的 PWA/扩展、或浏览器本地存储里的标记仍然存在,可能继续发起请求或定向推送。
- 本地缓存/IndexedDB 里会保存会话 ID,用于后续再次曝光时识别用户,减少成本、提高转化率。
- 部分链路还会尝试诱导用户去完成“解绑难”的付费环节或借助社交工程做后续诈骗。
我如何一步步追踪到这些细节
- 网络抓包:用浏览器 DevTools 的 Network 面板和 Charles/Fiddler 抓包,关注所有第三方域名与请求头(尤其是 referer、Origin、Cookie)。
- 脚本分析:下载页面脚本,读出注册 service worker、message 通道、以及动态注入逻辑(eval、new Function、script 标签插入)。
- 权限流重放:在沙箱、无扩展的浏览器配置里重现“允许通知/安装扩展”的流程,观察哪些持久化条目被写入。
- 持久化检查:查看 navigator.serviceWorker.getRegistrations()、chrome://extensions(或相应浏览器的扩展页)、localStorage、IndexedDB、以及浏览器通知授权状态。
- 时间线比对:把请求时间序列化,确认下载以外的请求是在用户“已经离开”页面之后发起的。
如何确认自己受影响(简单自查清单)
- 浏览器通知是否被某个你不熟悉的站点授权(浏览器设置 → 通知管理)。
- 是否存在未知的 service worker(在 DevTools → Application → Service Workers)。
- 本地是否出现不明扩展、PWA 应用或插件。
- Downloads/临时文件夹里是否有文件名与页面显示不一致的安装器或压缩包。
- 安装后是否收到来自陌生站点的推送消息或重复广告弹窗。
清理与恢复操作(可逐项执行)
- 撤销通知权限:在浏览器设置里删除可疑站点的通知授权。
- 注销 service worker:在 DevTools → Application → Service Workers 里 unregister 可疑的 service worker。
- 卸载可疑扩展 / PWA:浏览器扩展页与应用管理页分别检查并移除。
- 清除站点数据:清除 localStorage、IndexedDB、cookies(针对可疑域名)。
- 更改密码/检查支付条目:如果下载内容涉及账号或有可能绑定支付方式,检查账单及支付授权。
- 若怀疑设备被感染(异常行为、系统级广告、重定向):用可信的杀软全盘扫描,并考虑重置或重装系统。
防护建议(日常可用,尽量简洁可执行)
- 使用广告拦截器(uBlock Origin、AdGuard)并开启防跟踪规则。
- 对陌生下载页谨慎点击“允许通知”“安装扩展”等权限请求。
- 在浏览器中限制或手动管理 site permission,避免一键授权。
- 定期检查 service worker 与扩展,尤其是在访问过大量第三方下载页后。
- 在不确定时使用沙箱或虚拟机做首次下载与安装验证。
案例反思(为什么“关掉页面”不能当完结) 关掉标签页只是结束了可见 UI,但浏览器的后台能力和持久化机制让一个页面能够把影响延长到未来:它可以注册一个长期存在的脚本、写入识别标识、争取通知权限,甚至安装进浏览器入口。这样一来,原本“一次下载”的互动被转化为持续曝光的流量资产,最终的受益方并不一定是那份你点击下载得到的文件提供者,而是中间的变现层(广告网络、联盟、灰色服务商等)。逻辑上,这就是“你以为关掉就完事,其实还没结束”的根本原因。
如果想看我完整的技术捕获记录与域名清单(用于自查或阻断),留言或私信我,我会整理一个可以直接导入 uBlock / hosts 的清单版。想要更深入的教程(比如在隔离环境下复现、自动化抓包脚本),我也可以把工具链分享出来。
