From 4c3a9795d2da5810a2bc0a7a6007a13119008df3 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Thu, 12 Oct 2023 23:44:43 -0400 Subject: [PATCH] argcracker: Reformat code, misc cleanup --- argcracker/src/main.cpp | 41 ++++++++++++++++++------------------ argcracker/src/tickcount.cpp | 17 +++++++++------ 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/argcracker/src/main.cpp b/argcracker/src/main.cpp index 481d372..d334ed6 100644 --- a/argcracker/src/main.cpp +++ b/argcracker/src/main.cpp @@ -10,14 +10,16 @@ // from xivdev static char ChecksumTable[] = {'f', 'X', '1', 'p', 'G', 't', 'd', 'S', '5', 'C', 'A', 'P', '4', '_', 'V', 'L'}; -inline char GetChecksum(unsigned int key) { +inline char GetChecksum(unsigned int key) +{ auto value = key & 0x000F0000; return ChecksumTable[value >> 16]; } uint32_t TickCount(); -inline QString encryptGameArg(QString arg) { +inline QString encryptGameArg(QString arg) +{ unsigned int rawTicks = TickCount(); unsigned int ticks = rawTicks & 0xFFFFFFFFu; unsigned int key = ticks & 0xFFFF0000u; @@ -25,18 +27,16 @@ inline QString encryptGameArg(QString arg) { char buffer[9] = {}; sprintf(buffer, "%08x", key); - Blowfish* session = physis_blowfish_initialize(reinterpret_cast(buffer), 9); + Blowfish *session = physis_blowfish_initialize(reinterpret_cast(buffer), 9); - uint8_t* out_data = nullptr; + uint8_t *out_data = nullptr; uint32_t out_size = 0; QByteArray toEncrypt = (QStringLiteral(" /T =%1").arg(ticks) + arg).toUtf8(); - physis_blowfish_encrypt(session, - reinterpret_cast(toEncrypt.data()), toEncrypt.size(), &out_data, &out_size); + physis_blowfish_encrypt(session, reinterpret_cast(toEncrypt.data()), toEncrypt.size(), &out_data, &out_size); - QByteArray encryptedArg = QByteArray::fromRawData( - reinterpret_cast(out_data), out_size); + QByteArray encryptedArg = QByteArray::fromRawData(reinterpret_cast(out_data), out_size); QString base64 = QString::fromUtf8(encryptedArg.toBase64(QByteArray::Base64Option::Base64UrlEncoding | QByteArray::Base64Option::OmitTrailingEquals)); char checksum = GetChecksum(key); @@ -44,45 +44,46 @@ inline QString encryptGameArg(QString arg) { return QStringLiteral("//**sqex0003%1%2**//").arg(base64, QLatin1String(&checksum, 1)); } -inline QString decryptGameArg(uint32_t tickCount, QString sqexString) { +inline QString decryptGameArg(uint32_t tickCount, QString sqexString) +{ unsigned int ticks = tickCount & 0xFFFFFFFFu; unsigned int key = ticks & 0xFFFF0000u; char buffer[9] = {}; sprintf(buffer, "%08x", key); - Blowfish* session = physis_blowfish_initialize(reinterpret_cast(buffer), 9); + Blowfish *session = physis_blowfish_initialize(reinterpret_cast(buffer), 9); QStringRef base64String(&sqexString, 12, sqexString.length() - 5 - 12); - QByteArray base64Decoded = QByteArray::fromBase64(base64String.toUtf8(), QByteArray::Base64Option::Base64UrlEncoding | QByteArray::Base64Option::OmitTrailingEquals); + QByteArray base64Decoded = + QByteArray::fromBase64(base64String.toUtf8(), QByteArray::Base64Option::Base64UrlEncoding | QByteArray::Base64Option::OmitTrailingEquals); - uint8_t* out_data = nullptr; + uint8_t *out_data = nullptr; uint32_t out_size = 0; - physis_blowfish_decrypt(session, - reinterpret_cast(base64Decoded.data()), base64Decoded.size(), &out_data, &out_size); + physis_blowfish_decrypt(session, reinterpret_cast(base64Decoded.data()), base64Decoded.size(), &out_data, &out_size); - QByteArray decrypted = QByteArray::fromRawData( - reinterpret_cast(out_data), out_size).trimmed(); + QByteArray decrypted = QByteArray::fromRawData(reinterpret_cast(out_data), out_size).trimmed(); return QString::fromUtf8(decrypted); } -int main(int argc, char* argv[]) { +int main(int argc, char *argv[]) +{ if (argc < 4) { qInfo() << "Usage: novus-argcracker [sqexarg string] [tick range] [known arg]"; return 1; } - const char* toCrack = argv[1]; + const char *toCrack = argv[1]; int tickRange = atoi(argv[2]); - const char* knownArg = argv[3]; + const char *knownArg = argv[3]; uint32_t bottom = TickCount() - tickRange; qInfo() << "Beginning to crack" << toCrack << "..."; - for(uint32_t i = bottom; i < TickCount(); i++) { + for (uint32_t i = bottom; i < TickCount(); i++) { const QString decrypted = decryptGameArg(i, QLatin1String(toCrack)); if (decrypted.contains(QLatin1String(knownArg))) { diff --git a/argcracker/src/tickcount.cpp b/argcracker/src/tickcount.cpp index e6151c9..c84995f 100644 --- a/argcracker/src/tickcount.cpp +++ b/argcracker/src/tickcount.cpp @@ -4,22 +4,23 @@ #include #if defined(MACOS) - #include - #include +#include +#include #endif #if defined(WIN32) - #include +#include #endif #if defined(MACOS) // from XIV-on-Mac, I think it changed in recent Wine versions? -uint32_t TickCount() { +uint32_t TickCount() +{ struct mach_timebase_info timebase; mach_timebase_info(&timebase); auto machtime = mach_continuous_time(); - auto numer = uint64_t (timebase.numer); + auto numer = uint64_t(timebase.numer); auto denom = uint64_t(timebase.denom); auto monotonic_time = machtime * numer / denom / 100; return monotonic_time / 10000; @@ -29,7 +30,8 @@ uint32_t TickCount() { #if defined(LINUX) #include -uint32_t TickCount() { +uint32_t TickCount() +{ struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); @@ -39,7 +41,8 @@ uint32_t TickCount() { #endif #if defined(WIN32) -uint32_t TickCount() { +uint32_t TickCount() +{ return GetTickCount(); } #endif \ No newline at end of file