今回の特集に先立つ11月の特集記事(LINEやcommの通話の仕組みを解析―準備編)で、Android端末上でのパケット収集やWiresharkを使ったパケット解析の方法について説明し、NHN Japanの「LINE」とディー・エヌ・エー(DeNA)の「comm」のパケットを解析しました。今回はそれにならい、「Viber」や「KAKAO TALK」の通信がどのようなやりとりをしているのかを調査していきます。

 なお、接続先サーバーのIPアドレスは実際には判明していますが、記事や図ではサーバーを「Viber01」などと表しています。また各図ではTCPセッションの確立/解放手順は省略しています。また、今回も前述の記事同様に、LTE回線上を流れるパケットをキャプチャした内容を解析していきます。

Viberの解析

 Viberを実行したときのログインから無料通話までのシーケンスは図1のようになっていました。Viberは通信するときにTCPやUDPの上に直接バイナリデータを乗せて送受信していました。このバイナリデータの構造を調べることができなかったため、実際にどのようなデータを送受信しているのかは分かりませんでした。

図1●Viberのシーケンス(ログインから無料通話まで)
図1●Viberのシーケンス(ログインから無料通話まで)
[画像のクリックで拡大表示]

 また、tPacketCaptureを使用している状態では、無料通話相手からの応答が来ませんでした。ただし、tPacketCaptureを停止した状態では無料通話ができたので、前回の特集で解析したLINEでも同じ現象が発生しました。

 Android 4.0以降を搭載する端末の場合、AndroidのVPN(Virtual Private Network)機能を利用してパケットを収集できます。tPacketCaptureもVPN機能を利用します。LINEの場合、SIP(Session Initiation Protocol)のINVITEに設定されているIPアドレスがVPN実行時のIPアドレスとなっているため、tPacketCaptureを起動している状態では相手側からの到達が不可能となっていると考えられます。

 一方、Viberを解析したところ、SIPを使用している形跡は見当たりませんでしたが、SIPと同じような方法でIPアドレスの交換をしており、この時のIPアドレスがVPNのIPアドレスとなっていると推測できます。