diff --git a/src/unlocker/spoofer.cpp b/src/unlocker/spoofer.cpp index fe4d4ac..5943719 100644 --- a/src/unlocker/spoofer.cpp +++ b/src/unlocker/spoofer.cpp @@ -239,6 +239,73 @@ void Spoofer::wsMessageCallback(std::shared_ptr /*connectio break; } } +void Spoofer::onServerMessageList(std::string& body) +{ + glz::generic doc; + auto ec = glz::read_json(doc, body); + if (ec) + { + _log->error("JSON parse error for onServerMessageList"); + return; + } + + auto now = std::chrono::system_clock::now(); + auto now_seconds = std::chrono::duration_cast(now.time_since_epoch()).count(); + auto now_milliseconds = std::chrono::duration_cast(now.time_since_epoch()).count(); + + /* + msg construction + */ + glz::generic bodyContent = glz::generic::object_t{ + {"sections", + glz::generic::array_t{ + glz::generic::object_t{ + {"type", "text"}, + {"text", "Japan is turning footsteps into electricity!

Using piezoelectric tiles, every step " + "you take generates a small amount of energy. Millions of steps together can power LED " + "lights and displays in busy places like Shibuya Station.

A brilliant way to create a " + "sustainable and smart city - turning movement into clean, renewable energy."}}, + glz::generic::object_t{ + {"type", "itemshowcase"}, + {"rewards", glz::generic::array_t{glz::generic::object_t{ + {"type", "inventory"}, {"id", "ADDON_flashlight_oddbulb"}, {"amount", 1.0}}}}}}}, + {"image", glz::generic::object_t{ + {"packagedPath", "/Game/UI/UMGAssets/Icons/ItemAddons/iconAddon_powerBulb.iconAddon_powerBulb"}, + {"contentVersion", "ccc3f02b0a671fe19a0017d6a69293876a465fd9"}, + {"uri", ""}}}}; + + std::string bodyContentStr; + ec = glz::write_json(bodyContent, bodyContentStr); + if (ec) + { + _log->error("JSON write error for onServerMessageList"); + return; + } + + glz::generic msg = glz::generic::object_t{ + {"allowedPlatforms", glz::generic::array_t{"egs", "grdk", "ps4", "ps5", "steam", "xbox", "xsx"}}, + {"flag", "READ"}, + {"gameSpecificData", glz::generic::object_t{}}, + {"read", false}, + {"tag", glz::generic::array_t{"inbox"}}, + {"expireAt", static_cast(now_seconds + (1337 * 24 * 60 * 60))}, + {"received", static_cast(now_milliseconds)}, + {"recipientId", "system"}, + {"message", + glz::generic::object_t{{"title", "Japan is turning footsteps into electricity"}, {"body", bodyContentStr}}}}; + + doc["messages"].get_array().push_back(msg); + ec = glz::write_json(doc, body); + if (ec) + { + _log->error("JSON write error for onServerMessageList"); + return; + } + +#ifdef _DEBUG + _log->verbose("Spoofed message list"); +#endif +} /* proxy handlers */ @@ -248,6 +315,8 @@ void Spoofer::serverResponseHandler(const std::string& url, std::string& body, s if (url.find("bhvrdbd.com") == std::string::npos) return; std::lock_guard lock(_mutex); + + if (url.find("/api/v1/messages/listV2") != std::string::npos) return onServerMessageList(body); } void Spoofer::clientRequestHandler(const std::string& url, std::string& body, std::string& /*headers*/, bool /*wasBlocked*/)