艦これのパケットを見た

どうも巷ではソシャゲが流行ってるようだが、これらをやるぐらいならパケット読むほうが楽しいなと思ってやった。

艦これについて

DMMが運営している戦艦を擬人化してブラウザゲームにしたやつ。
僕も前はやっていたが最近はやっていない。
詳しくはwiki参照

艦これの通信について

基本的にはHTTP(ブラウザゲーム通信プロトコル事情はよく知らないが)なので、基本的に平文でデータを送受信してるっぽい。
どうせだし、n番煎じと言われても読んでみようかとなった次第
あと、パケットをキャプチャして読んで見るっていうのを始めてやる初心者には優しくて良いなと思ったので今後何かに使えるかと思ってこのエントリを書く。

WireSharkのインストール

WireSharkのサイトからインストーラをダウンロード→実行。
途中は全てyesで進めていく。
パパっとやって、終りっ!

ブラウザ側の準備

ここまで開く。
f:id:site0801:20170320214915p:plain

WireSharkの準備

WireSharkを起動する。
NICが馬鹿みたいに付いてる変態じゃなければ[Ethernet]か[イーサネット]をダブルクリックする。
f:id:site0801:20170320215855p:plain

実際に艦これパケットを探す

WireSharkが起動するとパケットがドバーッっと流れてくる。
しかし、それらを全て読んで艦これパケットだけを探すのは一般人には限りなく無理。
なので、まずパケットが流れそうなソフト及びサイトを閉じる(特にブラウザは艦これのみ開くのが良い)
次に、デスクトップの左右にWireSharkと艦これを開いたブラウザが見えるように配置する。

  1. 艦これのサイトをF5で更新
  2. すぐに目線をWireSharkを見る
  3. パケットがドバーッと流れてくるのでプロトコルTCPHTTPのパケットを探す(この時多分(2017/3/20に確認)TCPとHTTPが同時に大量に流れてくる)
  4. それを見つけたらすかさずクリック
  5. そうするとsourceDestinationに自分のじゃないIPアドレスがあると思うのでメモする。

とりあえずここまで出来たらあとはフィルターかけるだけ。

WireSharkのフィルター機能を使う

WireSharkの上のここ(赤枠内のテキストボックス、以降はフィルター欄と呼ぶ)にip.addr == (さっきコピーしたIPアドレス)と入力してEnterキーを押す(下の画像ではIPアドレス203.104.248.135だった時のなので適宜書き換える)
f:id:site0801:20170320225559p:plain

そうするとズラーッとTCPとHTTPのパケットだけ(自分の環境ではそうだった)が見える f:id:site0801:20170320225958p:plain

しかしこれではHTTPの中身が見たいのにうまくいかない。 なので、フィルター欄にip.addr == (さっきコピーしたIPアドレス) && httpと入れる。
すると、HTTPのパケットのみが見えるいい感じになる。 f:id:site0801:20170320230537p:plain

だけど、これではHTTPパケットがゴチャゴチャ出てくるだけでイマイチ一般人には意味が解らない(パケット解析やったことあるなら割とわかるかもしれないけど)
ここから一般人にもわかりやすくするには、フィルター欄にip.addr == 203.104.248.135 && http.request.method == "POST"と入力する。
この文字列の意味としては[ipアドレス送信先or送信元 == 値]&&[HTTPのPOSTリクエストのみを表示する]となっている。

実際にパケットを見る

さっき打ち込んだフィルターによってWireSharkのパケット一覧の表示パケット数が減ったと思う。
このあと艦これのパケットを最初から見ていくためにパケット一覧をリフレッシュする。 下の画像の赤く囲ってある緑のサメのヒレボタンをクリックする。 f:id:site0801:20170320231607p:plain

そうすると、今キャプチャしたパケットを保存するか聞かれるので[保存しない]と答える。
そしたら艦これのブラウザを更新する。
そしたらパケットが幾つか流れてくると思う。
ここまで開いたらこんな感じになる。
ブラウザ側: f:id:site0801:20170320233042p:plain

WireShark側: f:id:site0801:20170320232954p:plain

パケット一覧を見るとinfoの中にapiの名前が書いてある。
ココらへんは開発が良い感じな名前にしてくれているのでパット見で意味がわかると思う。
実際に詳細を見るには、
[パケットを右クリック]→[追跡]→[HTTPストリーム]、で中身を見ることができる。(以降Follow HTTP Streamと呼ぶ)
主に青色になっている部分らへんを見るとサーバーからどんなデータを送ってきているのかがが分かる。 試しにそのまま艦これの方を操作して演習相手一覧まで行く。
f:id:site0801:20170320233958p:plain

そしたらさっきと同じくパケット一覧をリフレッシュする。
そしたら実際に誰でも良いので戦ってみてリザルト画面まで行く。
すると、パケット一覧のinfoがPOST /kcsapi/api_req_practice/battle_resultみたいなのがあると思うのでそれをFollow HTTP Streamしてみる。
すると、如何にもなデータが出てくる。 下の画像と比較しながら見てみると色々わかってくると思う(実際にやってないでこのサイトのみを見ている場合は文字列については見難いのでメモ帳とかにコピーしてみると見やすいかもしれない)

svdata={"api_result":1,"api_result_msg":"\u6210\u529f","api_data":{"api_ship_id":[-1,145,235,286,296,210,268],"api_win_rank":"S","api_get_exp":60,"api_member_lv":55,"api_member_exp":153110,"api_get_base_exp":660,"api_mvp":2,"api_get_ship_exp":[-1,990,1320,660,660,660,660],"api_get_exp_lvup":[[185381,188500],[345934,356200],[285953,296200],[329002,331000],[140952,143700],[239404,245900]],"api_dests":6,"api_destsf":1,"api_enemy_info":{"api_user_name":"","api_level":55,"api_rank":"\u4e2d\u4f50","api_deck_name":"\u6642\u96e8\u305f\u3093\u309299\u306b\u3059\u308b\u306e\u3002"}}}

f:id:site0801:20170320235127p:plain f:id:site0801:20170320235313p:plain

比較していくと割と分かるとことが多く、特に分かる人はわかるかもしれないが、ベース経験値やMVP、ランク、鎮守府レベル等の多くの情報がわかる。
なので、例えばこれらのデータから新しい海域の詳細情報などを得る等のことが出来るのかもしれない(僕は面倒くさいのでそういった事はしませんが)

最後に

このエントリも適当に書いてメモ程度にしようかと思ったら案外多めに書いてしまった。
ちなみにこのエントリに書いてあるタイミング以外にも艦これではパケットを送受信してるので結構色々なものが見えてくる。
そこらへんについては暇があったらまた書くかも(先駆者が多いから飽きるかもしれないけど)
あと艦これの運営はさっさとSSL対応をしようね…平文で送ってるの馬鹿っぽいよ… とりあえず明日は4時出発の旅行なので寝るので書くのを止める。 終わりっ!閉廷!…以上!皆解散!