-
Notifications
You must be signed in to change notification settings - Fork 5
Youtubeアンチ広告ブロック小史
Youtubeに関する議論を行っているList Authors ChatはSlack無料版であるため、90日更新がないスレッドは見られなくなります。将来知りたいと思うころにはなくなっているので、概要をまとめてここに残しておきます。
AdamWrはAdGuard、stephenhawk8054はuBlock Origin、Yuki2718はそれら両方とEasyListでYoutubeのアンチ広告ブロック解析・対応を担当。Braveのryanbrをはじめとした関係者すべてを合わせてここでは合同チームと呼ぶ。gorhillはuBlock Originの開発者。BraveはQuick fixesを除くuBlock Originのフィルターリストと自前の組込みリストを用いている点に注意(iOS版は別)。敬称略。(2024/04/27修正:現在はQuick fixedも使用)
Youtubeが一部ユーザーに無視可能な警告を表示するテストを開始。この時点より日本でも警告が表示され、一部のユーザーは警告画面のスクリーンショットをTwitterに投稿。
-
2023/05/11 stephenhawk8054とYuki2718、手探りで関係しそうなプロパティを集めRedditでユーザーにテストを依頼。
-
2023/05/12 Ghacksが上記ルールをYoutubeのアンチ広告ブロック対策と誤報道。
-
2023/05/14 AdamWr、検知対象を
json-prune
ルールと突き止め、テスト対象でなくても検知を確認する方法を開発。警告を削除する方法、obligatoryProps
を用いて検知を迂回する方法、およびA/Bテストフラグenable_ab_em_pl
を上書きする方法を同時に提案。Brave組込みのリストとAdGuard実験フィルタで採用。Braveのフィードバックで有効性が確認される。 -
2023/05/17 Braveのフィードバックから、警告を無視した場合のクールダウン期間は5時間と判明。uBlock Originは警告が無視可能である点を考慮し、デフォルトでは一部のルールのみ採用。
-
2023/05/18 ルール調整による最初の広告すり抜け。
obligatoryProps
にplayerConfig
を指定したルールを追加して対応。
-
2023/06/11 Youtube側の最初のカウンター。
obligatoryProps
に指定したplayerConfig
が対策される。警告削除も対策され、プレイヤーのエラーを起こすようになる。 -
2023/06/16 AdGuard, uBlock Originともにカウンターに対する最初の対応。
-
2023/06/20 Youtube側の二度目のカウンター。AdGuard, uBlock Originともに同日内に対応。
-
2023/06/21 合同チーム、
json-prune
ではなくtrusted-replace-fetch-response
を用いた広告除去をテストし有効性を確認。 -
2023/06/28 Youtube、3ストライクテストを開始。
いたちごっこが激化、数日に一度は更新されるようになる。
-
2023/08/02 uBlock Origin、
obligatoryProps
の枯渇によりaost
で警告を直接ブロックする方法に切り替え。Windows 7, 8, 8.1上のBraveでこれによる不具合が発生。 -
2023/08/04 Youtube、
aost
をカウンター。uBlock Origin、配列番号まで用いたobligatoryProps
に切り替え。 -
2023/08/11 stephenhawk8054、広告スキップをテスト。ミッドロール広告でインタラプションが発生するとわかり、採用はせず。Youtube、カウントダウンタイマー付きポップアップを導入。
-
2023/08/21 AdGuard、アプリ版で
$jsonprune
に切り替え。これは10/06の改善策が実装されるまでAdGuardアプリ版のアドバンテージとなる。 -
2023/08/30
obligatoryProps
が完全に枯渇。stephenhawk8054がrpnt
でuBlock Origin 1.52の機能を先取りする案を出し延命措置。AdGuardはtrusted-replace-fetch-response
に移行。
-
2023/09/08 uBlock Origin、フィルター配布に使うCDNの中で最も更新が遅い
statically.io
をQuick fixesの配布CDNから除外。 -
2023/09/14 uBlock Origin、
json-prune-fetch-response
に移行。Youtubeはab_det_sc_inj
下でrpnt
を検知しようとしたがすれ違いとなる。 -
2023/09/22 uBlock Origin、Firefox ESR 102やChrome portable 103.0.5060.134では
json-prune-fetch-response
が正常に機能しないことが判明したため、trusted-replace-fetch-response
に切り替え。 -
2023/09/27 EasyList、Adblock PlusのAslatielの提案により、スクリプトレットによるブロックが失敗したとき用のフォールバックルールを採用。
-
2023/10/03 Youtube、
json-prune-fetch-response
とtrusted-replace-fetch-response
をカウンター。 -
2023/10/04 合同チーム、
propsToMatch
の指定で回避。 -
2023/10/06 AdamWr、Youtubeが
Object.defineProperty
を用いてURLをセットすることに注目しtrusted-replace-fetch-response
の改善策を提案。 -
2023/10/07 Brave、信頼済みスクリプトレット未対応により一時的にスタックトレース指定の
json-prune
に移行。 -
2023/10/09 iOS用Braveで
json-prune-xhr-response
による遅延が報告され、ルールを無効化。 -
2023/10/10 stephenhawk8054、RedditでA/Bテストフラグの上書きテストを依頼し有効性を確認、フィルターに追加。同日内にYoutubeがカウンター。Braveが信頼済みスクリプトレットに対応。Edgeの追跡防止が厳重設定だと検知されるとの報道。
-
2023/10/11 iOS用Braveでスクリプトレット内の文字列置換未対応による不具合の報告。合同チーム、Adblock PlusのMonztAから技術的質問を受け回答。
-
2023/10/13 Youtube、初めて一日に二回アンチ広告ブロックを更新。Yuki2718、旧
json-prune
ルールが検知を起こさなくなっていることに気づき採用。Adblock Plus、Youtubeの警告に対応すると発表。 -
2023/10/14 旧
json-prune
ルールがカウンターされる。ログアウト状態での検知が初めて公式に報告される。再生時間操作により広告をスキップするFadBlockが公開される。 -
2023/10/15 iOS用Braveの不具合に対し、改めてiOSでのみスタックトレース指定の
json-prune
に一時退避。 -
2023/10/16 uBlock Origin、URLを置換する
urltransform
(のちのuritransform
)を実装。 -
2023/10/17 Braveがスクリプトレット内変数のシングルクォーテーションによる囲い込みに対応していないため広告漏れが発生。uBlock Origin側で変数内のカンマをエスケープし、シングルクォーテーションを排除して対応。Youtube、A/Bテスト
ab_det_gen_re
下でより迂回の難しい罠リクエストを使用開始。uBlock Origin、ab_det_gen_re
フラグの上書きをテスト。 -
2023/10/18 AdGuard、フィルターの差分更新への取り組みを本格化し、各ブロッカー関係者に意見聴取。uBlock Origin、フィルター配布に使うjsDelivrを
@latest
に変更しタグ付け。AdGuard、AdGuardポップアップフィルタに警告の非表示ルールを試験的に追加。 -
2023/10/19 uBlock Origin、FirefoxとChromiumで対策を分ける二方面作戦を開始。drHyperion451がuBlock OriginのYoutube対応状況を確認できるサイトを構築。gorhill、深刻化するサーバー負荷の問題に対しリンククリックで更新する方法を発案。
-
2023/10/20 stephenhawk8054、実生活での不幸にRedditでのクレーマー対応が重なりRedditを辞める。uBlock Origin subredditのYoutubeメガスレッドはしばらくの間投稿制限(投稿は可能だが、一般ユーザーには非表示)。
-
2023/10/21 センシティブなトピックを扱う動画での広告漏れが確認され、対応。これらの動画では通常の
fetch
ではなく、URLの異なるxmlhttprequest
が広告配信に使われるため。AdamWr、Youtubeの検知確認メカニズムを解析し罠と比較されるベースを操作する方法を発案。これをもとにuBlock Originはtrusted-prune-inbound-object
を実装。他拡張機能等の干渉にもロバストという利点があった。合同チーム、Ghosteryのchrmodから技術的質問を受け回答。 -
2023/10/23 uBlock Origin、uBlock filters - AnnoyancesとAdGuard迷惑要素フィルタに
aost
で警告を直接ブロックするルールを改めて追加。先行して追加したAdGuard Japanese filter Plusで目立った不具合報告がなかったため。 -
2023/10/25 Youtube、09/27に追加されたEasyListのネットワークルールを標的にする。EasyListが当該ルールを削除。AdGuard拡張機能4.2.208がリリースされる。このバージョンより、AdamWrによる
trusted-replace-fetch-response
の改善案が有効。uBlock Origin、ab_det_gen_re
フラグの上書きに依存しないルールに切り替え。 -
2023/10/27 Youtube、uBlock Originの二方面作戦と
aost
による警告ブロックルールを同時にカウンター。対応するも同日内に改めてカウンター。倍速再生で広告をスキップするAd Acceleratorが公開される。 -
2023/10/28 Youtube、罠リクエストが自らのCORSポリシーに引っ掛かり、ブロッカーを無効にしていてもサイトが真っ白になる不具合を誘発。これはのちに修正されるが、罠リクエストによる、ブロッカー無効でも発生するパフォーマンス劣化は尾を引く。uBlock Origin、サーバー負荷とより早い更新の需要で板挟みとなり、フィルターリストの更新間隔を調整。
-
2023/10/29 uBlock Originチームのu-RraaLLが管理を引継ぎ、uBlock Origin subredditのYoutubeメガスレッドを再開。
-
2023/10/31 Youtubeがブロッカー検知の広範に渡る(global)努力を開始したと報道される。検知報告が急増。AdamWrによる
trusted-replace-fetch-response
の改善案を採用したuBlock Origin 1.53.0がリリース。これによりAdGuard, uBlock Originともルールを更新せずとも検知されなくなるが、Youtubeが気付くのを少しでも遅らせるため今まで通りの更新を続ける知らんぷり作戦を実行。
-
2023/11/01 Yuki2718、Youtubeの警告ターゲティングがログイン時の
__Host-GAPS
クッキーで行われると同定。 -
2023/11/04 Yuki2718、iOS用Braveで使える
trusted-replace-fetch-response
ルールがそろそろなくなるのでスタックトレース指定のjson-prune
ルールのテストをBraveに依頼。 -
2023/11/07 Youtube、A/Bテスト
ks_get_o_pp
下でベース操作をカウンター。AdGuard, uBlock Originともに同日対応。 -
2023/11/09 Youtube、再度ベース操作をカウンター。対応は可能だったものの、合同チームで協議しこれ以上のベース操作は取りやめ。
-
2023/11/10 Adblock Plus、FadBlockと同様の再生時間操作による広告スキップに切り替え。FadBlockが
isTrusted = false
の自動クリックにより検知されることが判明(クリックされた場合のみ検知する受動的検知)。 -
2023/11/12 stephenhawk8054、Youtubeの罠リクエストによる遅延を標準リストで対処することを提案するが、AdamWrとYuki2718はサイト自身の問題として反対。
-
2023/11/14 再生リスト、かつ、何らかの条件のもとで正規表現の過剰マッチングによる不具合が報告され対応。
-
2023/11/16 Youtube、Adblock PlusとFadBlockの再生時間操作をA/Bテスト
ab_pl_man
のもとで検知。一部のユーザーでこれによる遅延がブロッカー無効でも発生。AdGuardポップアップフィルタの警告非表示ルールも検知されエラーを出すようになる。 -
2023/11/18 Youtube、一日三回のアンチ広告ブロック更新。A/Bテスト
ab_det_apb_b
とab_net_tp_e
のもと(AND条件)でEasyListのネットワークルールを標的に。EasyList、当該ルールを削除。 -
2023/11/23 差分更新を実装したuBlock Origin 1.54.0がリリース。広告漏れを懸念し、知らんぷり作戦を終了。倍速再生で広告をスキップするAd Speedupが公開される。
-
2023/11/30 Youtube、A/Bテスト
ab_det_el_h
下で初めてEasyListの非表示ルールを標的にする。当該ルールをいったん削除。以後、EasyListの非表示ルールが標的になり続ける。アメリカ限定のYoutube TVでの不具合がAdGuardに報告され、AdGuard, uBlock Originともに対応。
-
2023/12/02 Youtube、A/Bテスト
ab_fk_sk_cl
で罠のスキップボタンを設置し自動クリックを積極的に検知。 -
2023/12/07 uBlock Origin、
urltransform
によるYoutubeの検知スクリプト置き換えをFirefox限定で有効化するが、バージョンがまだ1.53.0のユーザーに不具合を起こすため翌日無効化。 -
2023/12/12 アルバム再生時の広告漏れが報告され対応。異なるURLの
xmlhttprequest
を用いるため。 -
2023/12/20 uBlock Origin、
uritransform
ルールを開発者ビルド限定で採用。
-
2024/01/11 uBlock Origin、
uritransform
ルールを安定板でも有効化。Yuki2718、Youtubeが警告削除でエラーを出す仕組みを解析し、エラーを出さずに警告を削除する方法を開発。 -
2024/01/19 AdGuard、Youtubeの警告削除ルールをアプリ版製品とFirefox拡張機能に追加。
-
2024/01/27 uBlock Originで
uritransform
によりショートのレイアウトが崩れる問題が報告される。ひとまず置換対象を最新のIDにするが、サービスワーカーのキャッシュにより完全解決には至らず。remove-cache-storage-item
スクリプトレットを追加。 -
2024/01/28 uBlock Origin、キャッシュを削除する
rpnt
ルールを追加。 -
2024/01/31 uBlock Origin、開発者ビルド限定で
remove-cache-storage-item
ルールを追加。
-
2024/02/16 Brave、Yuki2718の提案により2023/09/27にEasyListに追加されたルールの改良版を有効化するが、ショートおよびPremium会員で不具合が生じたため再度無効化。Yuki2718、この問題の調査でPremiumに加入しPremiumの効果が完全にサーバーサイドであることを確認。クライエントサイドでPremiumの効果を得るような操作ができないか、という提案が初期に出されていた。
-
2024/02/17 AdGuard、2023/09/27にEasyListに追加されたルールと同様のものがコンテンツブロッカー向けにまだ残っていたため当該ルールを修正。
-
2024/02/21 Youtube、スクリプトID
09f82e1d
より動画フェッチ用のURLを変更、これに伴いAdGuardとBraveで広告が漏れるようになる。いずれも数時間内に対応。uBlock Originはuritransform
により影響を受けず。一方、これによりプレイヤーが正しくスケールされない問題が発生。 -
2024/02/22 stephenhawk8054、上記問題の緩和のためキャッシュを削除する
rpnt
ルールを調整。Youtube、問題があったのかスクリプトを02/21以前のものに巻き戻す。 -
2024/02/24 既存のルールではブロックできない、SSAP広告の情報が初めて確認される。これは一部のアカウントのみを対象とし、フラグ操作などで配信させることはできない。通常のスキップができないことに加え、
ad-interrupting
などのクラスを持たないためAd Speedupでもスキップ不可(指定をただせばスキップ可)。Yuki2718、2024/02/17にAdGuardがコンテンツブロッカー向けに有効化した、スクリプトレット失敗時のフォールバックルールをuBlock Originに追加。 -
2024/02/25 uBlock Origin、Firefoxで
trusted-replace-fetch-response
ルールを無効化し$replace
に一本化。Yuki2718、SSAP広告の痕跡を過去のbase.js
から追い、これが11月には存在していたことを確認。 -
2024/02/26 stephenhawk8054とYuki2718、SSAP広告対象のRedditユーザーのアカウント共有を得て分析。stephenhawk8054、広告URLが
ytInitialPlayerResponse.streamingData.serverAbrStreamingUrl
から来ることを突き止めるとともに、これを上書きするとエラーが出ることを報告。Yuki2718、ytInitialPlayerResponse.playerConfig.ssapConfig
も同時に上書きすることでエラーを解消し、uBlock OriginとAdGuardにルール配信。 -
2024/02/28 uBlock Originで上記ルールに適用URLを指定しなかったことによる遅延が確認され、ルールを調整。Brave、iOS向けにSSAP広告用ルールを追加。