00:00 - 00:02

本期给大家讲讲在电脑

00:02 - 00:05

手机软路由上的各种去广告手段

00:05 - 00:08

还你一个清爽干净的互联网世界

00:13 - 00:14

Hello大家好

00:14 - 00:14

我是不良林

00:15 - 00:16

只要你使用互联网的服务

00:17 - 00:19

必然会接触各式各样的广告

00:19 - 00:21

常见的比如开屏广告

00:21 - 00:25

弹窗广告 视频广告 网页广告等等

00:25 - 00:27

有限度的广告是可以接受的

00:28 - 00:30

但影响正常使用的恶心广告

00:30 - 00:31

必须将其消灭之

00:32 - 00:34

接下来就通过理论结合实践

00:34 - 00:37

讲讲在代理环境下主流的去广告方式

00:37 - 00:39

以及各种方式的优缺点

00:40 - 00:41

总有一种适合你

00:41 - 00:43

另外需要先声明

00:43 - 00:45

本教程仅作为技术交流学习

00:46 - 00:48

目的在于探讨去广告的实现原理

00:48 - 00:50

不针对任何平台与网站

00:51 - 00:53

先拿我的博客网站来开刀

00:53 - 00:56

当你在浏览器输入bulianglin.com的时候

00:56 - 00:57

会进入我的博客

00:58 - 01:01

并且在网页的左侧和底部会弹出广告

01:01 - 01:03

这种相信大家还是可以接受的

01:03 - 01:06

但当我点击某个教程的时候

01:06 - 01:08

会弹出一个全屏广告

01:08 - 01:11

需要手动关闭广告才能看到内容

01:11 - 01:13

这就让人很反感了

01:13 - 01:14

要想去掉这些广告

01:14 - 01:16

需要先知道这些广告是怎么加载的

01:17 - 01:20

通过点击鼠标右键查看网页原代码

01:20 - 01:21

搜索广告

01:23 - 01:26

可以看到这里有一条插入js代码的网址

01:26 - 01:27

我网站里的广告

01:27 - 01:29

都是通过这段代码生成的

01:29 - 01:31

有朋友可能有疑问

01:31 - 01:33

啊你怎么知道这就是广告代码

01:33 - 01:35

因为这个网站里的广告

01:35 - 01:36

就是我插进去的

01:36 - 01:38

毕竟我的主要收入也是来自广告

01:38 - 01:41

另外大家也没必要知道哪些是广告代码

01:41 - 01:44

我只是为了给大家讲清楚去广告的原理

01:45 - 01:47

按F12或者点击鼠标右键

01:47 - 01:48

选择检查

01:48 - 01:50

调出开发者面板

01:50 - 01:51

来到网络面板

01:52 - 01:54

按Ctrl+r刷新网页

01:56 - 01:58

你在我网站上看到的所有广告

01:58 - 02:00

都是从这个网址里加载的

02:00 - 02:03

如果这个网址不能正常访问

02:03 - 02:05

那么广告也就无法加载了

02:05 - 02:07

就能达到去广告的目的

02:08 - 02:11

所以接下来的目标是让这个网址无法访问

02:11 - 02:14

众所周知我们访问网站的第一步

02:14 - 02:17

是发起DNS请求获取网站的IP地址

02:18 - 02:21

路由器充当了DNS服务器负责获取IP地址

02:22 - 02:24

只有获取到了正确的IP地址

02:24 - 02:26

才能成功访问该网站

02:26 - 02:28

比如我ping这个广告域名

02:30 - 02:32

获取到了正确的IP地址和延迟

02:32 - 02:35

说明现在我可以正常加载广告

02:35 - 02:37

那么只要让电脑获取不到

02:37 - 02:38

这个域名的正确IP

02:39 - 02:41

那么广告也就无法加载了

02:41 - 02:43

也就是通过DNS去广告

02:44 - 02:47

说白了就是对广告域名进行DNS污染

02:47 - 02:50

所有的DNS工具都能干这个活

02:50 - 02:54

比如软路由上大家比较熟知的adguard home smartDNS

02:54 - 02:57

mosDNS DNSmasq等等

02:57 - 03:00

以及自带DNS模块的xray

03:00 - 03:03

Clash sing-box等代理工具也都支持

03:04 - 03:07

我就以openwrt自带的dnsmasq为例

03:07 - 03:10

正常情况下软路由用户的DNS请求

03:10 - 03:13

都是由dnsmasq负责解析地址

03:13 - 03:15

这里可以指定某个域名对应的IP

03:16 - 03:17

按照这个格式设置

03:17 - 03:20

将会给域名分配无效的IP

03:20 - 03:22

将广告域名填入这里

03:24 - 03:25

点击保存并应用

03:28 - 03:30

保存之后再尝试ping

03:30 - 03:32

还能通是因为有缓存

03:32 - 03:37

可以使用ipconfig /flushdns指令清除DNS缓存

03:37 - 03:39

此时就无法正常ping通了

03:40 - 03:41

使用nslookup可以发现

03:41 - 03:45

这个域名对应的IP地址变成了0.0.0.0

03:46 - 03:47

很显然IP都不对

03:47 - 03:49

网站也就无法正常访问了

03:49 - 03:51

此时再来尝试刷新网页

03:55 - 03:57

可以看到广告还是会出现

03:57 - 03:59

这是因为浏览器也有缓存

04:00 - 04:01

先来清空浏览器的缓存

04:03 - 04:04

此时再重试

04:05 - 04:07

就会发现网页不会有广告了

04:07 - 04:10

这里的两条红色链接表示加载失败

04:11 - 04:13

正是我们刚才设置的域名

04:13 - 04:15

如果单独打开这条链接

04:16 - 04:19

对应的报错信息是DNS解修错误

04:19 - 04:22

电脑找路由器获取域名的IP地址

04:22 - 04:25

而我们将该域名的DNS解析进行了污染

04:26 - 04:27

无法获取到正确的IP

04:27 - 04:29

自然也就无法访问了

04:29 - 04:31

所以网站也就没有广告了

04:32 - 04:34

这也是GFW的工作原理之一

04:35 - 04:38

