Android アプリの通信をキャプチャする、
Android 版 Busymate DevTools は、VPN ベースのキャプチャエンジンをスマートフォン上で直接動かします。デスクトップのプロキシも、共有 Wi-Fi も、プロキシ設定も不要。そして root なしの端末で実際にどのアプリが復号できるかを正直に説明します。
Android でアプリの HTTPS を読む昔ながらの方法は、ノート PC 上のプロキシと、スマートフォンの Wi-Fi 設定への手動プロキシ登録です。そのネットワークを離れた瞬間に使えなくなります。Busymate DevTools はプロキシを図から消します。アプリはスマートフォンの VPN として自らを登録し、端末が張るすべての接続を見て、選んだホストを端末上で生成した証明書で復号し、結果を iOS アプリやデスクトッププロキシと同じダッシュボードにストリーミングします。
このガイドが隠さないプラットフォームの事実が一つあります。Android 7.0 以降、アプリは明示的にオプトインしない限り、ユーザーがインストールした証明書を無視します。つまりスマートフォンはあらゆるアプリの通信をキャプチャできますが、復号できるのはユーザー証明書ストアを信頼するアプリだけ、実際には自分のデバッグビルドと、システムブラウザや同種のクライアントです。ステップ 5 で、自分のアプリをその仲間に入れるファイル 1 つの変更を示し、残りはピンニングのガイドで扱います。
必要な
スマートフォン、アカウント、そして自分のアプリの復号済みボディが欲しいなら、再ビルドできるデバッグビルド。
Android 7.0 以降のスマートフォン。キャプチャに root もコンピュータも必要ありません。
Busymate アカウント。Google またはメールアドレスとパスワードでサインインすると、スマートフォンがダッシュボードにペアリングされます。
SSL プロキシリストに入れる、読みたい API のホスト名。リストにあるホストだけが復号されます。
自分のアプリの場合:スマートフォンが生成した証明書を信頼させるため、ファイル 1 つのネットワークセキュリティ構成を加えてデバッグビルドを再ビルドできること。
順番どおりに
6 つのステップ。アプリのガイド付きセットアップがプラットフォームのプロンプトを 1 画面ずつ処理します。アプリの外で行う作業はステップ 5 のデバッグビルドの変更だけです。
- 01
アプリをインストールしてキャプチャの同意を承諾する
Google Play から Busymate DevTools をインストールするか、お住まいの地域でまだ掲載が表示されない場合は Android のランディングページから署名済みのリリース APK をサイドロードします。初回起動時、アプリはネットワーク通信をキャプチャするための明示的な同意を求めます。キャプチャはオプトインで、オンにするまでオフのままです。許可する前にバックグラウンドで動くものはありません。


- 02
サインインする — スマートフォンが自分でペアリングする
Google またはメールアドレスとパスワードでサインインします。iOS と同様、サインインがペアリングです。アプリはセッションを暗号化されたアプリ領域に保存される長期有効な端末クレデンシャルと交換し、少し後にスマートフォンがダッシュボードの Devices タブに Online として現れます。ホーム画面には端末名、アカウントのピル、キャプチャトグルのカード、そして設定用の歯車が付いた準備状況カードが表示されます。


- 03
復号したいドメインを追加する
歯車から設定を開き、SSL Proxying に進みます。HTTPS ボディを読みたいホストを列挙してください。それ以外はすべてエンドツーエンドで暗号化されたままで、ホスト名とリクエスト数だけが表示されます。先頭のアスタリスクとドットは、ドメインとそのすべてのサブドメインをカバーします。同じセクションには復号の設定と、フィードに決して出したくないバックグラウンドのノイズ用の Ignore Hosts リストがあります。
スマートフォンで行う必要はありません。ダッシュボードは同じ端末別リストを編集でき、そこでの変更はライブでスマートフォンに反映されるため、テストを続けている間にチームメイトがホストを追加できます。
- 04
ガイド付きセットアップを実行する
準備状況カードをタップします。ガイド付きセットアップは 3 つのプラットフォームプロンプトを 1 画面ずつ案内します。キャプチャ通知の許可、アプリがあなた専用に生成した証明書のユーザー証明書ストアへのインストール、そして Android 自身の VPN 接続要求の承認です。各ステップは完了するごとに済みに変わり、3 つすべてを通過するとカードが準備完了になります。
この証明書はあなたの端末専用です。スマートフォン上で生成され、共有サーバーからダウンロードされることはありません。これがあるからこそ、アプリは復号を選んだ各ホストに対して信頼された証明書を提示できます。


