mirror of
https://github.com/redstrate/Novus.git
synced 2025-04-23 20:47:45 +00:00
argcracker: Reformat code, misc cleanup
This commit is contained in:
parent
678304f583
commit
4c3a9795d2
2 changed files with 31 additions and 27 deletions
|
@ -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<uint8_t *>(buffer), 9);
|
||||
Blowfish *session = physis_blowfish_initialize(reinterpret_cast<uint8_t *>(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<uint8_t*>(toEncrypt.data()), toEncrypt.size(), &out_data, &out_size);
|
||||
physis_blowfish_encrypt(session, reinterpret_cast<uint8_t *>(toEncrypt.data()), toEncrypt.size(), &out_data, &out_size);
|
||||
|
||||
QByteArray encryptedArg = QByteArray::fromRawData(
|
||||
reinterpret_cast<const char*>(out_data), out_size);
|
||||
QByteArray encryptedArg = QByteArray::fromRawData(reinterpret_cast<const char *>(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<uint8_t *>(buffer), 9);
|
||||
Blowfish *session = physis_blowfish_initialize(reinterpret_cast<uint8_t *>(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<uint8_t*>(base64Decoded.data()), base64Decoded.size(), &out_data, &out_size);
|
||||
physis_blowfish_decrypt(session, reinterpret_cast<uint8_t *>(base64Decoded.data()), base64Decoded.size(), &out_data, &out_size);
|
||||
|
||||
QByteArray decrypted = QByteArray::fromRawData(
|
||||
reinterpret_cast<const char*>(out_data), out_size).trimmed();
|
||||
QByteArray decrypted = QByteArray::fromRawData(reinterpret_cast<const char *>(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))) {
|
||||
|
|
|
@ -4,22 +4,23 @@
|
|||
#include <cstdint>
|
||||
|
||||
#if defined(MACOS)
|
||||
#include <mach/mach_time.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <mach/mach_time.h>
|
||||
#include <sys/sysctl.h>
|
||||
#endif
|
||||
|
||||
#if defined(WIN32)
|
||||
#include <windows.h>
|
||||
#include <windows.h>
|
||||
#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 <ctime>
|
||||
|
||||
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
|
Loading…
Add table
Reference in a new issue