OxYGC头像
手机为什么能“自动跳过“开屏广告?李跳跳、GKD 与 iOS 代理软件原理盘点封面图

手机为什么能“自动跳过“开屏广告?李跳跳、GKD 与 iOS 代理软件原理盘点

手机为什么能"自动跳过"开屏广告?李跳跳、GKD 与 iOS 代理软件原理盘点

💡 每天打开 App 的那 5 秒钟,大概是国内移动互联网最统一的体验:一张全屏素材、右上角一个越点越小的"跳过"、外加"摇一摇跳转详情页"。

为了干掉它,安卓用户在装李跳跳、GKD 这类"自动点击器";iOS 用户装不了这些,于是转去折腾 Surge、Quantumult X、Stash 这类代理软件。两条路子看起来都是"去广告",其实是完全不同的两层技术。

这篇文章就按拦截位置把它们拆开:每一层到底拦住了什么、李跳跳为什么停更、苹果手机为什么只能靠代理软件、各自的优缺点,以及如果是我,我会怎么选。


1. 先把开屏广告拆开看:它是怎么"渲染"出来的

很多人以为开屏广告是系统行为,其实它是 App 自己在客户端渲染的一段普通逻辑。

冷启动 --> 广告位实时竞价(bid) --> 素材 URL 下发 --> 客户端拉图/拉视频
      --> 渲染到 View 层(独立 SplashActivity 或覆盖在首页上的一个全屏 View/Window)
      --> Handler 驱动倒计时 5s + 右上角一个真实 TextView/Button("跳过")
      --> 命中热区或"摇一摇" --> deeplink / universal link 跳电商

这里有两个细节值得注意:

  • 跳过按钮是一个真实控件。它不是贴图,而是节点树里一个可点击对象,有 text="跳过"、有 viewIdResourceName。
  • 广告内容是网络请求换来的。素材接口返回的 JSON 里如果 ads 是空数组,客户端通常直接进首页——这段逻辑在客户端手里,不在系统手里。

动图:一次开屏广告从冷启动到跳转的完整链路,逐行揭示

Q1:为什么安卓能"自动点",iOS 就不能?

差别就在这一层:

Android: AccessibilityService --> rootAccessibilityNode --> 按 text/id 找节点 --> performAction(ACTION_CLICK)
iOS    : 没有任何公开 API 让 A App 去点 B App 界面上的按钮

无障碍服务本质是给读屏(TalkBack 这类)用的,它能把别的 App 的界面读成一棵树,也能对这棵树下发点击。于是"帮视障用户读屏"的能力,被顺手用来"替用户点跳过"。iOS 侧沙盒更严、没有等价物,所以 iOS 只能往网络那一层退——要么让广告请求失败,要么让响应变空。

两端下手的层不一样:安卓走 UI 层无障碍,iOS 只能走网络层


2. 四层拦截:DNS、代理隧道、MITM、UI 层

把一次开屏广告的生命周期摊开,能下手的地方其实只有四个。

拦截层具体做法拦住什么拦不住什么需要 Root
DNS 黑洞安卓「私人 DNS」填过滤服务;hosts 把广告域名指到 127.0.0.1素材域名解析,请求直接失败已缓存素材、IP 直连、同主域接口否 / 是
本地 VPN 隧道Surge / QX / Stash / Clash 系,用 NetworkExtension 起本地隧道做 DNS 分流 + 规则匹配按域名/规则集拦整类请求走主域名的原生渲染广告否
HTTPS MITM 改写装并信任 CA,解密指定域名,改响应体或直接 canned 空返回让客户端以为"没采到广告"做了 SSL Pinning 的 App否
UI 层自动化无障碍/代理辅助服务点掉跳过按钮已经渲染出来的广告无渲染帧可点的纯软广否

一句话理解:

DNS / 代理  --> 不让广告素材下载下来      (网络层,通用、便宜、但会漏)
MITM 改写   --> 让它下载到"空广告"        (最强,但最危险)
UI 自动化   --> 让它下下来,再替我点跳过   (最稳,但只有安卓能干)

四层拦截位置


3. 安卓路线:李跳跳、GKD 这类"自动点击"

