一键去广告:全平台去广告指南 烦人 牛皮藓
一键去广告:全平台去广告指南 烦人 牛皮藓这样我们就把 adsites.com 这个网站重定向到了本地 IP 地址,也就达到了去广告的效果。不过在 Android 设备上 Hosts 文件位于 /system/etc/hosts 目录下,修改后可能会影响正常的 OTA 更新。所以我们最好利用 Magisk 模块来实现在不改动系统分区的情况下修改 Hosts 文件。127.0.0.1 adsites.com什么是 Hosts?Hosts 是每个设备上都有的一个系统文件,工作原理也很好理解:它将常见的网址域名与其 IP 相关联,当我们输入一个域名后,系统会先在 Hosts 文件中寻找对应的 IP 地址,若是找到了会立即打开。于是利用 Hosts 文件去广告的思路就清晰了——我们可以编辑 Hosts 文件,将已知的广告服务器重新定向到无效的地址(一般是 127.0.0.1)来实现去广告。比如我们可以在 Hosts 文件里添上这么一行
Firefox for Android 也原生支持安装扩展,不过扩展数量要少于桌面端,想效仿桌面端安装一打扩展的朋友可能要失望了。好在在移动端安装去广告扩展的同时,我们还能导入规则进行手动拦截;在某些广告特别猖獗的情况下,我们也可以通过扩展来禁用界面的 Javascript 来实现更彻底的去广告效果,比如 Chrome 上的 Quick Javascript Switcher 和 Firefox 上的 NoScript Security Suite —— 但这是剂猛药,可能会影响网页的正常使用,请酌情使用。
另外,Adguard Content Blocker 也是针对 Android 平台浏览器去广告的一种实现方式,但它需要浏览器支持 Content Blocking 技术,目前只有 Yandex Browser 和三星浏览器可以使用。不过若是这两款浏览器的用户的确可以考虑使用,对 Yandex 用户而言能享受更适合手机的页面,而对于不支持安装扩展的三星浏览器用户而言更是个福音。
ACB 的使用方式和浏览器扩展基本无异,主要功能也是围绕过滤器(就是规则),内置规则少于 Adguard for Android 需要时可以自行添加。不过在移动端操作起来的体验要远好于在逼仄的扩展设置界面里鼓捣。
全局的 Hosts 方案
什么是 Hosts?Hosts 是每个设备上都有的一个系统文件,工作原理也很好理解:它将常见的网址域名与其 IP 相关联,当我们输入一个域名后,系统会先在 Hosts 文件中寻找对应的 IP 地址,若是找到了会立即打开。
于是利用 Hosts 文件去广告的思路就清晰了——我们可以编辑 Hosts 文件,将已知的广告服务器重新定向到无效的地址(一般是 127.0.0.1)来实现去广告。
比如我们可以在 Hosts 文件里添上这么一行
127.0.0.1 adsites.com
这样我们就把 adsites.com 这个网站重定向到了本地 IP 地址,也就达到了去广告的效果。不过在 Android 设备上 Hosts 文件位于 /system/etc/hosts 目录下,修改后可能会影响正常的 OTA 更新。所以我们最好利用 Magisk 模块来实现在不改动系统分区的情况下修改 Hosts 文件。
这项特性甚至有 Magisk 作者官方支持,只需要在 Magisk Manger 设置中点击 Systemless Hosts 这一选项即可。
做好准备之后我们就可以放心替换 Hosts 了。Android 上我们推荐使用 Adaway 这款老牌 Hosts 去广告器。在授予 Root 权限后,添加需要的 Hosts 源即可。
推荐的 Hosts 源:
- Yhosts:相当老牌的去广告的 Hosts
- NeoHosts:国内屏蔽挖矿统计JS/常见下载劫持/百度全家桶的全天候定位记录等等
- 大圣净化:大圣净化开发者维护的 Hosts,主要针对国内视频网站
需要注意:
- 未 root 用户可以借助 Android 自带的网络框架接口修改 Hosts,具体步骤请自行查询。
- Hosts 和规则一样太多会影响网页加载速度,审慎地使用。
部分细心的读者可能发现了 uBlock Origin 这类浏览器扩展和 Adaway 这类利用 Hosts 去广告的 App 都需要「规则」,这两者能混用吗?
答案是不行。uBlock Origin 等扩展的「订阅规则」这一特性来自于最开始的 Adblock(参见前文),有自己一套独有的语法,而 Hosts 是由 IP 地址和网址两部分组成。二者格式不同不能混用,不过的确可以进行转换来曲线救国,只是这样没有太多意义,已经有不少维护的规则 直接订阅所需要的对应规则即可。
Adguard for Android
和浏览器扩展相比,Adguard for Android 则可以利用 Android 系统自带的几种基础网络框架来进行流量过滤,最终达到去除广告的目的。流量过滤并不会将用户数据发送给任何服务器,一般情况下也并不需要 Root 权限。
在 Adguard 中,我们可以通过开启「DNS 过滤」和「HTTPS 过滤」来增强去广告效果。
我们先来说说 DNS。
承接上文的 Hosts 查询,当我们输入一个域名时会先在本地的 Hosts 中查询是否有域名对应的 IP,若是没有则会向远端的 DNS 服务器查询(因此 DNS 也被形象地称为「互联网的电话簿」)。 DNS 去广告则将过滤广告的流程放在了 DNS 服务器上。
通过更换那些可以实现去广告等复杂功能的 DNS,我们也能去除一些广告,比如 Adguard 的 DNS 176.103.130.130。不过实测在大陆选用 Adguard 的 DNS 后网页加载速度会有明显的减慢,请各位根据自己的情况来选择,动手能力强的读者也也可以考虑在自己服务器上 搭建 Adguard Home(https://beta.sspai.com/post/52813)。
Adguard 的一个独到之处在于开启 DNS 过滤后不需要更换 DNS 也能达到去广告的效果。具体实现原理是在 request 在到达 DNS 前进行拦截以此达到去广告的效果。
再是 HTTPS 过滤。
我们知道 HTPPS 的链接是加密的,正常情况下 Adguard 无法知道具体的内容,也就无从过滤去广告。Adguard 给出的方法是通过安装证书来实现解密流量。遗憾的是默认情况下 Adguard 的证书属于 用户证书,Target API 24 以上的 App 无法被过滤。好在对于 Magisk 用户来说,只需安装 Move Certificates 这个模块就能将 Adguard 的证书转化为 系统证书,从而让所有 App 都能通过 Adguard 过滤 HTTPS 流量了。
考虑到过滤这个过程在客观上会减慢加载速度,Adguard 也有提供针对特定 App 的过滤开关。对于已经确定无疑没有广告以及过滤后会明显影响使用的 App(微信、支付宝等)建议关闭过滤。
另外,前文提到 Adguard 支持在 Android 端安装脚本,而 Adguard 的脚本效果是全局的,也就是说支持包括 Chrome 在内的大部分移动浏览器。不过不同平台的不同操作方式也决定了有些脚本并不适合于 Android 平台,比如悬浮预览大图。
这里推荐一些可以在移动端使用的脚本,也欢迎各位在评论里补充:
- AC-baidu:去掉无用的重定向,去除百度广告,双栏显示搜索结果等。
- Endless Google:Google 搜索结果自动翻页。
脚本安装可以去 Greasy Fork、Stylish 等著名脚本社区寻找更多玩法。安装脚本时还是要再次提醒安全问题,恶意脚本会对设备造成难以估量的后果,切勿安装来源不明的脚本。
iOS 端
早在 iOS 9,Apple 就发布了 Content Blocker,即能够集成到 Safari 的一类具有去广告屏蔽的 App。Apple 对于去广告这件事的立场也是如此鲜明,而其一直宣传的隐私保护理念也能从其工作原理中窥见一二:屏蔽器并不知道用户的浏览历史和网页的具体内容;过滤的过程也是在网页加载之前完成,同之前 Adguard 客户端一般,比桌面端的浏览器扩展方案在网页载入速度上要快。
这里我们仍然是推荐我们的老朋友 Adguard,呼声很高的 1Blocker 系列在 2019 年的今日仍然没有内置适合中国地区的规则,也依旧不支持订阅第三方规则,因此不在本文讨论范围内。
由于系统限制,Adguard for iOS 的功能和 Adguard for Android 相比缺失不少,不过仍有亮点。