diff options
| author | auth <[email protected]> | 2020-07-11 23:19:24 +0200 |
|---|---|---|
| committer | auth <[email protected]> | 2020-07-11 23:19:24 +0200 |
| commit | 883aafaf87ec22aa4c9142ac5c836040a0f531b4 (patch) | |
| tree | 38a73a202d815719991efeecfd3769dea7d20984 /server | |
| parent | Added blacklist implementation on server. (diff) | |
| download | loader-883aafaf87ec22aa4c9142ac5c836040a0f531b4.tar.xz loader-883aafaf87ec22aa4c9142ac5c836040a0f531b4.zip | |
Small changes.
Diffstat (limited to 'server')
| -rw-r--r-- | server/src/client/blacklist.h | 6 | ||||
| -rw-r--r-- | server/src/client/client.cpp | 4 | ||||
| -rw-r--r-- | server/src/image/pe.h | 3 | ||||
| -rw-r--r-- | server/src/main.cpp | 74 | ||||
| -rw-r--r-- | server/src/server/packet.h | 15 | ||||
| -rw-r--r-- | server/src/server/server.cpp | 12 | ||||
| -rw-r--r-- | server/src/util/io.cpp | 1 |
7 files changed, 69 insertions, 46 deletions
diff --git a/server/src/client/blacklist.h b/server/src/client/blacklist.h index ea9e261..397dc6c 100644 --- a/server/src/client/blacklist.h +++ b/server/src/client/blacklist.h @@ -47,6 +47,12 @@ public: return true; } } + + for(auto &item : m_data["hwids"]) { + if(item.get<std::string>() == key) { + return true; + } + } return false; } }; diff --git a/server/src/client/client.cpp b/server/src/client/client.cpp index 1163ab5..9b46574 100644 --- a/server/src/client/client.cpp +++ b/server/src/client/client.cpp @@ -19,7 +19,7 @@ bool tcp::client::init_ssl(SSL_CTX* server_ctx) { if (ret <= 0) { int err = SSL_get_error(m_ssl, ret); - io::logger->error("{} failed to accept ssl, return code {}", m_ip, + io::logger->error("{} failed to accept ssl, return code {}.", m_ip, err); return false; } @@ -42,7 +42,7 @@ int tcp::client::stream(std::vector<char>& data, float *dur/*= nullptr*/) { auto size = data.size(); auto networked_size = htonl(size); - int a = write(&networked_size, sizeof(networked_size)); + write(&networked_size, sizeof(networked_size)); // with 4kb chunk size, speed peaks at 90mb/s without enc // speed is at ~75mb/s with xor diff --git a/server/src/image/pe.h b/server/src/image/pe.h index 7243262..c642672 100644 --- a/server/src/image/pe.h +++ b/server/src/image/pe.h @@ -30,6 +30,7 @@ class image { public: image(const std::string_view name) : m_image{nullptr} { if (!io::read_file(name, m_buffer)) { + io::logger->error("failed to load image {}.", name); return; } @@ -46,7 +47,7 @@ class image { void reload(const std::string_view name) { io::read_file(name, m_buffer); if (m_buffer.empty()) { - io::logger->error("failed to reload image {}", name); + io::logger->error("failed to reload image {}.", name); return; } diff --git a/server/src/main.cpp b/server/src/main.cpp index 6628712..779b610 100644 --- a/server/src/main.cpp +++ b/server/src/main.cpp @@ -9,14 +9,10 @@ constexpr std::string_view version{"0.1.0"}; int main(int argc, char* argv[]) { io::init(false); - // pe::image image("test.dll"); - tcp::server client_server("6666"); client_server.start(); - // client_server.bl().add({"127.0.0.1", "qsmdlkjqsdmlkqmdsl"}); - client_server.connect_event.add([&](tcp::client& client) { auto ip = client.get_ip(); @@ -24,7 +20,7 @@ int main(int argc, char* argv[]) { client.gen_session(); client.write(tcp::packet_t(version, tcp::packet_type::write, client(), - tcp::packet_action::session)); + tcp::packet_id::session)); }); client_server.disconnect_event.add([&](tcp::client& client) { @@ -33,45 +29,55 @@ int main(int argc, char* argv[]) { auto it = std::find_if( client_server().begin(), client_server().end(), [&](tcp::client& c) { return c.get_socket() == client.get_socket(); }); - - client_server().erase(it); + + if (it != client_server().end()) { + client_server().erase(it); + } io::logger->info("{} disconnected.", client.get_ip()); }); - client_server.receive_event.add( - [&](tcp::packet_t& packet, tcp::client& client) { - auto session = client(); - auto packet_session = packet.session_id; - auto ip = client.get_ip(); - auto message = packet(); - auto action = packet.act; + client_server.receive_event.add([&](tcp::packet_t& packet, + tcp::client& client) { + auto session = client(); + auto packet_session = packet.session_id; + auto ip = client.get_ip(); + auto message = packet(); + auto id = packet.id; + + if (!packet) { + io::logger->warn("{} sent invalid packet.", ip); + + // client_server.disconnect_event.call(client); + return; + } - if (!packet) { - io::logger->info("{} sent invalid packet.", ip); + if (packet_session != session) { + io::logger->warn("{} sent wrong session id.", ip); - //client_server.disconnect_event.call(client); - return; - } + // client_server.disconnect_event.call(client); + return; + } - if (packet_session != session) { - io::logger->info("{} sent wrong session id.", ip); - io::logger->info("{} : {}", packet_session, session); + io::logger->info("{} : {}", packet_session, message); - //client_server.disconnect_event.call(client); - return; - } + if (id == tcp::packet_id::hwid) { + client.hwid = message; - io::logger->info("{} : {}", packet_session, message); + // client_server.bl().add({ip, message}); - if (action == tcp::packet_action::hwid) { - client.hwid = message; + io::logger->info("got hwid from {} : {}", ip, message); - io::logger->info("got hwid from {} : {}", ip, message); - } + if (client_server.bl().find(message)) { + io::logger->warn("{} is hwid banned.", ip); - client.write(tcp::packet_t(message, tcp::packet_type::write, session)); - }); + client_server.disconnect_event.call(client); + return; + } + } + + client.write(tcp::packet_t(message, tcp::packet_type::write, session)); + }); client_server.timeout_event.add([&](tcp::client& client) { client.cleanup(); @@ -80,7 +86,9 @@ int main(int argc, char* argv[]) { client_server().begin(), client_server().end(), [&](tcp::client& c) { return c.get_socket() == client.get_socket(); }); - client_server().erase(it); + if (it != client_server().end()) { + client_server().erase(it); + } io::logger->info("{} timed out.", client.get_ip()); }); diff --git a/server/src/server/packet.h b/server/src/server/packet.h index 279d140..261109d 100644 --- a/server/src/server/packet.h +++ b/server/src/server/packet.h @@ -9,17 +9,17 @@ constexpr size_t message_len = 512; enum packet_type : int { write = 0, read }; -enum packet_action : uint8_t { message = 0, hwid = 1, session }; +enum packet_id : int { message = 0, hwid, session }; struct packet_t { std::string message; std::string session_id; - uint8_t act; + int id; packet_t() {} packet_t(const std::string_view msg, const packet_type &type, std::string_view session = "", - const packet_action &action = packet_action::message) { + const packet_id &action = packet_id::message) { if (type == read) { message = msg; enc::decrypt_message(message); @@ -30,12 +30,13 @@ struct packet_t { } auto json = nlohmann::json::parse(message); - message = json["message"]; + id = json["id"]; session_id = json["session_id"]; - act = json["action"]; + message = json["message"]; + } else { nlohmann::json json; - json["action"] = action; + json["id"] = action; json["session_id"] = session; json["message"] = msg.data(); @@ -49,7 +50,7 @@ struct packet_t { ~packet_t() { message.clear(); session_id.clear(); - act = -1; + id = -1; } operator bool() const { return !message.empty() && !session_id.empty(); } diff --git a/server/src/server/server.cpp b/server/src/server/server.cpp index 2d4cafe..91176e1 100644 --- a/server/src/server/server.cpp +++ b/server/src/server/server.cpp @@ -17,6 +17,14 @@ void tcp::server::start() { io::logger->critical("failed to create socket."); return; } + + int enable = 1; + int ret = setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(enable)); + if (ret < 0) { + io::logger->critical("failed to set socket option."); + return; + } + struct addrinfo hints, *addrinfo = nullptr; memset(&hints, 0, sizeof hints); @@ -26,7 +34,7 @@ void tcp::server::start() { hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = AI_PASSIVE; - int ret = getaddrinfo(nullptr, m_port.data(), &hints, &addrinfo); + ret = getaddrinfo(nullptr, m_port.data(), &hints, &addrinfo); if (ret != 0) { io::logger->critical("failed to get address info."); close(m_socket); @@ -72,7 +80,7 @@ tcp::select_status tcp::server::peek() { const int ret = select(maxfd + 1, &m_server_set, nullptr, nullptr, &tv); if (ret < 0) { - io::logger->error("select error : {}", strerror(errno)); + io::logger->error("select error : {}.", strerror(errno)); return tcp::select_status::error; } diff --git a/server/src/util/io.cpp b/server/src/util/io.cpp index d23cdda..8d74cd4 100644 --- a/server/src/util/io.cpp +++ b/server/src/util/io.cpp @@ -25,7 +25,6 @@ void io::init(const bool& to_file) { bool io::read_file(const std::string_view name, std::vector<char>& out) { std::ifstream file(name.data()); if (!file.good()) { - io::logger->error("failed to load {}.", name.data()); return false; } |