Block YouTube ads on AppleTV by decrypting and stripping ads from Profobuf
标题:通过解密和剥离 Profobuf 中的广告,屏蔽 AppleTV 上的 YouTube 广告
通过解密和剥离 Profobuf 中的广告,屏蔽 AppleTV 上的 YouTube 广告
Eric 2022 年 1 月 6 日2022 年 6 月 9 日
简而言之
我发现通过在我的 Apple TV 和外部网络之间放置一个中间人代理,我可以解密 HTTPS 流量。 这样一来,我就可以读取 Google 用于填充 YouTube 广告的 Protocol Buffer 数据。 实时解码 Protobuf 在 CPU 方面负担太重,因此我找到了 Protobuf 格式中的一个缺陷,允许我可靠地更改一个字节来消除广告。
以下是设置裸机网络路由器,使用阻止列表阻止恶意广告、令人讨厌的广告、跟踪、点击诱饵、加密劫持者、诈骗弹出窗口、Windows 监视等,以保护所有联网设备的参考指南。
目标: 让我们构建一个具有加密强度的路由器,使用 FreeBSD 和 pfSense,利用 Google Protocol Buffer 格式中的缺陷,在 Apple TV 和 iPhone 上完全阻止 YouTube 广告,从而在全网范围内彻底屏蔽前置广告、插播广告和片尾广告。
GDPR Cookie 同意声明
您好,本网站使用分析 cookie,以便向我展示漂亮的图表并衡量人们对我的娱乐内容的匿名兴趣。 这些是来自 Google Analytics 的常见 cookie,数百万其他网站都在使用。 希望您能接受。
可以接受
免责声明: 我想支持内容创作者,所以为了公平起见,在阻止 YouTube 广告几个月后,我现在正在付费购买 YouTube Premium; 仅仅因为我可以破坏某些东西,并不意味着我需要这样做。
章节
第一部分 – 在裸机上设置 pfSense
- 为什么要阻止广告和行为跟踪?
- 所需的路由器硬件
- 硬件开箱
- 在裸机上安装 pfSense
- 首次启动 pfSense
- 启用 AES-NI 加密指令
- 启用 RAM 磁盘
- 仪表板小部件
- 使用 pfBlockerNG 阻止广告
- 隔离 LAN 以提高安全性
- 用于不受信任设备的 B 类 IPv4 172.31.1.0/24 网络
- 添加防火墙规则
第二部分 – 隔离网络 LAN
- 设置不受信任的 Wi-Fi AP
- 自动 pfSense 配置备份
- 无法从 192.168.10.x 访问 172.31.1.x
- 更换 AC1200 Wi-Fi 接入点上的库存固件
- 将 Archer C5 v2 放入垃圾箱,将 R7000 作为新的 Wi-Fi AP
- 设置受信任的无线网络
- 网络设备互连检查
- Windows 文件共享注意事项
- 公共服务公告:Edge 浏览器
第三部分 – 设置 DNS 广告拦截
第四部分 – 欺骗 YouTube 广告算法
- 如何限制 Apple TV YouTube 广告?
- 欺骗 YouTube 广告算法
- 研究 YouTube 广告支出
- 新目标:说服 YouTube 我是 70 岁并且在意大利
- 有选择地通过 VPN 路由 Apple TV
- 有选择地通过 VPN 路由 Apple TV YouTube 流量
- 注意事项:DNS 竞争条件
- 注意事项:身份验证问题,禁止 403 错误
- 注意事项:YouTube 现在显示英国广告,而不是意大利广告
- 查找没有 ASN 泄漏的 VPN 出口节点
- 劫持 Google 视频 DNS 查询
- 新目标:以编程方式将 IP 添加到防火墙策略规则
- 研究 Python 劫持 DNS 查询的方法 i. Rsync 磁盘备份 ii. 安装 pfSense REST API iii. 探索 Unbound Python 模块
- 冒烟测试:Python DNS 劫持脚本
第五部分 – 解密 HTTPS 流量
- 新目标:研究并安装类似 Squid 的代理 i. 有趣的事实:在日本越狱 iPhone
- 在 Apple TV 和 iPhone 上安装虚假但受信任的 CA 证书?
- 使用 Squid 和 SquidGuard 进行实验
- 自托管 CA 证书
- 放弃 Squid:太慢,太重 i. Rsync 更改差异
- 在 FreeBSD Jail 中安装 MITMProxy
- 探索 MITMProxy
- 修补 MITMProxy 源代码以进行服务器 SNI 询问
第六部分 – 拦截 Apple TV 和 iOS YouTube 广告
- 冒烟测试:使用 MITMProxy 拦截 YouTube 广告
- 检查 uBlock Origin 正则表达式模式以获取灵感
- 以外科手术的方式更改 JSON 响应以删除广告
- iOS YouTube 应用程序使用 Protobuf,而不是 JSON
- 时间分析以检测广告视频?
- 解码 YouTube Protobuf 响应
- 广告 URL 多态性
- 冒烟测试:在 Python 中拦截和解码 Protobuf i. 纯 Python 基准测试 ii. 纯 C++ 基准测试
- 模糊测试 YouTube 视频广告响应
- 进入 Burp Suite 工具进行渗透测试
- 干净地提取应用程序中的 Proto 模式?
第七部分 – 逆向工程 Protobuf 消息
- 深入研究 Protobuf 和 Wire Format
- 利用 Protobuf 缺陷,通过更改一个字节轻松删除所有广告
- 冒烟测试:在 O(n) 时间内从 Protobuf 中删除广告
- 对此成功的广告拦截技术的分析 i. 总结 ii. 时间分析 iii. 附带好处 iv. 面向未来 v. Google 应该担心吗?
- MITMProxy YouTube 广告拦截脚本
第八部分 – 总结
- YouTube Premium i. 广告观看实验 ii. 0.15 美元作为大致的 CPV iii. 美国广告支出除以总观看次数得出的 CPV iv. YouTube Premium 值得吗?
- DMCA、Sony、Viacom
- 成就总结
为什么要阻止恶意广告和行为跟踪?
您是一种有价值的商品,在您不知情或未经您同意的情况下被买卖。 您会受到点击诱饵的欺骗,被大型广告分散注意力,并被诱使在每一个机会离开您所在的网站。 此外,您在网上所做的一切都会受到监控,因此您的习惯和搜索可以被重新推销和一次又一次地出售多年。
隐私 – 知道您喜欢观看和阅读的内容、您拥有的手机、您在 Netflix 上观看的内容、您购买的内容、您向 Alexa 询问的内容、您对音乐的品味等等,对广告商来说是 令人难以置信 的有价值。 监视人们是一个如此大的问题,以至于欧洲通过了 GDPR 法,因此您访问的每个网站都会询问您是否同意使用 cookie(我们盲目地点击“确定”以隐藏横幅)。 我们必须自己夺回隐私。
带宽 – 如果您不关心隐私,那么这个呢:众所周知,25% 到 40% 的网络流量是广告、跟踪、加载跟踪器的 JavaScript(fingerprint.js、[googletagmanager.js](https://ericdraken.com/pfsense-decrypt-ad-traffic/https:/www.npmjs.com/package/@analytics/google-tag-manager))、websocket 流量来收集您的滚动方式和输入内容(Hotjar)等。 您有 100 Mbps 的互联网连接? 将其视为 60 Mbps!
点击诱饵 – 然后是点击诱饵。 “你不会相信汤姆·克鲁斯做了什么。他……”你可能想点击。 然后你就进入了蜘蛛网。 假新闻怎么样? 或者文章没有以 8 号字体说“赞助”,而是现在说“下划线”以变得聪明。 还有什么是真实的? 一旦你点击点击诱饵,你可能会最终进入一个页面,其中包含十几个未经 Google 批准但通往恶意黑暗世界的广告。 点击诱饵对诈骗者来说非常有利可图。
加密劫持 – 某些网站会加载加密货币挖掘 JavaScript(例如 CoinHive.js),因此当您阅读时,它们会过热并滥用您的计算机来尝试赚取几美分。 某些网站会加载试图从您的加密货币钱包中窃取或欺骗您转移加密货币的 JavaScript。
要点: 跟踪和欺骗您非常有利润,但对您不利,只有 您 才能做些什么。
所需的路由器硬件
虚拟机、Docker 镜像或 Raspberry Pi 的性能不足以保护整个 SMB 网络; 我们需要具有加密指令集的专用硬件,以便其唯一功能是路由、解密和监控进出数据包。 这是我使用的。
- 具有 AES-NI 指令集的迷你 PC(例如 J4125)
- 几 GB 的 DDR4 RAM(例如 32 GiB)
- 一个体面的 mSATA SSD 驱动器(例如 128 GiB)
- 用于传输 pfSense 的 USB 驱动器
硬件开箱
我从 AliExpress 订购了一台迷你 J4125 PC,从 Amazon 订购了 32 GB DDR4 RAM 和一个 128 GB mSATA,现在将首次组装它们。
警告: 出于谨慎起见,我努力搜索了一款不包括 RAM 或 SSD 的准系统迷你 PC; 没有任何东西可以阻止海外卖家包含一些通用 RAM 和 SSD,但收取 Samsung 的价格。
提示: 路由器上 128 GB 的磁盘空间? 是的。 这应该有足够的空间来保存日志并且不会过快地磨损 SSD,并且 允许漂亮的抓包(也许还有 NPM 和 Docker 的边缘缓存?)。
一个漂亮的盒子,不是吗? 它只有 3 个 LAN 端口,但可以通过网络交换机进行扩展。
J4125 AES-NI 四核无风扇迷你 PC
来自 J4125 无风扇迷你 PC 的 pfSense 路由器
在裸机上安装 pfSense
我以前从未使用过 pfSense,所以我们将一起探索它。 压缩图像大约 360 MB,可以使用 Etcher 的 AppImage 二进制文件(非常酷)刷新到 USB 驱动器。 决定,决定:VGA 安装还是串行安装? 让我们串行到新的路由器中。 为什么不?
嗯,这看起来很痛苦。 如果出现紧急情况,将串行端口插入到盒子中也将是一个完整的生产过程,因为串行端口位于内部,甚至没有 RS232 或 JTAG 连接器 – 只有一些窄排针。 哎呀。 让我们使用 VGA 并将键盘插入 USB 端口 – 准备好使用箭头和选项卡进行导航。
我将遵循 YouTube 上的 本指南。 我将跳过加密磁盘,因为我想避免每次迷你 PC 重新启动时都输入密码。 条带磁盘没问题,因为只有一个磁盘。 我不知道会发生什么,所以我将跳过进入 shell 以进行更高级的配置。
首次启动 pfSense
我弹出了包含启动映像的 USB(重要),并重新启动了小盒子。 它在内部扬声器上播放了一段旋律(有一个内部蜂鸣器,值得庆幸的是它不是很响)。
我是否需要已经建立 LAN 连接,还是可以启动它? 我将启动 pfSense,如果它需要什么,它会向我抱怨……并且根据 YouTube 教程,我应该猜测哪个端口是 LAN 1。我现在就这样做。
我发现我应该将 LAN 1 设置为静态 IP 地址,该地址不在我现有路由器的 DHCP 范围内,所以我选择了 192.168.1.3
。 现在我可以访问管理员 Web 门户(admin /pfsense)。 太棒了。
哎呀,迷你 PC 对我发出哔哔声,并告诉我“admin”已登录。 这有点吓到我了,但嘿,这非常棒。
启用 AES-NI 加密指令
我尝试了这个向导,使用了默认设置,并进入了 Web 配置器。 首先引起我注意的是 AES-NI CPU Crypto: Yes (inactive)
。 我特意购买了一台带有 AES-NI 的迷你 PC。 怎么回事?
啊,这需要在“系统”>“高级”>“其他”中启用。 为什么不自动检测到这一点并使用最佳选项? 我很高兴我发现了这一点,否则这台迷你 PC 不如过去的 Celeron J1900。
启用 RAM 磁盘
拥有 32 GiB 的 RAM,让我们利用它,并为 /var
和 /tmp
使用大量的 RAM,并且由于希望这个 128 GiB SSD 具有损耗均衡,让我们每小时进行一次 RAM 磁盘备份。
重新启动! AES-NI
现在处于活动状态。
仪表板小部件
这个仪表板非常漂亮。 我只是发现可以向仪表板添加小部件,包括 S.M.A.R.T,以便在我们 SSD 出现故障时提醒我们。 好的。
等等,当我添加“服务状态”小部件时,出现了一个名为 PC/SC Smart Card Daemon
的东西。 那是什么? 研究表明它是一个用于硬件智能密钥的守护程序,我们可能不需要它(?)。 可以在 /etc/rc.bootup
文件中禁用它,如下所示:
/* pcscd daemon must be started before IPsec */ echo "SKIPPING PC/SC Smart Card Services..."; # echo "Starting PC/SC Smart Card Services..."; # mwexec_bg("/usr/local/sbin/pcscd"); # echo "done.\n";
等等。 过了一段时间后,我注意到路由器速度变慢,最终致命。
警告: 不要尝试禁用智能卡服务,因为它需要 IPsec; 如果您开始尝试使用 IPsec VPN 隧道,并且 pcscd
守护程序已禁用,那么您的硬盘将充满日志,并且您的 CPU 将过热。
使用 pfBlockerNG 阻止广告
这个开箱和设置过程很有趣,但我希望阻止我网络上的所有不良流量。 我一直在一个名为 Pi-Hole 的 DNS 级别广告拦截器上使用……是的,Pi,但如果我可以回收该小块硬件用于其他用途并在 pfSense 中使用类似插件模块,那就太好了。 让我们现在探索一下。
pfBlockerNG 是 pfSense® 的一个非常强大的软件包,它提供广告和恶意内容阻止以及地理阻止功能。
问题:我应该安装第一个 pfBlockerNG
还是感觉像开发人员版本的 pfBlockerNG-devel
? 我是一名软件开发人员,所以这很适合我,但我是一名 pfSense 开发人员吗? 不。也许它会向我显示高级日志,或者我可以尝试使用 LUA? 让我们 Google 一下。
从 这里,随机人员说要安装开发版本。 另一个 博主 也提倡使用开发版本。 嗯,我想我们可以安装 jq
、rsync
和 Python 3.8。 这感觉不像是一个开发版本,因为它具有令人兴奋的依赖项。
这很轻松,只增加了额外的 20 MiB。 似乎许多依赖项已经是 pfSense 的一部分。 Raiders 结尾的骑士会说我做出了明智的选择(嘿,如果印第喝了千年骑士也喝的永生之水,为什么印第在《印第安纳琼斯 4》之前会像一个正常人一样变老?)。
New packages to be INSTALLED:
gmp: 6.2.1 [pfSense]
grepcidr: 2.0 [pfSense]
iprange: 1.0.4 [pfSense]
jq: 1.6 [pfSense]
libmaxminddb: 1.6.0 [pfSense]
lighttpd: 1.4.59 [pfSense]
lua52: 5.2.4 [pfSense]
nettle: 3.7.2_2 [pfSense]
pfSense-pkg-pfBlockerNG-devel: 3.1.0 [pfSense]
py38-maxminddb: 2.0.3 [pfSense]
py38-sqlite3: 3.8.10_7 [pfSense]
rsync: 3.2.3_1 [pfSense]
whois: 5.5.7 [pfSense]
xxhash: 0.8.0 [pfSense]
zstd: 1.5.0 [pfSense]
向导时间。
pfBlockerNG 向导有四个步骤,但第三步就像 50 个步骤合二为一
第三步有很多选项。 这根本不像 Pi-hole。 我将 回到这里 并设置我的网络,以便我完成退休我的 Nighthawk R700 或赋予它作为 Wi-Fi AP 的新生命。
修复: 如果 pfb_dnsbl
服务无法启动或状态选项卡显示 [ Missing CRON task ]
,请尝试删除空文件 /var/run/booting
(参考)。
隔离 LAN 以提高安全性
一个机会已经出现:我可以在三个路由器千兆端口中的每一个上创建真正的网络(不是 VLAN),我应该这样做吗? 是的,是的,我应该这样做。 我希望为我所有的家庭电话间谍设备(Alexas 和 Apple TV)创建一个专用的硬件网络,这样它们就不会用指标信息和“当然我已静音并且没有在听你说话”的音频有效负载淹没我的网络回到他们的总部。
我现在可以看到:硬件 LAN 上的 Wi-Fi AP 与其他所有东西隔离,并且专用于这些小工具,并且 通过广告拦截器运行 并且 捕获硬编码的 DNS 查询到 1.1.1.1
和 9.9.9.9
以及其他(我将不得不探索这一点),这样我的电视上的 YouTube 就不会偷偷绕过 ~~Pi-Hole~~ 任何 DNS 级别的阻止程序。 这是如此乌托邦式的结果,我可能无法入睡。
我已经决定,我的底层 TP-Link 无线路由器已经太老了,AC1200
不妨是“公元 1200 年”,它将成为我这些 IoT 间谍设备的 Wi-Fi AP。
总而言之,将有一个专用的硬件 LAN
- 具有无线 AP (AC1200),适用于 Amazon/Apple 小工具和电视。
- 带有有线交换机,适用于我实验室中的所有功能强大的计算机和集群。
- 具有另一个无线 AP (R7000),仅适用于 iPhone 和手表。
顺便说一句