Quantumleap
1132 words
6 minutes
Salmonia3+動作モードの違いについて

背景#

非公式アプリ利用者をBANするという措置を取ってきたため、Salmonia3+にも対応が求められました。

以下、考えられうる対策とその対策を実現するためのモードの紹介です。

各モードについて#

それぞれのモードについては、

  • 非公式APIを使うかどうか
  • リクエスト形式が独自のものかどうか
  • 公式アプリを利用するかどうか

の違いしかありません。

各種モード非公式APIリクエスト形式導入公式アプリ有効期限
Direct Mode利用独自-無期限/90日
Manual Mode利用公式-無期限/90日
VPN Mode-公式別アプリが必要利用無期限
Patch Mode-公式知識が必要利用無期限/7日/365日

Direct Mode#

現在のSalmonia3+で使われているモードです。APIを直接叩くので余計な処理が発生せず、最速です。

これが原因かははっきりしませんが、Salmonia3+ユーザーでイカリング3をBANされたという人もいます。

stateDiagram-v2
    state DirectMode {
        state "Salmonia3+" as S3
        S3 --> GraphQL: Call API with the token generated by using third party API
        GraphQL --> Salmonia3+
        Salmonia3+ --> SalmonStats
    }

BANされた理由として考えられるのは「非公式APIを利用して作成されたトークンを使っていること」、「一気にリザルトを取得しようとして負荷をかけた」、「リクエストの取得方法で検知された」、「QRコード取得APIを叩いた」などが考えられます。

このうち、一気にリザルトを取得しようとしてしまう件については修正予定で、QRコード取得APIを叩いてしまう件については対応済みです。

残りの二つが原因なのであれば、もっと多くの人がBANされていてもおかしくないのでこれがBANの最有力候補だと考えています。

Manual Mode#

同じく非公式APIを利用した作成されたトークンを使います。

アプリ内ブラウザ(イカリング3ビューワ)を利用してリザルトをアップロードします。Direct Modeよりは低速です。

stateDiagram-v2
    state ManualMode {
        state "Salmonia3+" as S3
        state "Hooking org code" as Hook
        S3 --> SplatNet3: In App Browser
        SplatNet3 --> GraphQL: Call API with the token generated by using third party API
        GraphQL --> Hook: Hooking
        Hook --> Salmonia3+
        Hook --> SalmonStats
    }

VPN Mode#

別の連携アプリを利用して公式のトークンを用いてリザルトを取得します。

公式アプリが取得したデータをSalmonia3+に渡す方式ですので、理論上公式アプリと全く同じ動作をするため有効なBAN対策となり得ます。

ただし、別の連携アプリが必要になるのでそこだけが手間で、導入もそれなりにめんどくさいです。リザルト取得も若干手間なのでどのくらい利用する人がいるかは微妙なところです。

stateDiagram-v2
    state PatchMode {
        state "Salmonia3+" as S3
        state "Nintendo Switch Online" as NSO
        state "Mudmouth" as VPN
        VPN --> NSO
        NSO --> SplatNet3: In App Browser
        SplatNet3 --> GraphQL: Call API with the original token
        GraphQL --> VPN: MITM
        VPN --> S3: URL Scheme
        S3 --> SalmonStats
    }

Patch Mode#

公式のアプリにパッチをあてて、公式アプリ自体でリザルトを取得するモードです。

Manual ModeのNintendo Switch Online版のような感じです

VPNモードと同じく有効なBAN対策となり得ます。

このモードのみ、Salmonia3+のインストールを必要としません。つまり、Salmonia3+でリザルトが確認できないので、Salmon Statsで自分のリザルトを確認する何らかの仕組みを導入するアップデートが必要になります。

また、アプリにパッチを当てるためにはパッチがあたったアプリをインストールするか、端末自体にパッチをインストールする必要があります。正直どちらのハードルも高く、Salmonia3+でリザルトを確認できないというデメリットががあります。このモードのメリットは「完全に公式と同じ」「外部連携アプリ不要」という点だけですので、デメリットを上回るメリットがあるかというと微妙です。

stateDiagram-v2
    state PatchMode {
        state "Salmonia3+" as S3
        state "Nintendo Switch Online" as NSO
        state "Hooking org code" as Hook
        Hook --> NSO
        NSO --> SplatNet3: In App Browser
        SplatNet3 --> GraphQL: Call API with the original token
        GraphQL --> Hook : Hook
        Hook --> S3: URL Scheme
        S3 --> SalmonStats
    }

最後に#

もし、開発者である私自身がどのモードを使いますかと訊かれたら、間違いなくダイレクトモードと答えます。

記事は以上。

Salmonia3+動作モードの違いについて
https://fuwari.vercel.app/posts/2023/11/salmonia_mode/
Author
tkgling
Published at
2023-11-29