Memorandum

普段の生活の覚え書き。主に技術録

【Splatoon 2】イカリング2をPCで閲覧

何度かブログで言っていた、やりたいことが実現できたので、今回はその方法を紹介します。

背景

Nintendo SwitchSplatoon2にすごくハマっていて、プレイ時間が800時間ぐらいになっています。 (おそらくモンハン以来に熱中しているゲームだと思います。)

Splatoon2では対戦の戦績をスマホ用のアプリ(Nintendo Switch Online)で確認できるのですが、スマホだと画面が小さかったり、スマホを用意するのが少し不満でした。 私はSplatoonをやっているモニタの横に、パソコンがあるのでパソコンの画面で確認できれば楽だなぁと思っていました。

そこでネットで調べてみるとパソコンでSplatoonの対戦成績を確認できる方法があるというので、私もやってみたので手順をご紹介いたします。

手順

以前ご紹介したDockerを使います。

https://memoran.net/introduction-docker/

実践にあたって、以下の記事を参考にさせていただきました。 http://s2terminal.hatenablog.com/entry/2017/07/23/203831

今回行う内容を説明いたしますと、スマホが接続しているネットワーク内にパソコンを接続し、パソコン内でプロキシサーバというWebサイトへのアクセスを代理して行うサーバを用意します。 その後、スマホでアプリでを起動し、アクセスに使用しているデータをPCで取得し、PC単体でもSplatoonのデータを見ようとするものです。 簡単なイメージとしては、以下のような感じです。

mitmproxy

今回はプロキシサーバを立てるためにmitmproxyというのを使いました。mitmproxyとはHTTPプロキシの一種でOS XWindowsLinux上で動作し、SSLをサポートしているのが特徴です。

公式サイト:https://mitmproxy.org/

mitmproxyはpipと呼ばれるパッケージ管理システムでインストールできるみたいですが、今回はDockerを試してみたかったので、Dockerで立ち上げます。

以下のコマンドでhttps://github.com/mitmproxy/mitmproxyを取得して立ち上げられます。

docker run --rm -it -p 8080:8080 mitmproxy/mitmproxy

MacのTerminalで立ち上げると、「Flows」と表示されたウィンドウが表示されます。ここに取得したデータの流れが表示されます。

スマホの設定

プロキシサーバを立ち上げたら、次にスマホを立ち上げたプロキシサーバに接続する設定を行います。 私はAndroidを使用しているのでAndroidの手順を説明しますが、iOSでも同様にできるみたいです。 Androidのバージョンや機種によって多少異なるかもしれません。 ※追記:手元のXperia Z4 tabletでは動作確認出来ましたが、Xperia Z5ではうまく出来ませんでした。 機種によって対応可否があるみたいなので、別の方法も調査しています。

  1. 「設定」を開き、「Wi-Fi」を選択します。
  2. 接続しているネットワークがプロキシサーバを立ち上げたPCと同じであることを確認し、ロングタップし「ネットワークを変更」を選びます。
  3. 「詳細オプション」を開き、「プロキシ」の欄を「設定しない」から「手動」に切り替えます。
  4. 「プロキシホスト名」をプロキシサーバを立ち上げたPCのIPアドレスを入力します。
  5. 「プロキシポート」を上記のDockerコマンドで指定したポート(今回は8080)を設定します。

以上で、スマホのプロキシサーバの設定ができました。 次に、スマホhttp://mitm.it/にアクセスし証明書をインストールして、NintendoSwitchOnlineのアプリを開きます。

PCで確認

プロキシサーバを立ち上げたPCに接続情報が続々と流れているかと思います。その中からhttps://app.splatoon2.nintendo.net/というURLへのGETリクエストが出るので、Enterキーで中身を開きます。TabキーでRequest、Response、Detailと切り替えられます。qキーで前の画面に戻ります。データの中身でResponseのset-cookieにiksm_session(イカスミ?)という項目があると思うので、そのデータをコピーしておきます。

>> GET https://app.splatoon2.nintendo.net/?lang=ja-JP HTTP/2.0
       ← 200 text/html 488b 573ms
set-cookie:              iksm_session=XXXXX

この値が、アプリ上の操作をPCで再現することができます。いわゆるセッションハイジャックと呼ばれる行為です。セッションハイジャックについては以前に記事に説明していますので、興味があれば御覧ください。

https://memoran.net/security-glossary-vulnerability/#i-7

その後、PCのブラウザで取得したiksm_sessionに値を利用してhttps://app.splatoon2.nintendo.net/homeにアクセスします。私はGoogle ChromeEditThisCookieを使いました。

すると、ブラウザでアプリで表示された内容と同じものが閲覧できます。

今後の展望

無事、PCでSplatoon2の対戦の戦績が確認できるようになりました。大分手間がかかりますが、Dockerを利用することができたので個人的には楽しかったです。

今後の展望としては次のことができればと思います。

  • 戦績データの拡張
    • 現在のイカリング2の仕様では直近の50戦の試合データしか取得できないので、その枠を撤廃して試合データを無制限に蓄積できれば、より戦績データの傾向が見られると思います。
  • イカリング2のWebアプリ化
    • アプリの認証処理を解析してiksm_sessionを自動生成することができれば、このような今回のような手順を踏まなくてもデータを取得することができそうなので、その処理を実装できれば、ブラウザでアクセスするだけで戦績データを見れるWebアプリが作れると思います。

今はまだ知識や技術が浅いのですぐに実現するのは難しいですが、挑戦していきたいと思います。

[amazon asin="B072J2J26T" kw="Splatoon 2 (スプラトゥーン2) - Switch"]