あつりんの備忘録♪

日々の出来事や忘れちゃぁならん事などなど、ゆる~く書いていきます♪

ウザい広告を消す(詳細版-要root化)

Android端末を使用していて気になるのが、アプリケーション上で表示される広告。ウザい事この上なく通常は消す事が出来ないのだが、root化してあれば可能だ。
そのウザい広告の消し方を大雑把に説明すると、広告表示の通信を端末側でシャットアウトすればいいだけ。具体的にはシステムにhostsファイルというTCP/IPを利用するコンピュータにおけるホスト名のデータベース(IPアドレスとホスト名の対応を記述したテキストファイル)が存在し、それを改変する事で可能になる(システムファイルを弄る事からroot化必須)。要はhostsファイルはDNSより優先的に参照されるので、広告通信用に利用されるDNSをhostsファイルで最初から無効にしておけば広告が表示されないと言う訳。
しかしながら広告表示用DNSをサーチし、それをhostsファイルに一件一件登録するのは非効率でナンセンス。そこで活躍するのが「AdAway」だ。この「AdAway」を用いれば簡単に広告表示用DNSを調べてhostsファイルを改変したり、デフォルトにリストアすることができる。
ただ、今までは「Google Play」(https://play.google.com/store)で入手できたのだが、広告収入で利益を上げているGoogleからすれば広告を削除するアプリケーションは営業妨害な訳で、今年始めに「Google Play」から登録抹消されてしまった・・・
とは言え、「Google Play」から入手が出来なくなっただけで他サイトからの入手は現在も可能。それが「F-Droid」(http://f-droid.org/)というマーケットサイト。このサイトではGoogle Playから削除されてしまったアプリだけでなく、古いアプリや旧バージョンも登録されていて何かと便利だ。
アプリケーションをインストールするには、ブラウザからapkファイルをダウンロードして導入する方法よりも「F-Droid」(http://f-droid.org/FDroid.apk)というアプリケーションを端末にインストールし、そのアプリケーション経由で行う方が検索やバージョン管理がスマートなので、今回はその方法で実施する。
それでは、広告を削除する為の手順をまとめてみる。尚、「F-Droid」やそこに登録されているアプリケーションはオープンソースのものばかりで怪しい物はないと思うが、俗に言う野良アプリなので、端末のセキュリティには十分に注意が必要。あくまでも自己責任で。

  • 「F-Droid」を端末にインストール
    • 端末の、[設定]−[セキュリティ]−[提供元不明のアプリ]を有効にする。

  • 「AdAway」をインストール
    • 「F-Droid」から「AdAway」を探す。

    • 最新バージョン(ここでは2.3)をタップしてインストール。


    • root必須アプリなので、アクセス許可確認(ここでは「SuperSU」)が表示されるので許可する。

    • 最初から広告削除用のhostsのソースを取り込める状態になっているので、余計な操作は行わず[ファイルをダウンロードして適用]をワンタップして端末に適用させる。

    • 再起動。

    • ちなみに最初から登録されている広告削除用のhostsのソース(ネット上のアドレスが4件登録)は以下の様に確認できる。



これで、ひとまずhostsファイルを端末に導入して様々な広告を削除するための下準備が出来た。
次に、実際に広告が消えているかサンプルとして「Battery Mix」(https://play.google.com/store/apps/details?id=jp.smapho.battery_mix)で確認してみたが消えていない。

というのも、「AdAway」は海外アプリであることから最初から登録可能なhostsのソースは海外用がメインで、日本国内の広告通信遮断対象ホストデータが非常に少なく国産アプリ上で表示される日本の広告には対応しきれていない。そこで「AdAway」のDNS問合せのログを有効にして、調べたいアプリケーションがどのようなDNS要求を行っているか確認し、そのDNS要求をブラックリスト(広告通信拒否リスト)に登録して通信遮断を行う必要がある。

  • 広告表示を行う通信のDNSを調べる
    • 「AdAway」の[DNS問合せのログ]−[TCPダンプは非動作中です!]をタップし、動作中(有効)にする。

    • 再度、「Battery Mix」を起動させる。
    • 「AdAway」に戻り、ログを確認する。

    • これから、「Battery Mix」は「i.adcl.mediabaad.com」に通信接続して広告表示を行っていることが判明できた。
  • 特定の広告表示のDNSブラックリストに登録

    • 正常に追加(登録)できたか確認する。


    • 再度、適用させて再起動し、hostsファイルを有効化させる。

    • 広告表示が消えている(リンク自体は有効)ことを確認。


これが広告表示を無効にする基本的な流れになるが、アプリケーションごとにいちいちDNS要求を確認するのは面倒。しかしながら日本国内でも有効利用できるhostsのソースがネット上に多数公開されており、それを端末に適用すれば大方の広告が無効になるだけでなく、リンク自体も無効にすることが出来るようになる。

  • hostsのソースを登録
    • 「AdAway」の[hostsのリスト]をタップ。

    • 画面右上の[+]をタップし、ソースのアドレスを一件ずつ登録する。ちなみに自分が登録・適用しているhostsのリストは以下の通り。


これである程度の広告はシャットアウトされ、適用から漏れたアプリケーションのみ自分で確認してブラックリストに登録すればいいだけになる。但し、公開されているhostsファイルはファーミング詐欺への誘導などセキュリティ上の懸念があるので、扱いには厳重に注意されたい。尚、公開されているhostsファイルをブラックリストにコピペして運用する事も可能だが、「AdAway」の動作が非常に重くなることから現実的ではない。また広告表示を無効にしたいアプリケーションが数個しかない場合には下手に公開されているhostsファイルを適用するよりも、広告表示を行う通信のDNSを自分で調べてブラックリストに追加する方が安全だ。
続いてだが、ネット上に転がっているhostsのソースを適用すると、一部アプリケーションが正常動作しない事がある。例えば「Yahoo!ヘッドライン」(https://play.google.com/store/apps/details?id=jp.co.yahoo.android.yheadline)を起動しリンク先をタップすると・・・


適用したhostsのソースが何でもかんでも遮断してしまうものであったことから、正規リンクが崩れてしまっている。こんな場合にはブラックリストに登録した方法と同じ手順で、ホワイトリスト(広告通信許可リスト)に有効なリンク先として登録すればリンクが正常に動作する。

    • Yahoo!ヘッドライン」を起動し正常にリンク先が表示されていることを確認したら、「Yahoo!ヘッドライン」を終了させる。

    • 「AdAway」の[DNS問合せのログ]−[TCPダンプは非動作中です!]をタップし、動作中(有効)にする。
    • 再度、「Yahoo!ヘッドライン」を起動させてエラーが発生した時と同じ動作を一通り行う。
    • 「AdAway」に戻り、ログを確認する。

    • Yahoo!ヘッドライン」が行たDNS要求の一覧なので、これらをホワイトリストに追加(登録)する。全て追加してもいいが、可能な限り絞り込む事が肝要。

    • 尚、自分がホワイトリストに登録しているホスト名は他のアプリケーションのケースも含めて以下の11個。

    • 再度、適用させて再起動し、hostsファイルを有効化させる。
    • リンクが正常であることを確認。


まとめると、

  • 有効且つ安全なhostsのソースを登録し適用。
  • 適用から漏れたアプリケーションのみ自分で確認してブラックリストに登録。
  • 広告やリンクを無効化したくないものをホワイトリストに登録。

という流れになる。
尚、過去に行った「AdAway」の考察(http://d.hatena.ne.jp/atsurin/20111117/)(http://d.hatena.ne.jp/atsurin/20111110/)もご参考あれ。