当我把这个域名恢复正常解析

04:43 - 04:43

刷新网页

04:46 - 04:48

这个广告域名又能正常访问了

04:48 - 04:50

广告也就重新出现了

04:51 - 04:53

这就是最简单的DNS去广告原理

04:54 - 04:56

你要做的就是将所有的广告域名

04:56 - 04:58

全都按照这种方式屏蔽掉

04:59 - 05:02

但所有广告域名都要手动填入DNSmasq

05:02 - 05:03

显然是不现实的

05:04 - 05:07

所以你可以使用功能更强大的DNS插件

05:07 - 05:08

比如adguard home

05:08 - 05:11

它自带广告域名黑名单列表

05:11 - 05:13

统一进行DNS污染

05:13 - 05:16

列表里所有的广告域名都无法访问了

05:16 - 05:17

不过我并不推荐

05:18 - 05:21

因为DNS去广告的效果非常有限

05:21 - 05:23

不值得再加一个DNS插件

05:24 - 05:25

徒增网络复杂性

05:25 - 05:26

另外有人觉得

05:26 - 05:29

使用adguard home之类的第三方DNS插件

05:29 - 05:32

能提升网速 大部分情况下都是错觉

05:33 - 05:35

如果确实有很大的提升

05:35 - 05:38

只能说明你之前的DNS配置有问题

05:38 - 05:40

在DNS阶段去广告

05:40 - 05:42

我更推荐直接使用代理工具

05:42 - 05:43

刚才也说过了

05:44 - 05:46

常见的代理工具比如sing-box

05:46 - 05:48

都有非常完善的DNS模块

05:48 - 05:51

可以更简单的实现同样的功能

05:51 - 05:54

而且代理工具除了通过DNS去广告

05:54 - 05:58

还可以通过屏蔽指定网站达到去广告的效果

05:58 - 06:00

只不过屏蔽的位置不同

06:01 - 06:03

是在DNS获取到正确IP之后

06:03 - 06:07

再根据访问目标host来判断是否屏蔽

06:07 - 06:10

众所周知通过DNS获取到IP之后

06:10 - 06:13

便会对该IP发起http访问

06:13 - 06:17

该http请求中会包含访问的目标网站host

06:17 - 06:19

代理工具收到数据后

06:20 - 06:22

通过嗅探发现host属于广告域名

06:23 - 06:25

于是根据分流规则将其屏蔽

06:25 - 06:27

从而达到去广告的目的

06:27 - 06:30

由于各平台代理工具的DNS模块

06:30 - 06:32

并不一定总是启用

06:32 - 06:35

我们将主要介绍通过host去广告

06:35 - 06:37

首先演示软路由的sing-box

06:38 - 06:40

以之前讲过的homeproxy插件为例

06:40 - 06:43

首先添加广告域名的规则集

06:43 - 06:44

随便给个名称

06:46 - 06:50

勾选启用 规则集URL用我给大家提供的地址

06:50 - 06:53

这些用到的信息我会放在视频下方的说明栏

06:53 - 06:56

我们可以访问这条链接查看里面的内容

06:56 - 06:59

这些都是前人收集的各种广告域名

07:00 - 07:02

其中就包含了我网站里的广告域名

07:03 - 07:05

将链接粘贴到这里

07:06 - 07:08

随便选择一个正常使用的节点

07:08 - 07:10

用于下载规则集格式

07:10 - 07:11

选择二进制文件

07:12 - 07:13

点击保存

07:14 - 07:15

接着来到路由规则

07:15 - 07:18

添加一条屏蔽广告的路由规则

07:18 - 07:21

你可以在这里填入需要屏蔽的网站

07:22 - 07:23

来到下方

07:23 - 07:25

使用刚才添加的广告域名规则集

07:26 - 07:28

将出站改成封锁

07:28 - 07:30

意思是如果你访问的网站

07:30 - 07:32

包含在这个规则集里

07:32 - 07:34

就屏蔽访问

07:35 - 07:35

点击保存

07:36 - 07:38

将这个屏蔽广告的规则拖到上方

07:40 - 07:41

点击保存并应用

07:41 - 07:43

此时就算是配置好了

07:43 - 07:45

等homeproxy重启完成后

07:46 - 07:47

尝试访问我的网站

07:48 - 07:50

就会发现广告域名被屏蔽了

07:50 - 07:51

无法正常访问

07:52 - 07:54

错误代码是连接被关闭

07:54 - 07:57

并不是之前的DNS解析错误

07:57 - 08:00

因为我们是在访问阶段对HOST进行屏蔽

08:00 - 08:02

和DNS没有关系

08:02 - 08:04

这个域名是可以正常解析的

08:05 - 08:08

访问阶段屏蔽要比DNS阶段屏蔽靠后

08:08 - 08:11

理论上来讲DNS阶段处理更快一点

08:11 - 08:14

但实际上这点差距微乎其微

08:14 - 08:16

可以忽略不计

08:16 - 08:19

但如果你非要在DNS阶段就屏蔽

08:19 - 08:21

sing-box的DNS模块也是可以做到的

08:22 - 08:23

简单演示一下

08:23 - 08:26

在DNS规则里添加一条去广告规则

08:31 - 08:34

规则集同样勾选刚才添加的广告域名列表

08:34 - 08:36

服务器选择封锁DNS请求

08:37 - 08:38

其效果相当于

08:38 - 08:42

只要DNS请求的域名在这个广告级的规则列表里

08:42 - 08:44

就拒绝返回正确的IP

08:45 - 08:46

点击保存

08:47 - 08:49

将其拖动到上方

08:49 - 08:51

最后点击保存并应用即可

08:51 - 08:54

这样就能实现和刚才dnsmasq一样

08:54 - 08:57

在DNS阶段进行广告屏蔽了

08:58 - 09:01

所以没必要为了去广告单独装一个Adguard home

09:01 - 09:03

硬要说优势的话

09:03 - 09:05

就是作为专门用来去广告的Adguard home

09:05 - 09:08

自带的广告域名列表规则集更全

09:08 - 09:13

但随着sing-box1.10添加了对Adguard规则集格式的支持