它们不是去广告,而是"帮你把手点出去"。

3.1 机制:无障碍服务 + 规则匹配

注册 AccessibilityService
  --> onAccessibilityWindowChanged 感知"某个 App 的前台窗口换了"
  --> 从 window.root 深度遍历节点树
  --> 用规则匹配节点:text / textContains / id / cls / desc / 位置 / 父子关系
  --> 命中可点击祖先 --> performAction(ACTION_CLICK)
  --> 没命中就等下一次事件轮询(几百毫秒级)

所以这类工具的"实力"完全等于规则库的质量:同一个"跳过",有的 App 写成 TextView、有的写成一个没有文字的 View + 透明热区,规则就得分别为它写一条。

3.2 两个代表

  • 李跳跳:把这条路走红的产品,规则按 App 的 Activity/控件属性组织,另有一套"通用作案"兜底。2023 年 8 月无限期停更(作者收到律师函,理由是干扰产品正常运行、涉嫌不正当竞争),最后正式版停在 2.2。包体和 APK 在社区里仍有备份,规则失效后靠自己补自定义规则还能战。
  • GKD:现在事实上的续命方案,GitHub 开源(GPL-3.0,包名 li.songe.gkd),截至 2026 年 10 月仍在高频提交,约 4.3 万 star,最新 release v1.12.1(2026-05-20)。它把上面那套换成了三件东西:类 CSS 的高级选择器 + 订阅制 JSON 规则 + 快照审查(把屏幕节点树导出来对着快照写规则)。

一条真实风格的 GKD 规则长这样:

@[vid="menu"] < [vid="menu_container"] - [vid="dot_text_layout"] > [text^="广告"]

读法很直白:锚定 vid=menu 的节点,往父方向走,再找子孙里文本以"广告"开头的那个,点它。相比李跳跳的"内置一堆现成规则",GKD 官方仓库甚至不提供规则,全靠社区订阅(第三方订阅仓库 AIsouler/GKD_subscription 约 1.2 万 star)——灵活度高很多,代价是要自己配。

3.3 优缺点

优点

  • 对已经渲染出来的广告最有效,不用猜域名,也不会因为接口变动而整块失效;
  • 顺带能处理开屏之后的弹窗、优惠券浮层、更新提示、"不同意就退出"这类垃圾流程;
  • 免 Root、免付费,规则可以精确到单个 App 的单个控件。

缺点

  • 权限极大:无障碍能读到你屏幕上的一切内容(聊天、验证码、支付页),规则一旦误命中还可能替你点别的东西;
  • 误点风险真实存在:为了抢热区,很多广告把可点区域做到几乎全屏,自动点击很容易直接跳进电商页;
  • 维护成本高:App 改版、控件 id 变化,规则就得跟着改;
  • 政策风险:它依赖的能力随时可能被收紧(见第 6 节),李跳跳本身就是这条路的第一个牺牲品。

4. iOS 路线:代理软件与"让请求失败"

苹果这边没有 UI 层这条路,于是全部技术都压在网络层。

4.1 DNS 黑洞:成本最低的一层

iOS 14 之后可以在「设置 - DNS」配加密 DNS,Android 则是「更多连接 - 私人 DNS」,填域名即可(例如公共过滤服务 dns.adguard-dns.com)。原理一句话:把广告域名解析成 NXDOMAIN,素材下不来,多数 App 的兜底逻辑就是"无广告,直接进首页"。

  • 优点:全设备生效、零成本、无需证书;
  • 缺点:只能覆盖域名级,对 IP 直连、内置素材、同主域接口无能为力;而且 iOS 上系统级加密 DNS 配置需要描述文件,实际多用代理 App 内部的 DNS 模块替代。

4.2 "代理软件"到底是什么角色

Surge、Quantumult X、Loon、Stash(Clash 内核的 iOS 图形客户端)、Mihomo/Clash 系这些 App,本来是做网络调试与代理分流的工具,它们有一项别的能力:用系统提供的 NetworkExtension 在本地起一条隧道,所有 App 的流量都要经过它。

