山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

iPhoneアプリの通信データを調べる

私はダイエットのために体重を毎日アプリに記録しています。気づいたらもう3年もやっています。アプリで昔のデータも参照できますが今までで一番少なかった体重を調べるにはひたすら何回もタップして全部のデータを見ていかないといけません。ここはデータをダウンロードして表計算ソフトでソートしたりしたいところです。

そこでアプリの通信内容を捉えてデータを抜き取ってみることを試みました。調べてみるとMacではBurp proxyというものがよく使われているようです。

アプリ -> Mac(Burp proxy) -> サーバー

通信経路をこのようにしてBurp proxyで通信内容を捉えます。

やったことはまずBurp proxyをダウンロード。jarファイルになっているので右クリック→開くで起動します。
Burp Proxy

Proxyタブを開くとinterceptタブになっていて、「intercept is on」になっています。このボタンを押してインターセプトをオフにします。

デフォルトではローカルの通信しか受け付けないようになっているのでproxyタブ内のoptionタブに定義を追加します。addボタンを押してall interfaceを選択します。ポートは好きな番号で。

次にiPhoneからMacのIPとproxyのポートを指定してブラウザを開きます。ここの右上のCA Certificateというリンクをクリックして証明書をインストールします。これをすることでHTTPSの通信もできるようになります。

あとはiPhonewifiの設定でプロキシを指定すればokです。iPhoneのブラウザで通信したりアプリでHTTP通信するとBurp proxyに通信内容が記録されます。

ここで通信内容を取得して同じようなリクエストを投げるプログラムをrubyで作ってpostデータをどんどん書き換えて無事データを全部ダウンロードできました。このへんはnet/httpとnokogiriで処理します。rubyはループの書き方も柔軟で今更ながら少し感動しました。0から1000まで6刻みでループするのはこんなふうに書けました。

0.step(1000, 6) |n|
  puts n
end