サードパーティ製のFF14のランチャーにFFXIVQuickLauncherというものがあります。 公式のランチャーよりもシンプルで、クライアントの起動が速い、Discordとの連携機能があるとかいろいろと便利らしいです。
公式のランチャーと同じようにスクエニIDとパスワードを入れてログインしてゲームスタートなんですが、 非公式のツールにIDとパスワードを入力するのはけっこう怖いです。なので、ログイン~ゲームクライアント起動の流れがどんな感じの実装になってるのか見てみました。ソースコードはGitHubで公開されていて、C#とWPFで作られてます。
ログイン
おそらくメインのログイン処理はOAuthLoginとRegisterSessionです。 System.Net.WebClientを使ってHTTPS通信をしていて、リクエストヘッダーには専用のユーザーエージェント、リファラを設定しています。 リクエストパラメータのSTOREDというパラメータがミソっぽいです。
using var client = new WebClient(); client.Headers.Add("User-Agent", _userAgent); client.Headers.Add("Cache-Control", "no-cache"); client.Headers.Add("Accept", "image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*"); client.Headers.Add("Accept-Encoding", "gzip, deflate"); client.Headers.Add("Accept-Language", "en-US,en;q=0.8,ja;q=0.6,de-DE;q=0.4,de;q=0.2"); client.Headers.Add("Referer", $"https://ffxiv-login.square-enix.com/oauth/ffxivarr/login/top?lng=en&rgn={region}&isft=0&cssmode=1&isnew=1&issteam=" + (isSteam ? "1" : "0")); client.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); var response = client.UploadValues("https://ffxiv-login.square-enix.com/oauth/ffxivarr/login/login.send", new NameValueCollection //get the session id with user credentials { {"_STORED_", GetStored(isSteam, region)}, {"sqexid", userName}, {"password", password}, {"otppw", otp} });
認証用のURLに対して、ID、パスワード、ワンタイムパスワードなどのパラメータを添えてHTTPリクエストを投げています。URLのドメインはスクエニのものなので安心そうでした。 最終的に認証が成功すると、レスポンスからセッションIDが取れ、クライアントの起動処理に移行します。
クライアントの起動
ログインで取得したセッションIDを使ってクライアントを起動しています。 実装はLaunchGameにあります。 ArgumentBuilderを使っているのでおそらくクライアントのexeを実行するのに必要な諸々の引数を組み立てています。その中には先ほど取得したセッションIDも含まれています。 ランチャーを介さずにクライアントを直接実行してもエラーになるのはこれが原因っぽいですね。
その後、組み立てた引数を使ってクライアントのexeを実行します。 特に問題なければこれでクライアントが立ち上がり、ゲーム画面が表示されます。