App 请求 --> NEPacketTunnelProvider(本地隧道)
        --> DNS 模块: 命中广告域名 --> 直接拒解析(黑洞)
        --> 规则匹配: DOMAIN-SUFFIX / URL-REGEX --> REJECT 或 PROXY
        --> (可选) MITM: 命中域名做 TLS 解密 --> 脚本/改写返回空 JSON

所以"苹果手机装代理软件跳开屏广告"其实是:把广告域名塞进规则集的 REJECT 段,效果等价于一个能自定义、带正则、还能按策略组切换的 hosts 文件。它不需要越狱、不需要 Root,这是它在 iOS 上流行的根本原因——iOS 没有别的口子。

4.3 MITM 改写:能"真跳过",也最危险

对那种"请求不发就会报错/卡在启动页"的 App,只有改响应才行:信任该工具生成的 CA 证书,在配置里把广告接口域名列入 mitm hostname,再用脚本或 rewrite 把返回体里的素材数组置空 / 直接 canned 一个空响应。客户端拿到"请求成功、零素材",于是干净进首页。

代价也很直接:

  • 信任 CA = 这些域名下的全部 HTTPS 内容对这条隧道明文可见;
  • 银行、证券、部分大厂 App 做了证书校验(SSL Pinning),要么解不开,要么解开后 App 直接拒绝运行;
  • 节点/订阅的出口风险:免费订阅可能有日志、可能跑路,本质上是把流量交给陌生第三方;
  • 部分 App 检测到代理环境会限制功能。

4.4 Q:快捷指令能跳过开屏广告吗?

不能——至少不是"自动点掉"意义上的跳过。iOS 自动化没有点击第三方 App 界面按钮的能力,网上那套教程是让快捷指令去做别的事(比如启动时先打开一个空白页占位,或者把"跳过"这件事变成"手按一次侧键"的肌肉记忆)。

苹果自己动过一次手,而且比任何插件都有效:iOS 27.2 Beta 2(2026-09-23)在中国区加了 Restrict Motion Data(限制运动数据) 开关,直接掐住加速度计和陀螺仪的喂数,“摇一摇/扭一扭跳转"这类交互随之失效,豆瓣、知乎、百度网盘等都被点名。这是少数"官方反制”,而且它反制的是广告主,不是工具。


5. 优缺点横向对比

方案平台拦截层覆盖率成本配置门槛主要风险
李跳跳AndroidUI 层(无障碍)⭐⭐⭐⭐⭐免费低已停更,规则失效只能手动补
GKDAndroidUI 层(无障碍+选择器)⭐⭐⭐⭐⭐免费开源中无障碍权限过大;Android 17 收紧
私人 DNS / 加密 DNS双端DNS⭐⭐免费极低漏得多;可能影响解析排障
hosts + AdAway / MagiskAndroid(Root)DNS/本机解析⭐⭐⭐免费高(要 Root)需维护 hosts,Root 影响保修与银行 App
AdGuard / AdGuard DNS双端DNS + 浏览器内容过滤⭐⭐⭐订阅制低iOS 侧受系统扩展能力限制,App 内原生广告拦不住
代理软件规则(Surge/QX/Loon/Stash)iOS/AndroidDNS + 域名规则⭐⭐⭐付费买断中依赖订阅质量;出口可信度
代理软件 + MitM 改写iOS/AndroidHTTPS 响应改写⭐⭐⭐⭐⭐付费买断高信任 CA、证书校验冲突、App 闪退
系统开关(运动数据/跳转拦截)iOS/部分 Android传感器与跳转⭐⭐(仅摇一摇)免费极低只管交互,不管素材

说明:覆盖率按"能干掉多少比例的开屏/弹窗广告"给的个人主观评级,只算了常见的原生开屏,不含信息流广告。

笔者(后端 & 架构)的实际策略:

需求我会选
只想安静用机,不想折腾系统自带的跳转/传感器开关 + 私人 DNS
安卓、能接受装第三方 AppGKD(无障碍)+ 一份活跃订阅,别装来路不明的小厂"自动跳过"
iOS、不想折腾证书代理软件纯 DNS/规则黑洞模式(不启用 MitM)
iOS、要"真的不出现"代理软件 + 只对少数域名开 MitM,其余全部走 DNS 层
装过银行/证券 App 的机子不要长期挂 MitM,用完即关

