From 0c061dc47d01ed0069efe1f3adcc0325b375ab36 Mon Sep 17 00:00:00 2001 From: simplxs Date: Tue, 2 Jul 2024 15:28:31 +0800 Subject: [PATCH] auto detect version --- load.js | 11 ++++++----- src/main.cpp | 39 +++++++++++++++++++++++++++++++++++++-- src/sign.cpp | 6 ------ 3 files changed, 43 insertions(+), 13 deletions(-) diff --git a/load.js b/load.js index 18b7f0f..aa0172c 100644 --- a/load.js +++ b/load.js @@ -4,15 +4,16 @@ const os = require('node:os'); const exePath = path.dirname(process.execPath); let QQWrapper, appid, qua; -const qqPkgInfo = require(path.join(exePath, "resources/app/package.json")); if (os.platform() === "win32") { - QQWrapper = require(path.join(exePath, "resources/app/versions", qqPkgInfo.version, "wrapper.node")); - appid = "537213803"; - qua = `V1_WIN_NQ_${qqPkgInfo.version.replace("-", "_")}_GW_B`; + const versionConfig = require(path.join(exePath, "resources/app/versions/config.json")); + QQWrapper = require(path.join(exePath, "resources/app/versions", versionConfig.curVersion, "wrapper.node")); + appid = "537226655"; // 9.9.12-25234 + qua = `V1_WIN_NQ_${versionConfig.curVersion.replace("-", "_")}_GW_B`; } else { + const qqPkgInfo = require(path.join(exePath, "resources/app/package.json")); QQWrapper = require(path.join(exePath, "resources/app/wrapper.node")); - appid = "537213827"; + appid = "537226441"; qua = qqPkgInfo.qua; } diff --git a/src/main.cpp b/src/main.cpp index f5bd911..5ff0b0d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -13,19 +13,54 @@ void init() { #if defined(_WIN_PLATFORM_) std::string version = "9.9.12-25234"; + try + { + std::ifstream versionConfig("resources\\app\\versions\\config.json"); + if (versionConfig.is_open()) + { + std::string versionConfigStr; + versionConfig >> versionConfigStr; + versionConfig.close(); + rapidjson::Document doc; + doc.Parse(versionConfigStr.c_str(), versionConfigStr.size()); + if (doc.HasMember("curVersion") && doc["curVersion"].IsString()) + version = doc["curVersion"].GetString(); + } + } + catch (const std::exception &e) + { + std::cerr << e.what() << '\n'; + } #elif defined(_MAC_PLATFORM_) std::string version = "6.9.19-16183"; #elif defined(_LINUX_PLATFORM_) std::string version = "3.2.9-24815"; + try + { + std::ifstream versionConfig("/opt/QQ/resources/app/package.json"); + if (versionConfig.is_open()) + { + std::string versionConfigStr; + versionConfig >> versionConfigStr; + versionConfig.close(); + rapidjson::Document doc; + doc.Parse(versionConfigStr.c_str(), versionConfigStr.size()); + if (doc.HasMember("version") && doc["version"].IsString()) + version = doc["version"].GetString(); + } + } + catch (const std::exception &e) + { + std::cerr << e.what() << '\n'; + } #endif std::string ip = "0.0.0.0"; int port = 8080; - std::string default_config = R"({"ip":"0.0.0.0","port":8080})"; rapidjson::Document doc; - + std::ifstream configFile("sign.json"); if (!configFile.is_open()) { diff --git a/src/sign.cpp b/src/sign.cpp index 23d5562..c7b1887 100644 --- a/src/sign.cpp +++ b/src/sign.cpp @@ -84,9 +84,7 @@ bool Sign::Init(const std::string &version) #if defined(_WIN_PLATFORM_) HMODULE wrapperModule = GetModuleHandleW(L"wrapper.node"); if (wrapperModule == NULL) - { throw std::runtime_error("Can't find wrapper.node module"); - } HookAddress = reinterpret_cast(wrapperModule) + addrMap[version]; printf("HookAddress: %llx\n", HookAddress); #elif defined(_MAC_PLATFORM_) @@ -113,9 +111,7 @@ bool Sign::Init(const std::string &version) } while ((pmap = pmap->next()) != nullptr); #endif if (HookAddress == 0) - { throw std::runtime_error("Can't find hook address"); - } SignFunction = reinterpret_cast(HookAddress); return true; } @@ -123,9 +119,7 @@ bool Sign::Init(const std::string &version) std::tuple Sign::Call(const std::string_view cmd, const std::string_view src, int seq) { if (SignFunction == nullptr) - { throw std::runtime_error("Sign function not initialized"); - } const std::vector signArgSrc = Hex2Bin(src);