Posts
3DS でモバゲーを遊ぶ
スマホを持っていないのでモバゲーには Firefox + FireMobileSimulator という環境でアクセスしているが、「3DS で使えたら寝転がって遊べるし最高じゃね?」と思い挑戦してみることに。
モバゲーは User-Agent (以下 UA) を使って端末を振り分けているので、非対応端末である 3DS (の UA) でアクセスすると拒否されてしまう。インターネットブラウザの UA は変更することができないので、Proxy をかませてリクエストを書き換えてやることにした。
一般的に Proxy といえば Squid のようなデーモンタイプの Proxy サーバを指すが、デーモンを動かすための環境や知識が必要になるので敷居が高い。CGI 経由でアクセスする CGI Proxy というものもあるが、基本的に HTML の書き換えしか行わないので、JavaScript や CSS を多用したスマホサイトだと厳しい。
他に良いものがないか探していてたどり着いたのが Proxomitron。日頃から愛用しているのにもかかわらず、ローカルで動いているせいかすっかり存在を忘れていた。ブラウザのアドオンとは違い、特定ポートを Listen する作りなので、PC 以外の端末 (3DS) から LAN 経由でアクセスできて都合が良い。
まず、Proxomitron の設定メニューにある「アクセス」タブを開く。初期値では「この PC からのアクセスのみを許可する」となっているので、「次の範囲の IP アドレスからのアクセスを許可する」に変更。
この状態で接続テストをしてみたが、なぜか失敗してしまう。「Windows ファイアウォール」でブロックされている可能性もあるので、「無効」に変更してみたが状況は変わらず。ダメ元で Proxomitron を再起動したらうまくいった。どうやら設定反映がうまくいってなかったらしい。
次は 3DS 側の設定。インターネットブラウザを起動して「Proxy の設定」を選択。「Proxy を使う」は当然チェック。「サーバー」には Proxomitron が起動している PC のローカルアドレス、「ポート」には Proxomitron で設定したポートを入力する。この状態で適当なサイトに接続してうまく表示されれば基本的な設定は完了。実際に Proxomitron を経由しているかどうかはログウィンドウで確認できる。
最低限の環境が整ったので、さっそく UA の偽装を行う。Proxomitron に以下のヘッダ用フィルタを追加。
In = FALSE Out = TRUE Key = "User-Agent: iPhone" Match = "*" Replace = "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3"
適当なスマホっぽい UA をセットしているだけで、特にこだわりはない。ただ、Android 系だとゲーム演出用の Flash が有効になる場合があるので iPhone にしておくのが無難か。
UA の設定が終わったらモバゲーにアクセスできるのか確認する。
トップページは問題なく表示されたが、ログイン画面に遷移することができない。Proxomitron は特別な設定をしない限り SSL での通信を行うことができないので、SSL が有効なログイン画面のアクセスに失敗している模様。通常のゲーム画面は SSL を使っていないので、ログイン Cookie さえ手に入れば何とかなる。SSL と格闘するのは面倒だったので、PC のブラウザでログインしたときに発行される Cookie を抜き取ることにした。
まず、Firefox でスマホ偽装状態でログインして Cookie を焼いてもらい、オプション画面から焼かれた Cookie を確認する。
sp.mbga.jp ドメインに属している "SP_LOGIN_SESSION" の値をメモしておく。この値を Proxomitron から強制出力してやれば、ログインした状態と同じになる。用意したフィルタは以下の通り。
In = FALSE Out = TRUE Key = "Cookie:SP_LOGIN_SESSION" Match = "*" Replace = "SP_LOGIN_SESSION=********"
設定が終わったら、再度モバゲーにアクセスする。うまくいけば会員トップ画面が表示されるので、そこから各ゲームへジャンプ。
今回は実験が目的だったので少し面倒なやり方になったが、Proxomitron 設置 PC の IP アドレスを DHCP から固定 IP にしたり、SSL に対応しているローカル Proxy を使えば、より実用的になるのかも。