6. 几个绕不开的现实问题

Q1:这是不是违法?

个人使用不构成违法,但提供工具这一侧有判例。视频网站起诉带广告拦截功能的浏览器和厂商是不正当竞争的老戏:芒果TV 诉傲游浏览器屏蔽广告获赔 52 万元,同类诉讼也打到过小米、百度;李跳跳收到律师函后无限期停更,是同一逻辑落到"自动点击"工具上的版本。厂商主张通常落在《反不正当竞争法》第十二条的"妨碍、破坏他人产品正常运行"上。工具作者停更、仓库下架、规则转社区——这是这条路最现实的结局。

Q2:为什么标准没把"摇一摇"管住?

因为阈值可以被绕过。全国网络安全标准化技术委员会 2025-07-22 发布的《网络安全标准实践指南——摇一摇广告触发行为安全要求》写死了三个数字:加速度 ≥ 15 m/s²、转动角度 ≥ 35°、持续时间 ≥ 3 秒才算一次有效触发。但工程上想误触发太容易了——阈值踩线设置、走路时的自然抖动就够,素材层再叠一个全屏热区,标准管的是下限,管不住上限。

Q3:这条路以后还好走吗?

系统正在从两头收口,这也是我认为 UI 层自动化会逐步退场的原因:

2023-08  李跳跳无限期停更(法律压力)
2026-03  Android 17 Beta 2 限制第三方调用无障碍 API("高级保护模式",直指自动点击/跳广告类滥用)
2026-09  iOS 27.2 Beta 2 中国区 Restrict Motion Data,掐掉摇一摇的传感器输入

平台从两头收口:2023 李跳跳停更、2026 Android 17 限制无障碍、2026 iOS 限制运动数据

趋势很清楚:平台愿意替你干掉"跳转",但不愿意替你干掉"广告"。第三方工具的生存空间在压缩,无障碍这条路一旦在 Android 17 上被真正封死,安卓用户也会被迫退到 DNS/代理那一层——那时候两端的做法就合流了。


最后总结

  • 只是不想被误跳转:先开系统开关(iOS 运动数据限制、各家的跳转确认),这是免费的,而且合法、零风险。
  • 安卓 + 愿意折腾:GKD 依然是当下最优解,规则精确到控件;但要清楚你交出的是无障碍权限,来源不明的 APK 和订阅一律别装。
  • iOS:别指望"自动点击",这条路苹果封死了;代理软件 = DNS 黑洞 + 域名规则,够用且相对安全;MitM 改写能治到根上,但它是拿"信任一张 CA"换的,只在明确需要的域名上开。
  • 如果你是后端/架构,我更建议你关注另一件事:开屏广告本质是一次 竞价 + 素材下发 + 客户端渲染,所以所有拦截手段都能被"改渲染策略"反制——比如把素材打包进 APK、把跳过做成无文本 View。这场博弈的胜负不在权限大小,而在谁改得快。
  • 至于"去广告"这件事的终点:我倾向于把它理解成一次权限与风险的交换,不是免费午餐。你要么交出无障碍,要么交出一张根证书,要么交出流量的出口。

参考资料 & 致谢

[1] GKD - GitHub
[2] GKD 选择器与订阅文档
[3] GKD 第三方订阅规则 - AIsouler/GKD_subscription
[4] 李跳跳 APK 备份仓库 - GitHub
[5] “李跳跳”无限期停更事件
[6] AdGuard DNS 知识库
[7] AdAway - GitHub
[8] Surge 官网
[9] Quantumult X - GitHub
[10] Loon - App Store
[11] 全国网络安全标准化技术委员会《实践指南》规范摇一摇广告 - 网易新闻
[12] 中国区独享!苹果出手限制"摇一摇"广告 - 腾讯新闻
[13] Android 17 要下狠手了:无障碍服务 API 将被严格限制
[14] 芒果TV诉傲游浏览器屏蔽广告获赔 52 万

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/YangCheney/article/details/167789412

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--