Cheie de securitate [C++]

Aici poți găsi sisteme complete, verificate și recomandate de echipa 4Metin.
Avatar utilizator
Loud
Tehnic
Tehnic
Mesaje: 263
Membru din: Mar Oct 18, 2022 12:48 pm
Localitate: Underwater
Status: Activ
Multumiri acordate: 2
Multumiri primite: 53
Contact:

Cheie de securitate [C++]

Mesaj de Loud »

Recent am reusit sa fac o cheie de securitate extra pentru voi.

Mai jos va voi lasa tot fisierul scris in totalitate de mine! Succes!

Clientii de genul ma fac sa renunt :D

Implementarea sistemului Extra Security Key pentru protejarea clientului presupune adaugarea unei chei unice in codul clientului si serverului, astfel incat doar clientul autentic sa se poata conecta. Aceasta metoda previne utilizarea clientilor modificati sau neautorizati.

Acest sistem adaugă o cheie de securitate suplimentară în pachetul de login, permițând serverului să verifice versiunea clientului și să blocheze conexiunile de la versiuni neautorizate. Implementarea necesită cunoștințe de programare în C++.

1. Cum functioneaza Extra Security Key?

Se introduce o cheie secreta in client si server.

La autentificare, clientul trimite aceasta cheie catre server.

Serverul verifica cheia; daca nu corespunde, respinge conexiunea.

In cazul unui client modificat, conexiunea este blocata automat.

2. Pasi pentru implementare

Pasul 1: Adaugarea cheii in client (Python)

Deschide fisierul root/uiscript/networkmodule.py sau game.py, unde se trimite pachetul de autentificare.

Adauga urmatoarea linie in metoda de login:

Cod: Selectaţi tot

import app

def SendLoginPacket(self, id, pwd):
    security_key = "MY_SECRET_KEY_12345"
    self.stream.popupWindow.Close()
    self.stream.SetLoginInfo(id, pwd)
    self.stream.SetSecurityKey(security_key)  # Adauga cheia de securitate
    self.stream.Connect()
Salveaza modificarile si reimpacheteaza fisierele utilizand EterNexus sau un alt packer.

Pasul 2: Adaugarea verificarii pe server (C++)

Deschide fisierul sursa al serverului: input_main.cpp (din Srcs/Game) si gaseste functia de login:

Cod: Selectaţi tot

bool CInputMain::Login(LPCHARACTER ch, const char* c_pszLogin, const char* c_pszPwd)
Adauga o verificare pentru cheia de securitate:

Cod: Selectaţi tot

const char* security_key = "MY_SECRET_KEY_12345"; // Aceeasi cheie ca in client

if (strcmp(ch->GetSecurityKey(), security_key) != 0)
{
    sys_log(0, "Conexiune respinsa: Cheia de securitate este invalida!");
    return false;
}
Salveaza modificarile si compileaza serverul.

Pasul 3: Adaugarea cheii in packet header (protocol de comunicare)

Pentru a trimite cheia in pachetele de login, trebuie sa adaugi o variabila noua in structura pachetelor.

Deschide fisierul packet.h din sursa serverului si adauga:

Cod: Selectaţi tot

typedef struct SPacketLogin
{
    char szID[25];
    char szPW[25];
    char szSecurityKey[50]; // Adaugarea cheii de securitate
} TPacketCGLogin;
In partea clientului, in fisierul packet.h, asigura-te ca aceeasi structura este definita.

Pasul 4: Blocarea accesului fara cheie

In fisierul de configurare al serverului config, poti adauga o verificare simpla pentru conexiuni neautorizate:

Cod: Selectaţi tot

SECURITY_KEY=MY_SECRET_KEY_12345
In codul sursa, la citirea config-ului, verifica cheia:

Cod: Selectaţi tot

char szConfigKey[50];
ConfigReadString("SECURITY_KEY", szConfigKey, sizeof(szConfigKey));

if (strcmp(szConfigKey, security_key) != 0)
{
    sys_err("Conexiune invalida: cheia de securitate nu corespunde!");
    return false;
}
3. Testarea sistemului

Pornirea serverului si verificarea logurilor pentru mesaje de securitate.

Conectarea folosind clientul modificat.

Incercarea de a folosi un client diferit – ar trebui sa fie respins.

4. Avantaje si limitari

Avantaje:

Protejeaza impotriva clientilor modificati sau neautorizati.

Usor de implementat si personalizat.

Fara costuri suplimentare.

Limitari:

Daca cineva are acces la fisierele clientului, poate extrage cheia.

Poate fi evitata prin atacuri de tip "man-in-the-middle" daca nu se foloseste criptare.
Scrie răspuns