aboutsummaryrefslogtreecommitdiff
path: root/client/src/main.cpp
diff options
context:
space:
mode:
authorauth12 <[email protected]>2020-08-01 11:15:55 -0700
committerauth12 <[email protected]>2020-08-01 11:15:55 -0700
commit5bbda279685f52693d4f5d9cb1500e295e06fc1e (patch)
tree87cc4aa993afe879f8b5dffbbe7013dcf8e5dc44 /client/src/main.cpp
parentAdded server support for both x64 and x32 images with automatic selection. (diff)
downloadloader-5bbda279685f52693d4f5d9cb1500e295e06fc1e.tar.xz
loader-5bbda279685f52693d4f5d9cb1500e295e06fc1e.zip
Started security.
Diffstat (limited to 'client/src/main.cpp')
-rw-r--r--client/src/main.cpp151
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;
}