- 05
自分のアプリにユーザー証明書ストアを信頼させる
どの Android キャプチャツールも省略できないステップです。Android 7.0 以降、そのレベル以上をターゲットにするアプリは既定でシステム証明書ストアしか信頼しないため、スマートフォンが生成した証明書を提示した瞬間にアプリは接続を閉じます。解決策は、デバッグビルドに限定した小さなネットワークセキュリティ構成で、システムストアの隣にユーザーストアを追加することです。Android は debug-overrides ブロックをリリースビルドから完全に取り除くので、本番に漏れることはありません。
下のファイルをアプリ内に作成し、通常の HTTPS が動き続けるようユーザーアンカーの隣にシステムアンカーを残し、マニフェストの application タグから参照して、デバッグビルドを再ビルドしてインストールします。古いバイナリを再インストールしても意味はありません。信頼は新しくビルドしたアプリの中にあります。
デバッグ専用のネットワークセキュリティ構成と、マニフェストからの参照 xml<!-- app/src/main/res/xml/network_security_config.xml --> <network-security-config> <debug-overrides> <trust-anchors> <certificates src="user" /> <certificates src="system" /> </trust-anchors> </debug-overrides> </network-security-config> <!-- AndroidManifest.xml --> <application android:networkSecurityConfig="@xml/network_security_config" ... > - 06
キャプチャをオンにして調べる
キャプチャトグルをオンにします。Android のステータスバーに VPN の鍵アイコンが表示され、スマートフォンのすべてのリクエストがダッシュボードのフィードとアプリ自身の Network 画面に届き始めます。ステータス行、統計のピル、カテゴリのチップ、下部に検索のあるホスト別のリストです。ホストをタップし、次にリクエストをタップすると全詳細が見られます。リクエストとレスポンスの両方に General、Header、Summary、Timing、Body のタブがあります。
自分のアプリを開いて呼び出しを発生させてください。その HTTPS エントリは、不透明なトンネルではなく読めるヘッダーと復号済みのボディを表示します。終わったらキャプチャをオフにします。VPN が切れ、証明書とアプリは他のものと同じように削除できます。


うまくいかない
Android の問題の大半はプラットフォームが証明書に厳格であることが原因で、どれに当たったかはフィードが教えてくれます。
自分のアプリの通信がまだ暗号化されたまま表示される
ネットワークセキュリティ構成が効いていません。追加後にデバッグビルドを再ビルドしてインストールしたか、マニフェストがそのファイルを指しているか、証明書がユーザーストアにあるかを確認してください。構成がデバッグ専用のソースセットにある場合は、マニフェストの属性もデバッグ用マニフェストに必要です。
自分でビルドしていないストアのアプリが不透明なまま
root なしの端末では想定どおりです。そのアプリはユーザー証明書にオプトインしていないため、スマートフォンは接続をメタデータとしてのみ記録します。復号するには証明書をシステムストアに入れられる root 済みの端末(スマホファームが使う階層)が必要で、それでも自身の証明書をピンニングするアプリは開けません。
Android の VPN プロンプトが何度も出る
別の VPN アプリが動いているか、以前の承認がシステムの VPN 設定で取り消されています。同時に動かせる VPN は 1 つだけです。もう一方を切断し、ガイド付きセットアップからプロンプトを再承認してください。
キャプチャ通知が一度も表示されない
最初のプロンプトで通知の権限が拒否されました。システムのアプリ設定で Busymate DevTools の通知を再び有効にしてください。ガイド付きセットアップが再確認してステップを済みに切り替えます。
ホストはリストにあるのにパス単位のルールが発火しない
パスで一致させるルールはホストが復号されている必要があります。暗号化されたまま通過するホストではホスト名しか見えません。先にホストを SSL プロキシリストに追加してから、ルールを確認し直してください。
よくある
root は必要ですか?
キャプチャには不要で、自分のデバッグビルドやユーザーストアを信頼するクライアントの復号にも不要です。root が必要なのは、自分でビルドしていないアプリにも信頼させるために証明書をシステムストアへ移すときだけです。
内部的にはプロキシなのですか?
いいえ。アプリはスマートフォンの VPN として登録されるため、プロキシ設定に一切触れずに、Wi-Fi でもモバイルデータでもあらゆるアプリの通信を見られます。ブラウザやバックエンド向けには別途デスクトッププロキシがありますが、このガイドでは一度も使いません。
リストに入れていないアプリはどうなりますか?
これまでどおり動き続けます。接続はホストとタイミングだけが記録されて復号されることはなく、Ignore Hosts で特に騒がしいものをフィードから完全に外すこともできます。
あなたのアプリの通信を、
アプリをインストールし、ガイド付きセットアップを実行し、ファイル 1 つのデバッグ構成を追加して、アプリのリクエストが復号されて届くのを見てください。