diff options
Diffstat (limited to 'client/src/main.cpp')
| -rw-r--r-- | client/src/main.cpp | 151 |
1 files changed, 96 insertions, 55 deletions
diff --git a/client/src/main.cpp b/client/src/main.cpp index 71a064f..8737196 100644 --- a/client/src/main.cpp +++ b/client/src/main.cpp @@ -7,19 +7,37 @@ #include "injection/mapper.h" #include "hwid/hwid.h" #include "util/apiset.h" +#include "security/security.h" int main(int argc, char* argv[]) { tcp::client client; - std::thread t{ tcp::client::monitor, std::ref(client) }; - t.detach(); - - std::thread t1{ mmap::thread, std::ref(client) }; + std::thread sec_thread{ security::thread, std::ref(client) }; + sec_thread.join(); client.start("127.0.0.1", 6666); + if (!client) { + io::log_error("failed to start client."); + + io::log("press enter..."); + + std::cin.get(); + + return 0; + } + client.connect_event.add([&]() { io::log("connected."); }); + std::thread t{ tcp::client::monitor, std::ref(client) }; + t.detach(); + + std::thread mapper_thread{ mmap::thread, std::ref(client) }; + mapper_thread.detach(); + + /*std::thread sec_thread{ security::thread, std::ref(client) }; + sec_thread.detach();*/ + client.receive_event.add([&](tcp::packet_t& packet) { if (!packet) return; auto message = packet(); @@ -28,20 +46,23 @@ int main(int argc, char* argv[]) { if (id == tcp::packet_id::session) { client.session_id = packet.session_id; - tcp::version_t v{ 0, 1, 0 }; - auto version = fmt::format("{}.{}.{}", v.major, v.minor, v.patch); - io::log("current server version {}.", message); + uint16_t ver{0}; + for (int i = 0; i < message.size(); ++i) { + if (i % 2) { // skip characters in between + continue; + } + + ver += static_cast<uint8_t>(message[i]) << 5; + } - if (version != message) { + if (client.ver != ver) { io::log_error("please update your client."); client.shutdown(); return; } auto hwid = hwid::fetch(); - int ret = - client.write(tcp::packet_t(hwid, tcp::packet_type::write, - client.session_id, tcp::packet_id::hwid)); + int ret = client.write(tcp::packet_t(hwid, tcp::packet_type::write, client.session_id, tcp::packet_id::hwid)); if (ret <= 0) { io::log_error("failed to send hwid."); client.shutdown(); @@ -81,12 +102,12 @@ int main(int argc, char* argv[]) { if (res == tcp::login_result::login_success) { auto games = j["games"]; for (auto& [key, value] : games.items()) { - std::string version = value["version"]; + uint8_t version = value["version"]; std::string process = value["process"]; uint8_t id = value["id"]; bool x64 = value["x64"]; - client.games.emplace_back(game_data_t{ key, version, process, x64, id }); + client.games.emplace_back(game_data_t{ x64, id, version, key, process }); } io::log("logged in."); @@ -125,64 +146,84 @@ int main(int argc, char* argv[]) { io::log("{}:{}->{} {}", packet.seq, packet.session_id, message, id); }); - while (client) { - if (client.state == tcp::client_state::idle) { - std::string u; - getline(std::cin, u); + std::string u; + getline(std::cin, u); - std::string p; - getline(std::cin, p); + std::string p; + getline(std::cin, p); - if (client.state == tcp::client_state::logged_in) - continue; + auto l = fmt::format("{},{}", u, p); - auto l = fmt::format("{},{}", u, p); + int ret = client.write(tcp::packet_t(l, tcp::packet_type::write, + client.session_id, + tcp::packet_id::login_req)); - int ret = client.write(tcp::packet_t(l, tcp::packet_type::write, - client.session_id, - tcp::packet_id::login_req)); + if (ret <= 0) { + io::log_error("failed to send login req packet."); + client.shutdown(); - if (ret <= 0) { - client.shutdown(); - break; - } + io::log("press enter..."); + + std::cin.get(); + + return 0; + } + + while (client.state != tcp::client_state::logged_in) { + if (!client) { + io::log("press enter..."); + + std::cin.get(); + + return 0; } - if (client.state == tcp::client_state::logged_in) { - for (auto& dat : client.games) { - io::log("[{}]{} : {}", dat.id, dat.name, dat.version); - } + std::this_thread::sleep_for(std::chrono::seconds(1)); + } - io::log("please select a game :"); + for (auto& dat : client.games) { + io::log("[{}]{} : {}", dat.id, dat.name, dat.version); + } - int id; - std::cin >> id; + io::log("please select a game :"); - auto it = std::find_if(client.games.begin(), client.games.end(), [&](game_data_t& dat) { - return dat.id == id; - }); - client.selected_game = *it; + int id; + std::cin >> id; + std::cin.ignore(); - nlohmann::json j; - j["id"] = client.selected_game.process_name; - j["x64"] = client.selected_game.x64; + auto it = std::find_if(client.games.begin(), client.games.end(), [&](game_data_t& dat) { + return dat.id == id; + }); + client.selected_game = *it; - int ret = client.write(tcp::packet_t(j.dump(), tcp::packet_type::write, - client.session_id, - tcp::packet_id::game_select)); + nlohmann::json j; + j["id"] = client.selected_game.process_name; + j["x64"] = client.selected_game.x64; - if (ret <= 0) { - client.shutdown(); - break; - } + ret = client.write(tcp::packet_t(j.dump(), tcp::packet_type::write, + client.session_id, + tcp::packet_id::game_select)); - client.state = tcp::client_state::waiting; - break; - } + if (ret <= 0) { + io::log_error("failed to send game select packet."); + client.shutdown(); + + io::log("press enter..."); + + std::cin.get(); + + return 0; } - t1.join(); + client.state = tcp::client_state::waiting; + + while (client) { + std::this_thread::sleep_for(std::chrono::seconds(5)); + } + + io::log("press enter..."); std::cin.get(); - std::cin.get(); + + return 0; } |