09:14 - 09:17

这个优势也快没了 有机会再细讲

09:17 - 09:19

接着演示openclash

09:19 - 09:21

大部分机场的clash订阅

09:21 - 09:23

默认都带了去广告的规则

09:23 - 09:26

你可以访问我的网站看看有没有广告

09:26 - 09:28

有的话说明没有去广告规则

09:29 - 09:31

跟着我操作进行去广告

09:31 - 09:32

来到规则附加

09:33 - 09:35

点击最下面的添加

09:36 - 09:37

随便给个名称

09:38 - 09:40

其他选项跟我一样保持默认

09:41 - 09:43

规则集地址填入这个网址

09:46 - 09:48

里面也都是一些广告域名

09:48 - 09:50

同样包含了我网站的广告域名

09:53 - 09:55

保证匹配顺序为优先

09:56 - 09:58

策略组选择reject拒绝

10:00 - 10:01

点击保存配置

10:02 - 10:03

这条附加规则

10:03 - 10:05

将会插入到你原来的clash配置文件中

10:06 - 10:07

最后应用配置

10:07 - 10:09

等待clash重启完毕

10:11 - 10:15

可以在规则中看到刚才添加的规则集

10:15 - 10:18

总共有750条 动作为拒绝

10:18 - 10:21

也就是在这个列表里的域名将会无法访问

10:22 - 10:24

刷新网页就没有广告了

10:29 - 10:30

错误代码是断开连接

10:30 - 10:33

也就是在访问阶段拒绝

10:33 - 10:35

如果你想在DNS阶段就拒绝

10:35 - 10:36

也可以实现

10:37 - 10:39

感兴趣的朋友可以自行研究

10:39 - 10:42

建议使用当前介绍的这种方式就行了

10:42 - 10:44

尤其是在fakeip模式下

10:44 - 10:47

接着演示安卓端 网页目前有广告

10:48 - 10:49

以v2rayNG为例

10:50 - 10:51

来到设置页面

10:54 - 10:55

编辑自定义规则

10:58 - 11:00

在阻止的网址里添加这段代码

11:00 - 11:04

因为v2ray默认使用getsit数据库

11:04 - 11:06

可以直接从里面获取广告域名

11:07 - 11:09

不用额外去下载规则集

11:09 - 11:11

保存后启动VPN服务

11:13 - 11:14

再尝试访问我的网站

11:16 - 11:18

可以看到有广告的位置

11:18 - 11:21

但是广告内容加载失败了

11:21 - 11:23

可以尝试清空浏览器缓存

11:25 - 11:26

刷新网页

11:27 - 11:29

就没有广告位了

11:29 - 11:31

最后演示苹果端

11:31 - 11:33

同样网页上存在广告

11:36 - 11:37

以小火箭为例

11:39 - 11:40

选择当前的配置文件

11:41 - 11:42

添加一条规则

11:45 - 11:46

类型选择规则集

11:47 - 11:50

策略选择reject拒绝

11:50 - 11:52

复制规则地址到这里

11:54 - 11:54

点击保存

11:55 - 11:58

再用同样的方式添加第二条规则

12:09 - 12:10

最后重新应用规则

12:12 - 12:14

来到数据页面

12:14 - 12:15

开启代理日志

12:16 - 12:17

再来重新访问

12:17 - 12:20

防止存在缓存 重新开一个无痕窗口

12:23 - 12:26

此时就没有广告了 非常清爽

12:28 - 12:31

可以在日志中查看刚才的代理情况

12:32 - 12:33

在拒绝标签页中

12:33 - 12:35

可以看到广告域名被屏蔽了

12:36 - 12:37

也就看不到广告了

12:37 - 12:40

其他代理工具也是类似的处理方式

12:40 - 12:43

我不可能将所有的代理工具都讲一遍

12:43 - 12:45

希望大家能举一反三

12:45 - 12:47

另外如果你是自建节点的用户

12:47 - 12:50

也可以选择在节点服务器上

12:50 - 12:51

对广告域名进行屏蔽

12:52 - 12:55

优点是不需要给每个客户端都设置去广告规则

12:56 - 12:59

请求发到节点服务器之后就会被屏蔽

12:59 - 13:03

这也是机场审计屏蔽某些网站的原理

13:03 - 13:05

缺点是国内走直连的广告

13:05 - 13:07

没有经过节点服务器

13:07 - 13:09

自然也就没法屏蔽了

13:09 - 13:11

进入XUI面板的xray相关设置

13:14 - 13:15

复制这段代码

13:16 - 13:19

意思是所有广告域名全都block掉

13:21 - 13:23

将其插入到这个位置

13:24 - 13:26

最后保存配置 重启面板即可

13:27 - 13:29

之后使用这个节点就可以去广告了

13:29 - 13:32

以上就是在DNS阶段和访问阶段

13:32 - 13:34

屏蔽广告域名达到去广告的效果

13:35 - 13:36

操作简单

13:36 - 13:37

确实能去广告

13:38 - 13:39

但是只能去一点点

13:40 - 13:41

接下来要给大家泼泼冷水

13:42 - 13:43

按照上面的操作之后

13:44 - 13:48

你会发现大部分APP里和网页里的广告依然存在

13:48 - 13:51

因为刚才的去广告方式有个前提

13:51 - 13:53

就是域名只能用来加载广告

13:53 - 13:55

不能加载其他内容

13:55 - 13:58

但现实互联网中大部分广告

13:58 - 14:00

并不是通过单独的域名加载

14:01 - 14:03

比如我可以让我博客里的广告

14:03 - 14:06

直接从bulianglin.com这个域名里获去

14:06 - 14:08

如果你直接把bulianglin.com

14:08 - 14:09

这个域名屏蔽了

14:10 - 14:12

那就不单单是广告无法访问了

14:12 - 14:14

整个博客都无法访问了

14:14 - 14:17

这也是DNS去广告的局限性

14:17 - 14:20

只能针对整个域名做处理

14:20 - 14:21

要么允许访问

14:21 - 14:22

要么屏蔽访问

14:23 - 14:27

而现在大多数的广告都和网页内容放在同一个域名里

