AdOffの仕組み: ステルス広告ブロッキングの技術
ほとんどの広告ブロッカーはひとつのシンプルなツールで動作します:ブロックするURLのリストです。ウェブサイトがそれらの存在を発見するまで機能しますが、そこから軍拡競争が始まります。AdOffは最初から異なる方法で構築されており、本当に見えない、中断のない閲覧体験を提供するために連携して動作する3つの独立した保護層を使用しています。
このページでは各層がどのように機能するかを正確に説明します — 好奇心旺盛な方に十分な技術的詳細を含みつつ、誰でも理解できる書き方で。アーキテクチャを理解したい開発者の方も、他のブロッカーが諦めてもAdOffがなぜ動作し続けるのか気になる一般ユーザーの方も、ここが適切な場所です。
第1層 — ネットワークブロッキング
全プランで有効最初で最も効率的な層は、ブラウザがダウンロードする前に広告関連のHTTPリクエストを停止するネットワークレベルで動作します。データは取得されず、スクリプトは実行されず、トラッキングピクセルは読み込まれません。リソースは単純に取得されません。
🔧 Chrome API: declarativeNetRequest
AdOffはChromeのdeclarativeNetRequest API — エンタープライズセキュリティツールでも使用されている同じ最新APIを使用しています。古いwebRequest APIとは異なり、declarativeNetRequestはJavaScriptのオーバーヘッドなしにブラウザエンジンによってネイティブに評価されます。ルールはインストール時に一度コンパイルされ、その後のすべてのリクエストに対してほぼゼロのCPUコストでマッチングされます。
107以上の精度の高いブロッキングルール
AdOffには最も一般的な広告ネットワークが使用する広告配信インフラを標的にした107の手選りのネットワークルールが付属しています。常に保守が必要な個別ドメインの膨大なリストを維持するのではなく、AdOffのルールは広告配信の構造的なパターンを標的にします:
- 広告サーバードメイン — バナー広告、動画プレロール、スポンサーコンテンツを配信するホスト名
- トラッキングおよびアナリティクスエンドポイント — あなたの行動をプロファイリングするピクセル、ビーコン、イベントコレクター
- リターゲティングインフラ — サイトからサイトへあなたを追うクロスサイトトラッカー
- プログラマティック広告取引所URL — 広告インプレッションをオークションするリアルタイム入札エンドポイント
- 広告ペイロードに専用されたCDNパス — 広告コンテンツに固有のコンテンツ配信パターン
ネットワークレベルでのブロッキングが重要な理由
広告がネットワーク層でブロックされると、ページの読み込みが速くなります。これは見えるバナーを削除することだけではなく、ブラウザが広告サーバーへのTCP接続を開く必要がなくなり、トラッキングドメインのDNS参照を実行する必要がなくなり、広告がレンダリングして測定するために依存するサードパーティのJavaScriptを実行する必要がなくなることを意味します。
広告の多いニュースサイトに関する研究では、ネットワークレベルのブロッキングによってページ読み込み時間が30〜60%削減されることが一貫して示されています。ブロックされた広告リクエストはそれぞれ、開く必要のない接続、解析する必要のないスクリプト、帯域幅を消費しないペイロードです。
⚡ パフォーマンス優位性
declarativeNetRequestルールはJavaScriptではなくブラウザのC++エンジンによって評価されるため、AdOffは通常の閲覧中にCPUオーバーヘッドをゼロにします。マッチングはネットワークスタックがリクエストを開始する前に行われます。ページごとにJavaScriptは実行されず、拡張機能はアイドル時には実質的にメモリを使用しません。
第2層 — コスメティックフィルタリング
全プランで有効すべての広告がプレブロックできるネットワークリクエストで届くわけではありません。一部の広告はページ自体のHTMLに直接レンダリングされ、コンテンツと同じドメインから読み込まれ、ファーストパーティのJavaScriptによって注入されます。これらに対して、AdOffはコスメティックフィルタリングを使用します — 周囲のレイアウトを乱すことなく、CSSを使用してDOMから広告要素を非表示にする技術です。
隔離された世界でのCSS注入
AdOffのコンテンツスクリプトはChromeのISOLATEDワールドで実行されます — ページ自身のJavaScriptから完全に分離されたサンドボックス実行環境です。これは、拡張機能がページのスクリプトによって検出されることなくDOMを観察・変更できることを意味します。ページのスクリプトは隔離されたワールドのスコープや変数にアクセスできません。
コスメティックフィルターは、数千のウェブサイトにわたる広告スロットで使用される標準的なクラス名、ID、構造的なパターンをカバーするために慎重に維持されたCSSスタイルシートを注入します。これらのルールは既知の広告コンテナセレクターにdisplay: noneとvisibility: hiddenを適用します。
🎨 レイアウトシフトなし — 空白スペースなし
初歩的な広告ブロッカーによくある問題は、DOMから要素を削除することで周囲のコンテンツがジャンプしたり再配置されたりすることです。AdOffのCSSルールはdisplay: noneを!important優先度で使用し、可能な場合はブラウザの最初の描画前に適用されるため、目に見えるレイアウトシフトを防ぎます。広告が占めていたはずのスペースが単純に現れません。
DOMスキャンとダイナミック注入
現代のウェブサイトは非常に動的で、最初のHTMLが解析された後にコンテンツを読み込み、JavaScriptで広告スロットを注入し、DOMを継続的に更新します。AdOffのコンテンツスクリプトは広告パターンに一致する新しく挿入された要素のDOMを監視し、通常は1つのアニメーションフレーム内で即座に非表示ルールを適用します。広告が一瞬表示されてから消えるようなことはありません。
動画広告の無力化 (Pro)
ストリーミングプラットフォーム上のほとんどの動画プレーヤーは、プレロール、ミッドロール、ポストロールの広告挿入を管理するために標準的な広告SDKに依存しています。AdOffはこのSDKを中立スタブに置き換え、プレーヤーに即座に「表示する広告はありません」と伝えます — 動画は中断なしに直接開始されます。
これは二つの補完的なメカニズムで機能します:
- ネットワークレベルのリダイレクト — 広告SDKを読み込むリクエストが傍受され、拡張機能にバンドルされたローカルスタブファイルにリダイレクトされます
- ページレベルのインジェクション — サイトのスクリプトが実行される前にスタブが注入されるため、広告SDKを内部でバンドルしているプレーヤーでも最初に中立バージョンが見つかります
スタブは元のSDKの完全なAPIサーフェスを実装していますが、広告を配信することはありません。プレーヤーがstart()を呼び出すと、スタブは即座に「広告完了」シグナルを送信します — プレーヤーは広告ブレークが自然に終了したかのように動画を再開します。これは普遍的です:このSDKを使用している世界中のあらゆるウェブサイトで、サイトの手動リストなしに機能します。
主要な動画プラットフォームでは、専用ハンドラーが広告再生を16×速度で加速し、人間のようなタイミングでスキップボタンを自動的にクリックします。
第3層 — ステルス検出回避 (Pro)
Pro & トライアルここでAdOffは従来の広告ブロッカーと最も大きく異なります。多くのウェブサイトが現在、アクティブな広告ブロック検出スクリプトを実行しています — ブロッカーを使用しているかどうかを検出し、もしそうであれば壁、警告、または低品質なコンテンツで体験を妨害することだけを目的としたコードです。
ChromeのMAINワールドで動作するAdOffのステルス層は、ページ自身のJavaScriptと同じレベルで動作します。広告ブロック検出を実行前に外科的に無効化します。各技術の仕組みを説明します:
🪤 おとり偽装
広告ブロック検出スクリプトは一般的に、広告コンテナのように見えるDOM要素(「おとり」要素)を注入し、その寸法がゼロかどうか、または広告ブロッカーによって削除されたかどうかを確認することで機能します。AdOffのおとり偽装はこれらの要素をDOMに保持し、ジオメトリがクエリされたときに妥当な寸法を報告し、検出スクリプトが期待する「問題なし」シグナルを確実に受け取れるようにします。
📦 変数偽装
広告ネットワークはグローバルなJavaScript変数とプロパティをwindowオブジェクトに注入して存在を示します。広告ブロック検出スクリプトはこれらの変数の存在を確認して広告が読み込まれたことを確認します。AdOffの変数偽装は期待されるグローバル名前空間を再構築します — 実際の広告コンテンツが配信されなくても、広告スクリプトが正常に実行されたとページが信じるように存在チェックをパスする軽量スタブオブジェクトを作成します。
🔌 Fetch / XHR傍受
一部の検出システムはDOMにまったく依存しません — 既知の広告エンドポイントに直接fetch()またはXMLHttpRequest呼び出しを行い、応答時間やステータスコードを測定します。リクエストがブロックされると即座に失敗し、ブロッカーの存在を裏切ります。AdOffはwindow.fetchとXMLHttpRequestの両方をプロキシハンドラーでラップし、既知の広告ドメインへのリクエストを検出して広告の読み込み成功を模倣する合成レスポンスを返します。
🛡️ スクリプト無効化
既知の広告ブロック検出スクリプトはURLパターンとペイロードシグネチャによって識別されます。ブラウザがこれらのスクリプトのひとつを読み込もうとすると、ステルス層は実行を傍受し、スクリプトのロジックを検出作業を行わずに完了コールバックを満たす不活性なスタブに置き換えます。ページのコードは解決されたプロミスまたはno-opコールバックを受け取り、検出パスには到達されません。
👁️ MutationObserver — リアルタイム防御
ウェブサイトは最初のページ読み込み後いつでも新しい検出スクリプトを注入できます — ユーザーアクション、スクロール深度、またはタイマーによってトリガーされます。AdOffのMutationObserverはドキュメントに追加される新しい<script>要素を継続的に監視します。既知の広告ブロック検出シグネチャと一致するものが見つかると、ステルス層は最初の命令が実行される前に無効化します。これにより、遅延または遅延読み込みされた検出システムに対しても保護が維持されます。
3つの層の連携
各層は独立していて、一方がバイパスされたり適用できない場合でも他の層は機能し続けます。しかし、その本当の力はそれらがどのように補完し合うかにあります:
- ネットワークブロッキングはほとんどの広告ペイロードをブラウザに存在する前に排除し、ブロックされたものだけを検出できる検出スクリプトの攻撃対象を削減します。
- コスメティックフィルタリングはファーストパーティの広告とネットワーク層を通り抜けた残りのものを処理し、DOMに痕跡を残さずに視覚的な体験をクリーンに保ちます。
- ステルス検出回避は他の2層を不可視性のマントで包み、ブロッカーが存在しないとページを納得させ、広告ブロック検出のペイウォールが絶対にトリガーされないようにします。
結果は単に広告がないだけの閲覧体験ではなく、ウェブサイトがあなたが広告ブロッカーを使っていることを絶対に知らない体験です。警告なし、ペイウォールなし、低品質なコンテンツなし、「広告ブロッカーを無効にしてください」というオーバーレイなし。
設計によるプライバシー
AdOffはすべてをブラウザ内でローカルに処理します。閲覧履歴を分析するリモートサーバーはなく、テレメトリは送信されず、訪問したURLのリストがデバイスを離れることはありません。拡張機能は本当に必要な権限のみを要求します:
- declarativeNetRequest — ネットワークブロッキングルールを適用するため
- storage — 設定と広告カウンターをローカルに保存するため
- tabs — サイトごとのバッジカウントを表示するため
- scripting — コスメティックフィルターとステルススクリプトを注入するため
「すべてのウェブサイトのすべてのデータを読み取る」という包括的な権限はありません。拡張機能内にバンドルされた分析SDKもありません。ブラウザで起きることはブラウザ内に留まります。
3ステップで始める
-
ChromeウェブストアからAdOffをインストールするか、adoff.app/installから直接
.zipをダウンロードします。Chromeが権限確認を求めますので確認して承認してください。 - Chromeツールバーのパズルピースアイコンをクリックし、ドロップダウンでAdOffを見つけてピンアイコンをクリックすることで拡張機能をピン留めします。AdOffのシールドがツールバーに常時表示されるようになります。
- 普通に閲覧してください。訪問するすべてのページで3つの層が自動的に有効になります。AdOffアイコンをいつでもクリックして、ブロックされた広告とリクエストの数を確認したり、特定のサイトで保護を一時停止したりできます。
デフォルトの体験に設定は必要ありません。上級ユーザーはオプションページを探索して、ホワイトリストの管理、サイトごとのブロッキング動作の調整、または無料の15日間トライアル中にステルスPro機能を有効化することができます。