コンテンツにスキップ

Android のキャプチャ

Android でプロキシを使って HTTPS をキャプチャしようとすると、「証明書はインストールしたのにアプリが受け付けてくれない」というところで詰まることがよくあります。新しいシステムでは、アプリはデフォルトでユーザー証明書を信頼せず、証明書ピンニングを使うアプリはまったくキャプチャできません。Android のキャプチャは別のアプローチを取ります。デバイス全体をキャプチャして自動で復号し、スマホ側に証明書を一切インストールしません。実機もエミュレータも対応し、証明書ピンニングや独自暗号を使うアプリでさえ、内部から平文を読み取ります。


  • デバイスを接続する:データケーブルでコンピュータに接続し、USB デバッグを有効にします。エミュレータは通常、自動的に検出されます。
  • root が必要:3つの方法はいずれも root 化したデバイスを必要とします。
  • 証明書のインストール不要:どの方法も中間者プロキシ方式ではないため、スマホ側に証明書をインストールする必要がありません。これこそ、Android でのプロキシキャプチャよりも手間が少ない理由です。証明書が必要な場合でも、root 化したデバイスなら信頼済み証明書を自動でインストールでき、手動の手順を省けます。
  • すぐに使える:キャプチャに必要な補助コンポーネントは、デバイスのアーキテクチャに応じて自動的にダウンロード・キャッシュされるので、あなたの側で環境を手動セットアップする必要はありません。

コンピュータ上の Android エミュレータ内のトラフィックをキャプチャするのは、実機のキャプチャとほとんど同じで、多くの場合むしろ簡単です。

  • 自動検出:一般的なブランドのエミュレータは自動的に検出され、データケーブルも手動接続も不要です(USB が必要なのは実機だけ)。
  • たいてい最初から root 済み:エミュレータは通常 root 済みで出荷されるか、ワンクリックで root 化でき、キャプチャの要件を手軽に満たせます。
  • 「NIC キー」を優先する:エミュレータのシステムカーネルは古いことが多く、「NIC キャプチャ」に対応していない場合があります。ですから NIC キーを選べば大丈夫。エミュレータとの互換性が最も高い方法です。

それ以外はすべて実機と同じです。エミュレータデバイスを選択し、以下の方法でキャプチャしてください。


あなたの状況 使うべき方法 備考
古いデバイス/エミュレータ/新しさが不明 NIC キー(推奨のデフォルト) 互換性が最も高い。ほぼすべての root 化デバイスで動作
新しめの root 化実機 NIC キャプチャ 最も簡単で、自己完結型
1つのアプリだけが対象、または NIC モードで復号できない アプリ層キャプチャ アプリの内部から平文を読み取り、証明書ピンニング/独自暗号を回避

最初の2つはデバイス全体をキャプチャして自動復号し、証明書のインストールも不要です。3つ目は単一のアプリを対象とし、最も防御が固いアプリにも対応できます。


4. NIC キー(推奨のデフォルト)

Section titled “4. NIC キー(推奨のデフォルト)”

デバイスの NIC(デフォルトは Wi-Fi)上のすべてのトラフィックをキャプチャして自動で復号します。特定のアプリを選ぶ必要も、証明書をインストールする必要もありません。

  • 互換性が最も高い:カーネルを選り好みせず、古いデバイスもさまざまなエミュレータもすべて動作します。これが NIC キャプチャに対する最大の利点です。デバイスの新しさがわからないときは、これが最も安全な選択です。
  • 一部のアプリは暗号文のみになることがある:非標準の暗号コンポーネントを内蔵する個別のアプリは、トラフィックを復号できない場合があります。その場合は、下記のアプリ層キャプチャに切り替えてピンポイントで対処してください。

使い方:デバイスを選択 → NIC を選択(デフォルトは Wi-Fi)→ キャプチャを開始。


こちらもデバイスの NIC 上のすべてのトラフィックをキャプチャして自動で復号します。特徴は、自己完結型で最も使いやすい点です(データと、それを復号するのに必要な情報が一緒にパッケージされます)。

  • 前提条件新しめのデバイス(新しいカーネル)が必要です。デバイスが古すぎて条件を満たさない場合は、キャプチャ開始時に「NIC キャプチャに未対応」という明確なメッセージが表示されます。そのときは NIC キーに切り替えてください。

使い方:デバイスを選択 → NIC を選択(デフォルトは Wi-Fi)→ キャプチャを開始。


単一のアプリを対象とし、その内部から直接平文を読み取ります。証明書ピンニングも独自暗号も、これを止めることはできません。

  • NIC モードの弱点に縛られない:NIC モードで復号できないアプリ(証明書ピンニング、独自暗号)も、ここでは平文を読み取れます。アプリの内部から読み取るため、中間者として振る舞わず、NIC の復号にも依存しないからです。
  • デコードできないときは「ソケットトラフィック」をフォールバックとしてオンにする:静的リンクしている/独自ライブラリを使うアプリで、通常の方法では平文が得られない場合、このスイッチをオンにすると、より低レベルの経路でデータを取得します。
  • ターゲットプログラムを再起動する:先にアプリを閉じて起動し直せば、その起動直後のトラフィックをキャプチャできます。
  • 選択したアプリのみが対象です(デバイス全体のトラフィックではありません)。

使い方:対象アプリを選ぶ(インストール済みアプリの一覧から選択するか、パッケージ名/プロセス名を入力。空欄のままにするとフォアグラウンドのアプリをキャプチャ)→ 起動時のトラフィックをキャプチャしたい場合は「ターゲットプログラムを再起動」にチェック → キャプチャを開始。


7. プロキシキャプチャも使える

Section titled “7. プロキシキャプチャも使える”

上記の3つの方法に加えて、Android デバイスではプロキシキャプチャも使えます。デバイスの Wi-Fi プロキシをこのマシンに向け、ルート証明書をインストールすれば、コンピュータと同じように HTTPS の平文をキャプチャでき、書き換えやリプレイの機能一式も使えます。システムプロキシを経由するアプリのデバッグや、モバイルのリクエストをルールで書き換え・リプレイしたい場面に向いています。


8. Android のキャプチャを使う場面

Section titled “8. Android のキャプチャを使う場面”
  • スマホアプリのネットワークリクエストを分析し、エンドポイントの問題を調べたいとき。デバイス全体を自動で復号し、証明書をいじる必要もありません。
  • デバイスやアプリが実際にどのエンドポイントに接続し、何を送ったのかを、デバイス全体の視点で見たいとき。
  • アプリが証明書ピンニングを使い、NIC モードで復号できないときは、アプリ層キャプチャでピンポイントに平文を取得します。
  • 見ながら同時に編集したい(書き換え/リプレイ)ときは、プロキシキャプチャを使います。

プロキシキャプチャに戻る · 関連:データの表示とデコード · 証明書の管理とインストール