14:27 - 14:29

这种DNS就没办法处理了

14:29 - 14:32

屏蔽域名的话会导致正常内容也被屏蔽

14:33 - 14:35

比如我现在的iOS小火箭

14:35 - 14:37

使用了刚才的去广告规则

14:37 - 14:40

打开b站依然会有开屏广告

14:40 - 14:44

如果你稍微晃动手机还会直接跳转到京东

14:44 - 14:45

非常恶心

14:45 - 14:47

发明这个的应该拉去凌迟

14:48 - 14:49

顶部推荐也有广告

14:50 - 14:52

底部也有会员购商城

14:52 - 14:55

光靠DNS屏蔽是无法阻断这些广告的

14:55 - 14:57

这也是为什么很多人说

14:57 - 14:59

adgurad home去广告没啥效果

14:59 - 15:01

没这个能力知道吗

15:01 - 15:04

要去除这种广告需要通过MITM解决

15:05 - 15:07

假设手机开启了小火箭的VPN

15:07 - 15:10

所有网络请求都会经过小火箭转发

15:11 - 15:13

当我们打开b站APP的时候

15:13 - 15:16

APP会找b站的服务器要数据

15:16 - 15:19

数据包来的小火箭根据分流规则

15:19 - 15:21

走直连发送到b站服务器

15:22 - 15:25

服务器返回的数据可能是正常内容

15:25 - 15:26

也可能是广告

15:26 - 15:29

由于内容和广告都放在同一个域名里

15:29 - 15:32

没法单纯通过屏蔽域名来去广告

15:32 - 15:35

会导致正常内容也被屏蔽

15:35 - 15:38

即使他的数据包里清楚地写着他就是广告

15:39 - 15:40

那也不行

15:40 - 15:41

要去掉这种广告的话

15:41 - 15:46

小火箭就必须要能够识别出广告和正常内容

15:46 - 15:49

此时就需要给小火箭编写规则

15:49 - 15:53

凡是数据包里写着广告的数据就直接屏蔽

15:53 - 15:56

其他非广告的内容就正常放行

15:56 - 15:59

这样就达到了去广告的效果

15:59 - 16:00

看上去很简单

16:00 - 16:04

但实际上数据包不会直接写着它就是广告

16:04 - 16:07

需要通过抓包确定哪些请求是广告

16:08 - 16:11

然后编写正则来匹配广告规则

16:11 - 16:14

比如发送这个请求是在获取广告

16:14 - 16:17

于是小火箭就reject的拒绝转发

16:17 - 16:19

从而实现广告的屏蔽

16:19 - 16:21

这串玩意就是正则

16:21 - 16:24

不难但是复杂到一定程度就很恶心

16:24 - 16:29

这样就实现了同域名下屏蔽广告而放行正常内容

16:29 - 16:31

接着泼第二盆冷水

16:31 - 16:33

刚才讲的是http的方式

16:34 - 16:36

也就是数据是明文的

16:36 - 16:40

实际上现在的互联网流量大部分都是https了

16:40 - 16:43

也就是b站的APP和服务器之间的数据

16:43 - 16:44

都经过了加密

16:45 - 16:47

小火箭根本就看不到数据包的内容

16:48 - 16:49

只能看到域名

16:49 - 16:51

这样的话过滤规则就失效了

16:52 - 16:54

没法知道发送的数据是不是广告

16:55 - 16:58

为了让小火箭能看到数据包里的内容

16:58 - 17:01

我们还需要对b站进行MITM

17:01 - 17:03

也就是中间人攻击

17:03 - 17:05

配置好MITM之后

17:05 - 17:10

b站发给服务器的https加密数据会被小火箭解密

17:10 - 17:12

解密之后就能和http一样

17:12 - 17:14

看到数据包里的内容了

17:14 - 17:17

然后就可以和刚才一样进行规则匹配

17:17 - 17:20

如果不是广告就放行通过

17:21 - 17:24

由于服务器要的是加密之后的https数据

17:24 - 17:28

所以小火箭会负责对数据进行重新加密

17:28 - 17:30

然后发给b站的服务器

17:30 - 17:32

服务器收到数据后进行解密

17:32 - 17:34

知道了你的意图

17:34 - 17:36

然后返回数据给你

17:36 - 17:38

同样也会进行加密

17:38 - 17:41

小火箭收到数据后对其进行解密

17:41 - 17:44

根据规则判断返回的内容是否为广告

17:45 - 17:47

如果不是广告就重新加密

17:47 - 17:49

再发给b站的APP

17:49 - 17:50

APP解密数据后

17:50 - 17:52

获取到了首页内容

17:52 - 17:54

这就是MITM的基本流程

17:55 - 17:57

小火箭充当了中间人的角色

17:57 - 18:00

如果APP找服务器要的是广告数据

18:01 - 18:03

小火箭根据规则会将其丢弃

18:04 - 18:06

这样APP就无法加载广告了

18:06 - 18:09

并且如果服务器返回的数据包里面

18:09 - 18:12

包含了正常内容也包含了广告

18:12 - 18:14

小火箭还可以通过脚本

18:14 - 18:17

修改数据包内容将广告删掉

18:17 - 18:19

只保留正常内容

18:19 - 18:20

然后返回给APP

18:21 - 18:22

达到去广告的效果

18:23 - 18:25

可见MITM是非常强大的

18:25 - 18:27

去广告效果也是非常强劲

18:28 - 18:30

前提是你的过滤规则要比较全面

18:31 - 18:35

不仅是过滤 甚至还能破解VIP功能限制

18:35 - 18:39

比如某个本地功能需要VIP用户才能使用

18:39 - 18:41

判断是不是VIP用户

18:41 - 18:43

也是通过服务器返回的数据包

18:44 - 18:47

小火箭可以把普通用户改成VIP用户

18:47 - 18:50

APP收到数据后以为是VIP用户

18:50 - 18:53

就可以解锁本地的VIP功能了

18:53 - 18:56

当然要服务器验证的VPN功能是没法解锁的

18:57 - 18:59

比如大家比较熟悉的TikTok

18:59 - 19:02

地区解锁 其中一种方式就是使用MITM

