MacからiPhoneをデバッグ
このガイドは、Chuteをインストールしたスマートフォンから始めて、そのスマートフォンの復号済みリクエストをリクエストとレスポンスのボディ付きでMacのウィンドウに表示し、フィルターと書き出しができる状態にするまでを扱います。それぞれ参照ページを持つもの — CA、ホストリスト、記録、制御チャネル、Dashboard — を実際に行う順につなぎ、各ステップで先に進む前に何が見えているべきかを示します。
必要なもの:
- スマートフォン上のChute iOS(ライセンス付き)。iPhoneではHTTPS復号とボディの取得はライセンスが必要な機能です。ライセンスが無くても以下はすべて接続まではできますが、HTTPSの行は不透明のまま、データのタブは選択できません。ライセンスと有効化を参照してください。
- Mac上のChute Dashboard — 無料でライセンス不要。
- USBケーブル(推奨: ネットワークに何も開かず、セルラー回線でも動きます)、またはスマートフォンとMacが同じWi-Fiにあること。
Macに何もインストールしたくない場合、Webコンソールがブラウザで同じ接続、ボディ、書き換えを表示し、スマートフォン側に必要なのは
external-http-controllerだけです。以下のステップ 1–3 はそのまま当てはまり、ステップ 4 以降は代わりにWebコンソールを開くに従ってください。
1. CAをインストールして信頼する
スマートフォンの設定エディターで: MITM → CAを設定 → 新しいCA証明書を生成、次にCA証明書をシステムにインストール、そして設定 → 一般 → 情報 → 証明書信頼設定で信頼します。誰もが見落とすステップを含む完全な手順はHTTPS復号のページにあります。
確認: 証明書ページが信頼済みCA証明書と表示されます。未信頼 と出るなら、証明書信頼設定の信頼スイッチがまだオフです — それがオンになるまで、この先は何も動きません。
2. 復号するホストを指定する
Chuteは指定したホストだけを復号します。エディターのMitMセクション(CAを設定があるところ)で、見たいホストを追加します。* ではなく狭く始めてください — デバッグしているアプリのAPIホストなど。復号するホストごとにスマートフォンのCPUを消費しますし、証明書をピン留めしているアプリは復号すると壊れます。*.apple.com は最初から除外するのが最善です。
[MITM]
enable = true
hostname = api.example.com, *.example.net, -*.apple.com
文法 — ポート、- による除外、/path の限定 — はHTTPS復号のページにあります。あとでDashboardのMitMルールパネルから効果を見ながらホストを追加・削除し、効いたものを設定に書き写すこともできます。
3. 復号と記録をオンにする
スマートフォンのコントロールパネルで、2 つのスイッチ:
- MitM — ステップ 2 のホストに対する復号をオンにします。
- トラフィックキャプチャ — リクエストとレスポンスのボディを記録します(
replica設定)。これが無いと、Dashboardはすべての接続をルールとポリシー付きで表示しますが、データはありません。
どちらもあとでDashboardのツールバーから切り替えられるので、今忘れても問題ありません。設定に書かれていない限り([General] の replica = true、[MITM] の enable = true)、どちらも再起動をまたいで保持されません。また、iPhoneではどちらもライセンスが必要な機能で、ライセンスが無ければ設定に何と書かれていてもエンジンが拒否します。
4. Dashboardの接続を許可する
設定エディターで: 外部コントローラー。
- 外部コントローラーアクセスをオンにします — 脚注には Chute Dashboard/Chute CLIの接続を許可 とあります。
- ポート(空いているポートなら何でも。特に無ければ
6170)と、自分で決めたパスワードを入力します。 - Wi-Fiからのアクセスを許可: USBならオフのままにします。Wi-Fi経由で接続するときだけオンにしてください — そのネットワーク上でパスワードを知っている全員にリスナーを開くことになります。
- 保存して、トンネルを開始(または再起動)します。
確認: コントロールパネルに外部アクセスポート: 6170(あなたのポート)が表示されます。この行が無ければ、トンネルは保存した設定で動いていません — 再起動してください。
5. Dashboardを接続する
スマートフォンをケーブルでMacにつなぎ、スマートフォン側で聞かれたらこのコンピュータを信頼します。Chute Dashboardを開き、新規ダッシュボードウィンドウでUSBで接続を選び、デバイス:でスマートフォンを選んで、ステップ 4 のポートとパスワードを入力して接続します。
代わりにWi-Fiなら: リモートマシンに接続を選び、ホストにスマートフォンのアドレス(設定 → Wi-Fi → ⓘの IP アドレス)、同じポートとパスワードを入力します。
確認: 新しいDashboardウィンドウが開き、スマートフォンが接続を作るにつれてアクティブのリストが埋まっていきます。空ならスマートフォンを数秒使ってください。ここで起こりうる問題は 2 つです: パスワードが一致しません、そしてスマートフォンに到達できない場合(アドレスが違う、Wi-Fiアクセスがオフ、トンネルが動いていない)です — それでもウィンドウは開き、Wi-Fiでは最後に接続が切断されましたになり、USBでは接続中…のまま、スマートフォンが応答するまで再試行を続けます。詳細はDashboard のページにあります。
6. ツールバーのスイッチを確認する
アクティブのリストの上部に、ステップ 3 の 2 つのスイッチがDashboardから見た形で並びます:
- トラフィックキャプチャはトラフィックキャプチャを無効化と表示されているはずです — 記録はオンです。トラフィックキャプチャを有効化と表示されていたらクリックしてください。
- MitM を有効化(N ルール)はMitM を無効化(N ルール)と表示されているはずです — 復号はオンで、
Nはステップ 2 のホスト数です。ボタンに「(N ルール)」の数が付いていなければ、ホストリストがスマートフォンに届いていません: ステップ 2 を確認してトンネルを再起動してください。
7. 再現して、リクエストを見つける
トラフィックを見たいアプリで操作をします。次にリストの上のフィルターバーで絞ります: ホスト/URLでフィルター…にホストを入力するか — ツールバーのフィルター欄も同じ検索です — MitMのみにチェックを入れて復号された行だけを残します。
確認: 対象ホストの行のフラグ列に M があります。メソッド列が示すのは接続の種類 — HTTPS — で、動詞ではありません: リクエスト行とステータス行はリクエストヘッダーとレスポンスヘッダーの先頭行にあります。1 つ選択すると、リクエストヘッダータブにヘッダー、クエリパラメータ、Cookieがあり、レスポンスデータにボディが表示されます — 最初はテキストで、ツリーで見るならJSON、画像なら画像を選びます。
対象ホストの行に M が無ければ、その接続は復号されていません。可能性の高い順に: ホストがリストに無い(またはパターンが一致しない — api.example.com は www.example.com を含みません)、MitMがオフ、CAはインストールされたが信頼されていない(アプリ自身が証明書エラーを出しているはずです)、アプリが証明書をピン留めしている(そのホストを除外し、中が見えないことを受け入れる)、アプリがQUIC上のHTTP/3を話している — これは復号できないので、block-quic でTCPに戻します。
行に M はあるのにリクエストデータとレスポンスデータが選択できなければ、何も取得されていません: その接続が動いたとき記録がオフだった(オンにしてもう一度再現する)か、スマートフォン側の [Replica] でホストが除外されています。2 MiBを超えるボディはスマートフォンが引き渡しを拒否し、そのタブには ボディを読み込めません と表示されます。
8. 見つけたものを残す
行を選択し、そのうちの 1 行を右クリック: 選択項目をHARとして書き出す…で選択した行をすべてボディ付きで、ブラウザの開発者ツール、Charles、Proxymanで開けるファイルに、curl コマンドをコピーで右クリックした行のリクエストをコピーしてMacのターミナルから再送、選択項目をCSVとして書き出す…で表計算ソフト向けに。データのタブの中のbin として書き出すはボディ 1 つを取得されたまま保存します。
9. 何かを変えてみる(任意)
MitMビューのパネルは動作中のエンジンを編集します。手早い実験を 2 つ:
- ヘッダー書き換え → 対象ホストにルールを追加: リクエスト、追加、
X-Debug=1。再現すると、新しい行にHとRが付き、詳細パネルの適用されたルールにあなたのルールが引用されます。 - モックレスポンス → あるエンドポイントに自前のボディで応答する。レスポンスボディの種類はポップアップ —
file、text、base64、tiny-gif— で、その横の入力欄には種類に応じた内容を入れます:fileならパス(参照…で選べます)、textならボディそのもの、base64ならそのbase64で、tiny-gifなら何も要りません。fileのパスを読むのはスマートフォンで、そこに/Users/…はありません。ですからスマートフォン相手にはtextかbase64を選び、ボディをこのパネルの中でルール自体に入れてください — MitMツールの注意を参照。モックレスポンスで応答した行にはKが付きます。
ここで追加したルールはトンネルが再起動すると消えます。効いたものは設定に書き込んでください — 参照ページ: URL書き換え、ヘッダー書き換え、ボディ書き換え、モックレスポンス。
終わったら
- トラフィックキャプチャをオフにするか、
replica = falseにします: 記録がオンの間、ボディはスマートフォンに溜まり続けます。 - Wi-Fiからのアクセスを許可をオンにしたなら、オフに戻します。
- また行うならCAはインストールしたままで構いません。そうでなければ設定 → 一般 → VPNとデバイス管理で削除します。
本ページは英語版からの翻訳です。内容に相違がある場合は、英語版が優先されます。