1
Fork 0
mirror of https://github.com/redstrate/Novus.git synced 2025-04-24 04:57:45 +00:00

argcracker: Reformat code, misc cleanup

This commit is contained in:
Joshua Goins 2023-10-12 23:44:43 -04:00
parent 678304f583
commit 4c3a9795d2
2 changed files with 31 additions and 27 deletions

View file

@ -10,14 +10,16 @@
// from xivdev // from xivdev
static char ChecksumTable[] = {'f', 'X', '1', 'p', 'G', 't', 'd', 'S', '5', 'C', 'A', 'P', '4', '_', 'V', 'L'}; 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; auto value = key & 0x000F0000;
return ChecksumTable[value >> 16]; return ChecksumTable[value >> 16];
} }
uint32_t TickCount(); uint32_t TickCount();
inline QString encryptGameArg(QString arg) { inline QString encryptGameArg(QString arg)
{
unsigned int rawTicks = TickCount(); unsigned int rawTicks = TickCount();
unsigned int ticks = rawTicks & 0xFFFFFFFFu; unsigned int ticks = rawTicks & 0xFFFFFFFFu;
unsigned int key = ticks & 0xFFFF0000u; unsigned int key = ticks & 0xFFFF0000u;
@ -32,11 +34,9 @@ inline QString encryptGameArg(QString arg) {
QByteArray toEncrypt = (QStringLiteral(" /T =%1").arg(ticks) + arg).toUtf8(); QByteArray toEncrypt = (QStringLiteral(" /T =%1").arg(ticks) + arg).toUtf8();
physis_blowfish_encrypt(session, physis_blowfish_encrypt(session, reinterpret_cast<uint8_t *>(toEncrypt.data()), toEncrypt.size(), &out_data, &out_size);
reinterpret_cast<uint8_t*>(toEncrypt.data()), toEncrypt.size(), &out_data, &out_size);
QByteArray encryptedArg = QByteArray::fromRawData( QByteArray encryptedArg = QByteArray::fromRawData(reinterpret_cast<const char *>(out_data), out_size);
reinterpret_cast<const char*>(out_data), out_size);
QString base64 = QString::fromUtf8(encryptedArg.toBase64(QByteArray::Base64Option::Base64UrlEncoding | QByteArray::Base64Option::OmitTrailingEquals)); QString base64 = QString::fromUtf8(encryptedArg.toBase64(QByteArray::Base64Option::Base64UrlEncoding | QByteArray::Base64Option::OmitTrailingEquals));
char checksum = GetChecksum(key); char checksum = GetChecksum(key);
@ -44,7 +44,8 @@ inline QString encryptGameArg(QString arg) {
return QStringLiteral("//**sqex0003%1%2**//").arg(base64, QLatin1String(&checksum, 1)); 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 ticks = tickCount & 0xFFFFFFFFu;
unsigned int key = ticks & 0xFFFF0000u; unsigned int key = ticks & 0xFFFF0000u;
@ -54,21 +55,21 @@ inline QString decryptGameArg(uint32_t tickCount, QString sqexString) {
Blowfish *session = physis_blowfish_initialize(reinterpret_cast<uint8_t *>(buffer), 9); Blowfish *session = physis_blowfish_initialize(reinterpret_cast<uint8_t *>(buffer), 9);
QStringRef base64String(&sqexString, 12, sqexString.length() - 5 - 12); 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; uint32_t out_size = 0;
physis_blowfish_decrypt(session, physis_blowfish_decrypt(session, reinterpret_cast<uint8_t *>(base64Decoded.data()), base64Decoded.size(), &out_data, &out_size);
reinterpret_cast<uint8_t*>(base64Decoded.data()), base64Decoded.size(), &out_data, &out_size);
QByteArray decrypted = QByteArray::fromRawData( QByteArray decrypted = QByteArray::fromRawData(reinterpret_cast<const char *>(out_data), out_size).trimmed();
reinterpret_cast<const char*>(out_data), out_size).trimmed();
return QString::fromUtf8(decrypted); return QString::fromUtf8(decrypted);
} }
int main(int argc, char* argv[]) { int main(int argc, char *argv[])
{
if (argc < 4) { if (argc < 4) {
qInfo() << "Usage: novus-argcracker [sqexarg string] [tick range] [known arg]"; qInfo() << "Usage: novus-argcracker [sqexarg string] [tick range] [known arg]";
return 1; return 1;

View file

@ -14,7 +14,8 @@
#if defined(MACOS) #if defined(MACOS)
// from XIV-on-Mac, I think it changed in recent Wine versions? // from XIV-on-Mac, I think it changed in recent Wine versions?
uint32_t TickCount() { uint32_t TickCount()
{
struct mach_timebase_info timebase; struct mach_timebase_info timebase;
mach_timebase_info(&timebase); mach_timebase_info(&timebase);
@ -29,7 +30,8 @@ uint32_t TickCount() {
#if defined(LINUX) #if defined(LINUX)
#include <ctime> #include <ctime>
uint32_t TickCount() { uint32_t TickCount()
{
struct timespec ts; struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts); clock_gettime(CLOCK_MONOTONIC, &ts);
@ -39,7 +41,8 @@ uint32_t TickCount() {
#endif #endif
#if defined(WIN32) #if defined(WIN32)
uint32_t TickCount() { uint32_t TickCount()
{
return GetTickCount(); return GetTickCount();
} }
#endif #endif