19:02 - 19:04

和解锁VIP的原理是一样的

19:05 - 19:08

通过修改数据包的地区代码实现解锁

19:08 - 19:11

MITM强大的同时也有缺点

19:11 - 19:12

等会再来说明

19:12 - 19:14

先来教大家怎么配置

19:14 - 19:20

苹果端的小火箭、圈X、surge、Loon也都支持MITM

19:20 - 19:22

苹果端就以小火箭为例

19:23 - 19:25

编辑当前使用的配置文件

19:25 - 19:27

进入https解密

19:28 - 19:30

首先跟着操作生成CA证书

19:31 - 19:34

如果你点击安装证书后提示错误

19:34 - 19:37

建议将小火箭升级到最新版

19:37 - 19:38

点击允许

19:40 - 19:42

跟着操作进入设置安装证书

19:49 - 19:51

安装之后还需要信任证书

19:52 - 19:53

来到关于本机

19:53 - 19:56

进入最底下的证书信任设置

19:56 - 19:59

信任刚才安装的小火箭证书

19:59 - 20:01

此时证书就算是配置好了

20:03 - 20:04

显示系统已信任

20:05 - 20:08

最后开启HTTPS解密

20:08 - 20:09

点击保存

20:09 - 20:12

这样MITM配置就算是完成了

20:12 - 20:14

接下来我们要告诉小火箭

20:14 - 20:16

哪些域名的数据需要解密

20:16 - 20:19

解密后需要对数据进行怎样的操作

20:20 - 20:22

是直接丢弃还是进行修改

20:22 - 20:25

就可以通过单独的模块来实现

20:25 - 20:27

也就是我们刚才说的匹配规则

20:28 - 20:30

以这个去广告的模块为例

20:31 - 20:31

点击加号

20:32 - 20:34

将模块地址粘贴上去

20:34 - 20:35

点击下载

20:35 - 20:37

下载成功后会自动勾选

20:37 - 20:39

也就是这个模块里的规则

20:39 - 20:42

会附加到你当前启动的配置文件里

20:42 - 20:46

再点击一下模块就可以取消勾选停用规则

20:46 - 20:49

你可以同时下载启用多个模块

20:49 - 20:51

比如各种解锁VIP功能的模块

20:52 - 20:56

我现在用的这个模块核心任务是去广告

20:56 - 20:59

模块其实就是单独剥离出来的配置文件

20:59 - 21:01

简单介绍一下基本构成

21:02 - 21:04

首先最下面的MITM配置了访问哪些域名

21:04 - 21:06

需要对数据进行解密

21:06 - 21:08

其中就包含了bilibili

21:09 - 21:12

URL rewrite部分为URL重写

21:12 - 21:14

比如这条规则的作用是

21:14 - 21:17

如果你要访问这个bilibili网址

21:17 - 21:20

那就直接reject拒绝不让你访问

21:20 - 21:24

拒绝的目的就是防止APP去服务器拉取广告

21:24 - 21:28

正常情况下https加密了是看不到这个路径的

21:28 - 21:30

只能看到前面的域名

21:30 - 21:33

但是小火箭会对bilibili进行MITM

21:34 - 21:37

数据经过解密就能看到后面的路径了

21:37 - 21:40

从而进行更具体的路径匹配

21:40 - 21:42

至于这部分叫重写

21:42 - 21:45

是因为除了reject拒绝这个动作

21:45 - 21:47

还能进行重写数据包的操作

21:48 - 21:51

也可以在script的部分对数据进行修改

21:51 - 21:55

http-request是修改APP发给服务器的数据

21:55 - 21:59

http-response是修改服务器返回给APP的数据

21:59 - 22:02

比如服务器返回的数据包里

22:02 - 22:04

既有广告数据 也有内容数据

22:05 - 22:08

就可以通过该功能对数据进行修改

22:08 - 22:11

将里面的广告剔除后再返回给APP

22:11 - 22:13

达到去广告的效果

22:13 - 22:16

如果访问的链接命中了这条正则

22:16 - 22:17

就执行这个脚本

22:18 - 22:21

这个脚本里的内容是js代码写的

22:21 - 22:25

其主要内容就是剔除广告数据 返回正常内容

22:26 - 22:27

此时很多朋友又有疑问

22:27 - 22:29

我怎么知道哪些是广告

22:29 - 22:30

哪些是正常内容

22:31 - 22:33

这就需要你抓包去分析了

22:33 - 22:34

本教程不再拓展

22:35 - 22:36

早期我也是干这个的

22:36 - 22:38

差点把频道给干没了

22:38 - 22:41

另外小火箭的配置没有官方教程

22:41 - 22:44

不过规则与法和surge是一样的

22:44 - 22:46

所以可以参考surge的官方教程

22:47 - 22:49

现在我们已经启用了这个去广告模块

22:50 - 22:52

先来开启代理日志

22:52 - 22:54

此时再重新访问bilibili

22:55 - 22:57

可以看到开屏广告被干掉了

22:58 - 23:00

视频推荐列表里也没有广告了

23:00 - 23:04

而且底部直接把发布视频和会员购都干掉了

23:04 - 23:05

可以说是非常彻底

23:06 - 23:07

回到日志页面

23:09 - 23:12

可以看到针对某些域名进行了MITM

23:12 - 23:15

一般来讲https是看不到具体路径的

23:16 - 23:18

但是进行MITM之后就能看到了

23:19 - 23:20

因为已经被解密了

23:20 - 23:23

对服务器返回的数据解密之后

23:23 - 23:24

就能对其进行修改

23:25 - 23:26

达到去广告的目的

23:27 - 23:29

拒绝部分也有MITM的流量

23:29 - 23:33

将https解密后可以通过路径或者返回的内容

23:33 - 23:35

判断是不是广告

23:35 - 23:36

从而将其屏蔽掉

23:37 - 23:40

注意不是所有https流量都会被解密

23:40 - 23:44

只有在模块中设置了MITM的域名才会被解密

23:44 - 23:46

这就是MITM的使用方法

23:47 - 23:48

非常强大灵活

23:48 - 23:50

但这是有代价的

