From 99aa997322b28770d274e9e6573f9f6caa41e564 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Tue, 24 Jun 2025 15:36:47 -0400 Subject: [PATCH] Fix login after 7.25h2 They're doing something now which rejects invalid machine IDs, which Astra was giving (sorry!) I just copied XIVQuickLauncher's behavior which works. --- launcher/src/launchercore.cpp | 16 ++++++++++++++-- launcher/src/squareenixlogin.cpp | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/launcher/src/launchercore.cpp b/launcher/src/launchercore.cpp index ae62449..45c0916 100755 --- a/launcher/src/launchercore.cpp +++ b/launcher/src/launchercore.cpp @@ -345,8 +345,18 @@ void LauncherCore::buildRequest(const Profile &settings, QNetworkRequest &reques if (settings.account()->config()->license() == Account::GameLicense::macOS) { request.setHeader(QNetworkRequest::UserAgentHeader, QByteArrayLiteral("macSQEXAuthor/2.0.0(MacOSX; ja-jp)")); } else { - request.setHeader(QNetworkRequest::UserAgentHeader, - QStringLiteral("SQEXAuthor/2.0.0(Windows 6.2; ja-jp; %1)").arg(QString::fromUtf8(QSysInfo::bootUniqueId()))); + const auto hashString = QSysInfo::bootUniqueId(); + + QCryptographicHash hash(QCryptographicHash::Sha1); + hash.addData(hashString); + + QByteArray bytes = hash.result(); + bytes.resize(4); + + auto checkSum = (uint8_t)-(bytes[0] + bytes[1] + bytes[2] + bytes[3]); + bytes.prepend(checkSum); + + request.setHeader(QNetworkRequest::UserAgentHeader, QStringLiteral("SQEXAuthor/2.0.0(Windows 6.2; ja-jp; %1)").arg(QString::fromUtf8(bytes.toHex()))); } request.setRawHeader(QByteArrayLiteral("Accept"), @@ -354,6 +364,8 @@ void LauncherCore::buildRequest(const Profile &settings, QNetworkRequest &reques "application/x-ms-xbap, */*")); request.setRawHeader(QByteArrayLiteral("Accept-Encoding"), QByteArrayLiteral("gzip, deflate")); request.setRawHeader(QByteArrayLiteral("Accept-Language"), QByteArrayLiteral("en-us")); + request.setRawHeader(QByteArrayLiteral("Connection"), QByteArrayLiteral("Keep-Alive")); + request.setRawHeader(QByteArrayLiteral("Cookie"), QByteArrayLiteral("_rsid=\"\"")); } void LauncherCore::setupIgnoreSSL(QNetworkReply *reply) diff --git a/launcher/src/squareenixlogin.cpp b/launcher/src/squareenixlogin.cpp index 51c8483..fc5dcd1 100644 --- a/launcher/src/squareenixlogin.cpp +++ b/launcher/src/squareenixlogin.cpp @@ -265,6 +265,8 @@ QCoro::Task> SquareEnixLogin::getStor auto request = QNetworkRequest(url); m_launcher.buildRequest(*m_info->profile, request); + request.setRawHeader(QByteArrayLiteral("Referer"), m_info->profile->frontierUrl().toUtf8()); + Utility::printRequest(QStringLiteral("GET"), request); const auto reply = m_launcher.mgr()->get(request);