任天堂がAPIをサイレントアプデしました

#プログラミング#サーモンラン

By tkgstrator at

任天堂の API 変更

現在、ikaWidget2, Salmonia3, salmdroid, その他全ての任天堂非公式ツールはイカリング 2 にログインすることができなくなっています。

そして、この API の変更は今までとは少し違うものです。それを解説します。

今までのアップデートとは

現在、API のバージョンは 2.2.0 ですが、ここまでにあったいろいろな変更をお伝えします。

X-ProductVersion

ログインする際にヘッダーにアプリのバージョンを指定する必要があります。

この値が低いと、アプリのアップデートを促され、ログインすることができません。

が、ヘッダーのバージョンでサーバーがリジェクトしているだけなので、ヘッダーのバージョンを上げれば常にリクエストが通ります。

現在「2.2.0 以上でないと受け付けない」という仕様になっているので「2.1.1」では弾かれますが、「9.9.9」などの値にしてもバージョン制限で拒否されることはありません。

x-ver

今まで一度もなかったような気がする(一回だけあったかも)アップデートです。

現在のバージョンは 3 で、2 や 1 を指定するとエラーがでてリクエストが通りません。このバージョンが、どこから取得できるものなのかはわかっていません。

このバージョンはアプリのバイナリ内で指定されているので、逆アセンブラで解析する以外に知る方法はありません。

f

任天堂はあるときから認証として f というパラメータを追加しました。

これは UUID, timestamp, naIdToken の三つの値から計算されていることはわかっているのですが、その計算方法はわかっていません。

そして、バージョンが上がるとこの f の計算方法が変わることがあります。もちろん、これは内部的に計算されているので、パケット解析などでバージョンが変わったことを知る術はありません。

ですが、アプリのバージョンが上がったときにこの計算方法も更新されることが多いです。

今回はどれに該当するのか

正直、一番楽なのは X-ProductVersion の更新です。

実はこれに関しては Salmonia3 や ikaWidget2, splatnet2statink では既に対応済みで、新しいバージョンが出れば最新のバージョン情報を取得してその値で利用するようにプログラムが書かれています。

ただし、これはアプリのアップデートがあったときだけにしかこの制限がこないので 2.2.0 がリリースされてからしばらく経っていて、新しいバージョンがリリースされていない以上、今回の問題はこれが原因とは考えられません。

では x-ver の問題なのでしょうか?

これについては全くわかりません。どの x-ver が使われているかはアプリ自体を解析するしかないからです。で、うちの環境だと Windows でないとそれができません。今は理解のある彼君の家にいるので残念ながら Mac しかありません。

まあでも、つよつよエンジニアの方二人に連絡はしたので、彼らがなんとかしてくれるのではないかと思います。

最後にアプリのバージョンが足りていないという可能性があります。

といいつつも、これは現状でぼくが確認できることではありません。imink や flapg のサーバーが何のバージョンで動いているのか、ぼくが知らないからです。

もしこれが原因の場合、サーバーのバージョンを上げるだけで解決する可能性があります。ただ、Nintendo は旧バージョンの起動を制限しているので、これが原因の可能性は低いと思われます。

じゃあ結局何なの

残念ながら解析するまでわかりません。

ひょっとしたら直ぐに直るかもしれないし、下手をすると一週間以上かかる可能性もあります。初めて f のパラメータが認証に追加されたときは一ヶ月くらいかかったような気もします。

そして、この認証を回避するような上手い仕組みは存在しません。トークンを無限に利用し続けるような魔法も存在しません。

まだ動いてるよっていう人は単にトークンの有効期限が切れていないだけです。24 時間放置すればトークンは切れるので、それでおしまいです。

記事は以上。