23:50 - 23:52

MITM是比较吃性能的

23:52 - 23:54

毕竟多了一层加解密

23:54 - 23:58

而且还要实时对符合规则的数据包进行篡改

23:58 - 24:01

模块的JS脚本也可能编写得过于复杂

24:01 - 24:04

为了防止被人盗用劳动成果

24:04 - 24:06

脚本作者还可能会对脚本进行混淆加密

24:06 - 24:09

存在额外开销

24:09 - 24:11

如果你平时访问数据量比较大

24:12 - 24:15

运行MITM之后你可能会出现手机发烫

24:15 - 24:16

掉电严重的情况

24:17 - 24:20

除此之外编写规则的门槛也有三四层楼那么高

24:21 - 24:23

而且每个APP的广告过滤规则都不一样

24:24 - 24:26

需要分别抓包写规则

24:26 - 24:28

有时候软件更新后规则就失效了

24:28 - 24:30

需要长期维护

24:31 - 24:34

还有一些比较严格的APP比如TikTok

24:34 - 24:36

做了ssl pinning防中间人

24:36 - 24:38

抓不到包也就做不了MITM

24:39 - 24:40

需要反编译才行

24:40 - 24:42

这也是为什么TikTok解锁地区

24:42 - 24:45

做MITM需要下载老版本的原因

24:45 - 24:48

因为老版本没做ssl pinning

24:48 - 24:51

没多少人愿意干这种吃力又没多大收益的事情

24:52 - 24:53

有这技术干点啥不好

24:54 - 24:57

总之就是有门槛 没多少人愿意干

24:57 - 25:00

当然目前网上还是有人在做模块分享

25:00 - 25:03

有需要的朋友请自行谷歌搜索

25:03 - 25:05

以上讲的都是iOS系统

25:05 - 25:08

如果你想在安卓系统上玩MITM

25:08 - 25:10

很不幸的告诉你玩不了

25:10 - 25:12

因为从安卓7.0之后

25:13 - 25:16

APP默认就不再信任用户自己安装的CA证书了

25:16 - 25:19

要想MITM的话需要root手机之后

25:19 - 25:23

将CA证书安装到系统跟证书目录里

25:23 - 25:25

对大部分用户来说为了去个广告

25:25 - 25:28

专门root手机显然不现实

25:28 - 25:29

所以就不展开讲了

25:29 - 25:31

对于非root的安卓用户

25:31 - 25:34

只能用刚才讲过的屏蔽域名去广告

25:35 - 25:38

还可以安装一些诸如李跳跳之类的APP

25:38 - 25:39

自动跳过开屏广告

25:40 - 25:42

软路由的Openwrt系统

25:42 - 25:45

有一个叫koolproxy的插件支持MITM

25:45 - 25:48

但我没用过 也不推荐在软路由上进行MITM

25:48 - 25:50

会变得不幸

25:51 - 25:54

软路由不应该干太多路由之外的事情

25:54 - 25:57

尤其是MITM这么吃性能的活

25:57 - 25:59

完全不考虑人家受不受得了

25:59 - 26:03

而且这样做只是把MITM从手机转移到了软路由

26:04 - 26:06

手机还是得安装和信任证书

26:07 - 26:09

所以安卓系统还是用不了

26:09 - 26:11

感兴趣的朋友可以自行研究

26:11 - 26:13

时间关系我就不演示了

26:13 - 26:14

你也可以研究一下

26:14 - 26:17

将MITM部署在你的自建节点上

26:18 - 26:21

之前讲过的在节点上插入cookie实现免登录

26:21 - 26:23

看奈飞就是用的这个原理

26:23 - 26:25

当然只是为了了解原理

26:25 - 26:27

同样也不建议这么做

26:27 - 26:29

至于Windows之类的桌面操作系统

26:30 - 26:33

虽然有专门的去广告工具 也支持MITM

26:34 - 26:37

但一般是收费的 配置也比较繁琐

26:37 - 26:40

而且系统级别的去广告容易造成网络问题

26:41 - 26:43

尤其是我们还得运行代理工具

26:43 - 26:44

所以不推荐

26:45 - 26:46

感兴趣可以自己了解

26:47 - 26:48

对于桌面系统

26:48 - 26:51

我更推荐使用浏览器插件进行去广告

26:51 - 26:53

因为桌面系统的上网请求

26:53 - 26:55

多数都是通过浏览器完成

26:56 - 26:59

浏览器插件的去广告能力达到MITM级别

27:00 - 27:02

且不需要安装CA证书

27:02 - 27:04

因为插件拿到的数据

27:04 - 27:06

就是浏览器解密之后的http数据

27:07 - 27:09

可以轻松进行去广告操作

27:09 - 27:11

进入浏览器的拓展商店

27:11 - 27:14

搜索广告拦截相关插件

27:14 - 27:16

大部分都可以正常使用

27:16 - 27:18

也可以使用大家比较熟悉的adgurad

27:20 - 27:22

点击添加到Chrome

27:23 - 27:26

安装完成后会自动启用广告过滤

27:26 - 27:28

接着你就会有纯净的上网体验了

27:29 - 27:31

可以看到刚才网页的广告全没了

27:31 - 27:33

打开过滤日志

27:34 - 27:35

刷新当前网页

27:36 - 27:37

可以看到屏蔽了哪些连接

27:38 - 27:40

这两条连接就是广告域名

27:41 - 27:42

另外这里还有个3P

27:43 - 27:45

此3P非彼3P

27:45 - 27:48

这里的3P指的是第三方请求

27:48 - 27:50

也就是说不是当前网站里的东西

27:50 - 27:53

是从其他网站里加载的数据

27:54 - 27:56

点击这里可以暂停广告屏蔽

27:56 - 27:58

那些广告又会恢复了

27:58 - 28:01

比如我们常用的网络检测工具ITDOG

28:01 - 28:03

在没有进行广告过滤之前

28:03 - 28:06

就好像是进入了某些小电影网站

28:07 - 28:11

当启用过滤之后整个页面瞬间清净了

28:11 - 28:14

可以在日志中看到是怎么过滤的

28:16 - 28:19

是通过修改网页中的广告元素来屏蔽广告的

28:19 - 28:22

像这种直接内嵌在当前页面中的广告

28:23 - 28:26

不能通过屏蔽域名的方式来去除广告

28:26 - 28:30

必须通过修改服务器返回的网页内容才能去除

28:30 - 28:34

所以前提必须得解密https流量

28:34 - 28:37

由于是浏览器和服务器建立的加密通信

28:37 - 28:40

而插件又工作在浏览器上

28:40 - 28:44

所以当浏览器解密流量之后插件很自然的

28:44 - 28:46

就能拿到解密后的网页数据

28:46 - 28:48

并进行去广告的操作了

28:48 - 28:51

也就不用安装证书进行MITM了

28:51 - 28:52

非常省事儿

28:52 - 28:55

但对于恶意插件来说也很省事儿

28:55 - 28:57

轻则给你插入广告

28:57 - 28:59

重则盗取你的隐私数据

29:00 - 29:01

所以插件也不能乱装

29:02 - 29:03

这条规则的意思是

29:04 - 29:05

隐藏itdog网站里

29:05 - 29:08

class为lantern_left的广告元素

29:08 - 29:11

这条屏蔽规则在这个过滤器里

29:11 - 29:13

我们可以在设置中找到这个过滤器

29:16 - 29:19

从而找到对应过滤器里的规则

29:19 - 29:23

当网页里面的元素符合这个文件里的过滤规则时

29:24 - 29:26

元素将会被隐藏或者修改

29:26 - 29:28

搜索ITOG可以找到

29:28 - 29:31

很多针对该网站的广告过滤规则

29:31 - 29:33

这些规则都是别人编写的

29:34 - 29:36

属于是前人栽树后人乘凉

29:36 - 29:38

但这样做我觉得有点过了

29:39 - 29:42

毕竟一个网站大部分的盈利就靠这些广告了

29:42 - 29:46

这样做相当于只要安装了广告过滤插件的用户

29:46 - 29:48

默认情况下就看不到他家的广告

29:48 - 29:51

所以有些网站为了生存

29:51 - 29:54

会检测网页的广告是否能够正常加载

29:55 - 29:56

如果加载失败

29:56 - 29:58

就会弹窗提醒用户

29:58 - 30:00

不要过滤他的网站广告

30:00 - 30:04

需要加白名单让广告正常显示才能浏览网站

30:05 - 30:07

不过这种弹窗也可以被过滤

30:07 - 30:10

没被过滤说明规则该更新了

30:10 - 30:12

广告屏蔽和反广告屏蔽技术

30:12 - 30:15

是不断对抗螺旋上升的

30:15 - 30:17

目前来看广告屏蔽更胜一筹

30:18 - 30:20

此时有些朋友可能又又有疑问

30:20 - 30:23

怎么才知道哪些元素里的内容是广告呢

30:23 - 30:25

这就需要分析网页源码了

30:26 - 30:31

需要对前端三剑客HTML CSS JS有相应的了解

30:31 - 30:34

假设这个地图是广告我想屏蔽

30:34 - 30:38

在地图附近点击鼠标右键 选择检查

30:38 - 30:40

会定位到元素的位置

30:40 - 30:44

通过网页高亮范围可以确定需要屏蔽的元素

30:44 - 30:46

接着按下DELETE键删除即可

30:47 - 30:48

确认可以成功屏蔽之后

30:48 - 30:51

你就可以编写对应的规则了

30:51 - 30:53

Adguard提供了更简单的工具

30:53 - 30:55

点击手动屏蔽广告

30:55 - 30:58

鼠标选中需要屏蔽的元素

30:58 - 31:01

通过调整滑块确认屏蔽范围

31:01 - 31:03

可以预览屏蔽效果

31:09 - 31:12

并且自动生成了针对这个网站的屏蔽规则

31:12 - 31:13

最后点击拦截即可

31:14 - 31:17

以后只要你开着adgurad的插件访问这个网址

31:17 - 31:19

就会屏蔽这个地图

31:20 - 31:24

可以在用户过滤器中删除刚才添加的规则

31:24 - 31:27

或者直接不启用用户过滤器

31:28 - 31:30

刷新网页后就会恢复了

31:30 - 31:33

这个功能还能屏蔽一些网页限制

31:33 - 31:35

比如要你登录才能继续浏览

31:35 - 31:37

可以屏蔽登录的弹窗

31:44 - 31:45

就能免登录继续浏览了

31:46 - 31:49

和iOS解除VPN限制有异曲同工之妙

31:50 - 31:53

不过解除网页限制这个活对于广告过滤器来说

31:53 - 31:54

有点勉强了

31:54 - 31:58

可以使用专门干这个活的Tempermonkey油猴插件

31:58 - 32:00

有机会再细讲

32:00 - 32:03

去广告有个比较大的缺点就是存在误杀

32:03 - 32:07

也就是原本不想或者不应该屏蔽的内容被屏蔽了

32:08 - 32:11

导致网页功能缺失无法正常使用

32:11 - 32:15

常见的比如网页验证码被当成广告屏蔽了无法加载

32:15 - 32:17

导致无法正常登录注册

32:18 - 32:20

毕竟过滤规则没法兼顾所有情况

32:21 - 32:23

这时候你应该第一时间想到

32:23 - 32:25

是广告过滤插件导致的问题

32:25 - 32:28

建议先暂时关闭广告插件

32:28 - 32:30

观察网页是否恢复正常

32:30 - 32:34

一般来讲浏览器插件可以干掉网页里所有的广告

32:34 - 32:36

如果干不掉 说明规则不全

32:36 - 32:39

或者网站更新导致规则失效了

32:40 - 32:42

不过有一种广告确实怎么样都干不掉的

32:42 - 32:45

就是现在你在屏幕上看到的

32:45 - 32:47

直接剪进视频里的广告

32:47 - 32:49

如果你在找高速稳定的机场

32:50 - 32:53

可以试试本频道推荐了2年的专线机场

32:53 - 32:54

体验非常不错

32:55 - 32:56

如果你想自己搭建节点

32:57 - 33:00

可以使用本频道推荐了3年的VPS商家

33:00 - 33:04

使用高端的GIA线路 晚高峰高速稳定不卡顿

33:05 - 33:09

还有专门针对跨境电商运营 TikTok 数字移民

33:09 - 33:12

养号等对网络环境有高要求的用户

33:12 - 33:15

提供真实的高质量家庭住宅IP

33:16 - 33:18

减少账号被封控的因素

33:18 - 33:19

OK广告植入完了

33:20 - 33:21

接着讲去广告

33:21 - 33:23

除了以上常规去广告方法

33:23 - 33:25

还有一些非常规方法

33:26 - 33:27

比如使用第三方客户端

33:27 - 33:29

或者使用修改版的客户端

33:30 - 33:32

但可能会有安全风险 不是很推荐

33:33 - 33:35

针对某管视频平台

33:35 - 33:38

还可以使用一种叫做送中的节点去广告

33:38 - 33:42

也就是节点的IP归属地被谷歌认定为在中国

33:43 - 33:45

我们在进行谷歌搜索的时候

33:45 - 33:49

最下方会显示当前使用的节点IP归属地是日本

33:50 - 33:53

然后根据我的活动记录推测我在东京都

33:53 - 33:55

很显然我不在东京

33:55 - 34:00

这个只是根据你平时上网的浏览记录进行推测的位置

34:00 - 34:02

有时候还可能会显示国内地址

34:02 - 34:07

而送中节点是谷歌直接根据IP归属地判断你在国内

34:08 - 34:11

但实际上这个节点是用日本的IP搭建的

34:12 - 34:14

也可以通过访问这条链接

34:14 - 34:16

来确定是否为送中节点

34:16 - 34:19

如果是送中IP将会显示这个页面

34:19 - 34:22

如果是正常节点将会显示这个界面

34:22 - 34:26

使用送中节点观看某管的视频就不会有广告了

34:26 - 34:29

具体怎么将节点送中请自行谷歌了解

34:29 - 34:31

我这里就不演示了

34:31 - 34:33

需要先强调的是

34:33 - 34:37

送中节点将失去一些谷歌不在中国提供的服务

34:37 - 34:41

并且会殃及你使用同一IP段的其他人

34:41 - 34:44

所以分享怎么送中的话也会被骂

34:44 - 34:46

还有就是请神容易送神难

34:47 - 34:50

节点送中之后想要恢复就没那么简单了

34:50 - 34:53

如果只是为了去个广告这么做得不偿失

34:53 - 34:54

个人不推荐

34:55 - 34:57

OK以上就是本期给大家分享的全部内容了

34:57 - 34:59

最后我想补充一句

34:59 - 35:01

本教程虽然讲的是去广告

35:01 - 35:04

但目的主要还是在于技术分享

35:04 - 35:07

非恶意的广告存在是很正常的

35:07 - 35:09

大家在观看这个视频的时候

35:09 - 35:10

也可能会看到广告

35:11 - 35:13

当然我也不希望我的广告被屏蔽

35:13 - 35:17

毕竟这些广告带来的收益也是我持续创作的动力

35:17 - 35:19

感谢大家的包容和支持

35:19 - 35:21

如果说视频对你有帮助的话

35:21 - 35:22

麻烦你帮我点个小小的赞吧

35:23 - 35:24

关注我的频道

35:24 - 35:25

我会不定期分享一些好东西

35:26 - 35:27

我们下次再见

Exploring Ad-Blocking Techniques for a Clean Online Experience

In today's digital world, encountering various types of advertisements on the internet is inevitable. While some ads are tolerable, intrusive and disruptive ones need to be eliminated for a seamless browsing experience.

When it comes to eliminating these unwanted ads, ad-blocking techniques play a crucial role. This article will delve into the theory and practice of popular ad-blocking methods on devices like computers, smartphones, and routers, shedding light on the advantages and drawbacks of each approach.

Key Points:

  1. DNS-Based Ad Blocking: By disrupting DNS resolution of ad-serving domains, ads can be effectively blocked. Tools like AdGuard Home, SmartDNS, and more offer efficient DNS-based ad blocking capabilities.

  2. Proxy-Based Ad Blocking: Utilizing proxy tools such as Sing-Box, users can block ads by intercepting and filtering out ad content based on the target host, offering a comprehensive ad-blocking solution.

The Limitations of DNS-Based Ad Blocking:

While DNS-based ad blocking is effective to some extent, it has its limitations. For instance, it may not be able to filter out ads embedded within the website's own domain. To combat this, more advanced techniques like Man-in-the-Middle (MITM) interception come into play.

Understanding MITM for Robust Ad Blocking:

MITM interception allows for a more granular approach to ad blocking, by decrypting and analyzing web traffic to distinguish between ad content and regular webpage elements. By modifying or discarding ad-related data packets, MITM offers a powerful method to eradicate ads comprehensively.

MITM on Mobile and Desktop:

While MITM is more challenging to implement on mobile platforms due to security restrictions like SSL pinning, it can be deployed on desktop browsers using extensions like AdGuard. These extensions decrypt HTTPS data to enable precise ad blocking without compromising security.

Ensuring a Balanced Approach:

While ad-blocking techniques are handy, they may inadvertently block essential content, posing usability challenges. It's crucial to strike a balance between ad-free browsing and ensuring the proper functionality of websites.

Conclusion:

In conclusion, navigating the realm of ad blocking requires a nuanced understanding of various techniques and their implications. Whether it's DNS-based blocking, proxy-based solutions, or advanced MITM interception, each method offers a distinct approach to create a cleaner online environment. By weighing the benefits and drawbacks of these approaches, users can tailor their ad-blocking strategies to suit their needs effectively. Remember, a clutter-free internet experience is just a few clicks away!

So, go ahead, explore the diverse ad-blocking methods, and enjoy a seamless browsing experience in the vast digital landscape!

In the ever-evolving world of online content consumption, staying informed and adept at optimizing your browsing experience is key. Ad-blocking ensures a streamlined digital journey, allowing you to focus on what truly matters—content that captivates and informs. Let's embrace these tools wisely and continue to shape our online experiences for the better.