Guida [C++]Protezioni Base Server/Client

Stato
Discussione chiusa ad ulteriori risposte.

Undefined

Utente Silver
23 Ottobre 2016
110
10
18
60
Buonasera ragazzi,
dati i miliardi di messaggi che mi arrivano per aiuti ai source, più precisamente per "proteggere" i proprio game da molti hack, ho deciso di postare direttamente qui tutti i codici.

-Serverside-

Anti Wait Hack:

Aprire battle.cpp ed includere:
C++:
#include "db.h"

cercare bool IS_SPEED_HACK(LPCHARACTER ch, LPCHARACTER victim, DWORD current_time)
e modificarlo con:

C++:
#define ENABLE_SYSCHAT_NOTICE
#define ENABLE_SYSLOG_NOTICE
#define ENABLE_BAN_WAITHACK
bool IS_SPEED_HACK(LPCHARACTER ch, LPCHARACTER victim, DWORD current_time)
{
   if (ch->m_kAttackLog.dwVID == victim->GetVID())
   {
       if (current_time - ch->m_kAttackLog.dwTime < GET_ATTACK_SPEED(ch))
       {
           INCREASE_SPEED_HACK_COUNT(ch);

           if (test_server)
           {
               sys_log(0, "%s attack hack! time (delta, limit)=(%u, %u) hack_count %d",
                       ch->GetName(),
                       current_time - ch->m_kAttackLog.dwTime,
                       GET_ATTACK_SPEED(ch),
                       ch->m_speed_hack_count);

               ch->ChatPacket(CHAT_TYPE_INFO, "%s attack hack! time (delta, limit)=(%u, %u) hack_count %d",
                       ch->GetName(),
                       current_time - ch->m_kAttackLog.dwTime,
                       GET_ATTACK_SPEED(ch),
                       ch->m_speed_hack_count);
           }

           SET_ATTACK_TIME(ch, victim, current_time);
           SET_ATTACKED_TIME(ch, victim, current_time);
           return true;
       }
   }

   SET_ATTACK_TIME(ch, victim, current_time);

   if (victim->m_AttackedLog.dwPID == ch->GetPlayerID())
   {
       if (current_time - victim->m_AttackedLog.dwAttackedTime < GET_ATTACK_SPEED(ch))
       {
           INCREASE_SPEED_HACK_COUNT(ch);
           if (ch->m_speed_hack_count > 50)
           {
#ifdef ENABLE_SYSLOG_NOTICE
               sys_log(0, "%s Attack Speed HACK! time (delta, limit)=(%u, %u), hack_count = %d",
                       ch->GetName(),
                       current_time - victim->m_AttackedLog.dwAttackedTime,
                       GET_ATTACK_SPEED(ch),
                       ch->m_speed_hack_count);
#endif
#ifdef ENABLE_SYSCHAT_NOTICE
               ch->ChatPacket(CHAT_TYPE_INFO, "Attack Speed Hack(%s), (delta, limit)=(%u, %u), hack_count = %d",
                       ch->GetName(),
                       current_time - victim->m_AttackedLog.dwAttackedTime,
                       GET_ATTACK_SPEED(ch),
                       ch->m_speed_hack_count);
#endif               
#ifdef ENABLE_BAN_WAITHACK               
               std::auto_ptr<SQLMsg> msg(DBManager::instance().DirectQuery("UPDATE account.account SET status= 'BLOCK' WHERE id = %d", ch->GetDesc()->GetAccountTable().id));
#endif
               ch->GetDesc()->DelayedDisconnect(3);
           }
           
           SET_ATTACKED_TIME(ch, victim, current_time);
           return true;
       }
   }

   SET_ATTACKED_TIME(ch, victim, current_time);
   return false;
}

Anti Safezone:

In char_battle.cpp cercare:

C++:
bool CHARACTER::Attack(LPCHARACTER pkVictim, BYTE bType)
{
   if (test_server)
       sys_log(0, "[TEST_SERVER] Attack : %s type %d, MobBattleType %d", GetName(), bType, !GetMobBattleType() ? 0 : GetMobAttackRange());
   //PROF_UNIT puAttack("Attack");
   if (!CanMove())
       return false;

sotto aggiungere questo:

C++:
SECTREE    *sectree = NULL;
   SECTREE    *vsectree = NULL;
   sectree = GetSectree();
   vsectree = pkVictim->GetSectree();

   if (sectree && vsectree){
       if (sectree->IsAttr(GetX(), GetY(), ATTR_BANPK) || vsectree->IsAttr(pkVictim->GetX(), pkVictim->GetY(), ATTR_BANPK)) {
           if (GetDesc()) {
               LogManager::instance().HackLog("ANTISAFEZONE", this);
               GetDesc()->DelayedDisconnect(3);
           }
       }
   }

Anti Ghostmode:

Cercare in input_main.cpp;

C++:
if (!test_server)    //2012.05.15 ±è¿ë¿í : Å×¼·¿¡¼ (¹«Àû»óÅ·Î) ´Ù¼ö ¸ó½ºÅÍ »ó´ë·Î ´Ù¿îµÇ¸é¼ °ø°İ½Ã ÄŞº¸ÇÙÀ¸·Î Á×´Â ¹®Á¦°¡ ÀÖ¾ú´Ù.

e sotto aggiungere:

C++:
if (ch->IsPC() && ch->IsDead()) {
           if (ch->GetDesc()) {
               LogManager::instance().HackLog("GHOSTMODE", ch);
               ch->GetDesc()->DelayedDisconnect(3);
           }
       }

Anti Wallhack:

Cercare in input_main.cpp:

C++:
const float fDist = DISTANCE_SQRT((ch->GetX() - pinfo->lX) / 100, (ch->GetY() - pinfo->lY) / 100);

e sotto aggiungere:

C++:
PIXEL_POSITION pos = ch->GetXYZ();
       if (!SECTREE_MANAGER::instance().GetMovablePosition(ch->GetMapIndex(), pos.x, pos.y, pos)) {
           if (ch->GetDesc()) {
               LogManager::instance().HackLog("WALLHACK", ch);
               ch->GetDesc()->DelayedDisconnect(3);
           }
       }

Anti Long name generator:

Cercare in input_login.cpp:

C++:
if (true == g_BlockCharCreation)
   {
       d->Packet(&packFailure, sizeof(packFailure));
       return;
   }

e sotto aggiungere:

C++:
if (strlen(pinfo->name) > 12){
       d->Packet(&packFailure, sizeof(packFailure));
       return;
   }

Anti Mining Bot:

Cercare in char.cpp:

C++:
if (mining::GetRawOreFromLoad(chLoad->GetRaceNum()) == 0)
       return;

e sotto aggiungere:

C++:
if (GetMapIndex() != chLoad->GetMapIndex() || DISTANCE_APPROX(GetX() - chLoad->GetX(), GetY() - chLoad->GetY()) > 1000)
       return;

Anti Drophack

Cercare in char_item.cpp:

C++:
LPCHARACTER owner = funcFindOwnership.owner;

e sotto aggiungere:

C++:
if (!owner) {
               LogManager::instance().HackLog("DROPHACK", this);
               return false;
           }

Activate Anti Teleport Hack

Cercare in input_main.cpp:

C++:
if( false == LC_IsEurope() )
           {
               const PIXEL_POSITION & warpPos = ch->GetWarpPosition();

               if (warpPos.x == 0 && warpPos.y == 0)
                   LogManager::instance().HackLog("Teleport", ch); // ºÎÁ¤È®ÇÒ ¼ö ÀÖÀ½
           }

           sys_log(0, "MOVE: %s trying to move too far (dist: %.1fm) Riding(%d)", ch->GetName(), fDist, ch->IsRiding());

           ch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY(), ch->GetZ());
           ch->Stop();
           return;

e modificarlo con:

C++:
const PIXEL_POSITION & warpPos = ch->GetWarpPosition();

           if (warpPos.x == 0 && warpPos.y == 0)
               LogManager::instance().HackLog("Teleport", ch); // ºÎÁ¤È®ÇÒ ¼ö ÀÖÀ½

           sys_log(0, "MOVE: %s trying to move too far (dist: %.1fm) Riding(%d)", ch->GetName(), fDist, ch->IsRiding());

           ch->Show(ch->GetMapIndex(), ch->GetX(), ch->GetY(), ch->GetZ());
           ch->Stop();
           ch->GetDesc()->DelayedDisconnect(0);
           return;

-Clientside-

Attivazione Protezione Anti Injection Py

Cercare in EterPack/EterPackManager.cpp

C++:
bool CEterPackManager::GetFromFile(CMappedFile & rMappedFile, const char * c_szFileName, LPCVOID * pData)

cercare ancora sotto:

C++:
#ifndef _DEBUG
   //const char *pcExt = strchr(c_szFileName, '.');
   //if (pcExt &&
   //    _strnicmp(pcExt, ".py", 3) == 0 && // python ½ºÅ©¸³Æ® Áß
   //    stricmp(c_szFileName, "logininfo.py") != 0 && // ·Î±×ÀÎ Á¤º¸ ÆÄÀÏÀÌ ¾Æ´Ï°í
   //    strnicmp(c_szFileName, "locale", 6) != 0
   //    )
   //{
   //    return false;
   //}
#endif

e modificarlo in:

C++:
const char *pcExt = strchr(c_szFileName, '.');
   if (_strnicmp(pcExt, ".py", 3) == 0){
       ExitProcess(0);
   }

Spero vi siano utili, se avete altre protezioni da aggiungere segnalatemele in questo thread e verranno aggiunte.

Codici presi su mt2dev.
 
  • Mi piace
Reazioni: MentaLL
lavoro copia e incolla su un'altro sito noto a chi lavora alla source.
Peccato che questi sistemi a volte sono rilevati come falsi positivi e di conseguenza inutili.
per renderli efficaci bisogna modificarlo il codice, cosi a volte vieni bannato diretto dal server (testati).
 
lavoro copia e incolla su un'altro sito noto a chi lavora alla source.
Peccato che questi sistemi a volte sono rilevati come falsi positivi e di conseguenza inutili.
per renderli efficaci bisogna modificarlo il codice, cosi a volte vieni bannato diretto dal server (testati).
Che sono stati presi da un'altro sito è già stato da me scritto quindi trovo un pò inutile questo commento.

Ho testato personalmente tutti i codici e sinceramente non mi ha dato nessuno dei tuoi errori, se magari ci illumini ti ringrazierei.
 
Si ma inforge non è fatto per un copy paste, questo ti fa capire la utilitá del mio commento.
Secondo ho testato sul mio server e se vuoi fallo anche te.
Teleportarti, expa e fai tutto quello che devi fare, apri db dove come citato nel codice vai rispettivamente a quella tabella e vedrai che senza usare hack te li rileva.
In più alcuni di essi ti permabannano account.
Fortunatamente ho risolto sul mio server.
 
Codice:
               if (warpPos.x == 0 && warpPos.y == 0)
                   LogManager::instance().HackLog("Teleport", ch); // ºÎÁ¤È®ÇÒ ¼ö ÀÖÀ½
           }

LOL
 
Si ma inforge non è fatto per un copy paste, questo ti fa capire la utilitá del mio commento.
Secondo ho testato sul mio server e se vuoi fallo anche te.
Teleportarti, expa e fai tutto quello che devi fare, apri db dove come citato nel codice vai rispettivamente a quella tabella e vedrai che senza usare hack te li rileva.
In più alcuni di essi ti permabannano account.
Fortunatamente ho risolto sul mio server.
Fino ad ora nessun errore, vi aggiornerò
 
Ma invece di dire l'errore, aiutare la community e così da avere un buon lavoro postato, si può sapere perchè rompi i *******i?
@Agator95 commenti screditando per cosa? A che pro?

Boh.
 
I codici sono sicuramente un copia e incolla, come ha già descritto l'autore quindi fin qui nessun problema. Non penso che inforge sia una community dove è vietato il Copia-Incolla anzi, è una community che offre risorse gratuite a chiunque voglia imparare. Visto che non ha messo alcun prezzo a questi codici, non vedo il problema. Complimenti bravo, poi se qualcuno saprà migliorarli saremo felicissimi di farci illuminare.
 
I codici sono sicuramente un copia e incolla, come ha già descritto l'autore quindi fin qui nessun problema. Non penso che inforge sia una community dove è vietato il Copia-Incolla anzi, è una community che offre risorse gratuite a chiunque voglia imparare. Visto che non ha messo alcun prezzo a questi codici, non vedo il problema. Complimenti bravo, poi se qualcuno saprà migliorarli saremo felicissimi di farci illuminare.
Grazie, io li ho postati solo per renderli noti a chi li cerca e non sa dove possa recuperarli, li ho postati per voi non per me, è un copia e incolla verissimo ma di certo non ho detto che si tratta di miei codici.
Purtoppo InForge attualmente è molto indietro con le release su Metin2, anche gli stranieri adottano il metodo del copia e incolla ma la differenza è enorme, li gli utenti ringraziano solo, poi se ho sbagliato chiedo venia.
Mi piacerebbe che InForge ritornasse ai tempi d'oro, io lo seguo da anni, solo questo.
 
Ma invece di dire l'errore, aiutare la community e così da avere un buon lavoro postato, si può sapere perchè rompi i *******i?
@Agator95 commenti screditando per cosa? A che pro?

Boh.
ho gia detto che a volte pensa che stai usando hack e ti banna da solo.
dire l'errore? no caro, la pappa pronta non te la fornisco gratis. per gente come te che su questa community nessuno posta e regala, se postate roba copy paste come l'autore del topic non immagino che cosa siete in grado di fare di vostro..
 
@Agator95 pappa bella e pronta?
Quando io facevo server di metin2 tu nemmeno conoscevi CheatForge!

Ormai non faccio e studio più i server da anni!

Io parlo solo a livello umano, se commenti, solo per rompere le palle, non ha senso.
Se commenti (essendo che ti reputi un esperto in materia) o aiuti, o puoi benissimo chiudere facendoti una risata sulla "nabbagine" (permettimi il termine) del lavoro che hai letto, ma senza rompere i *******i a chi invece (seppur copy come lo chiami tu) posta ancora in questa community.
Non parlare se non conosci le persone please
 
You have installed that code
http://prntscr.com/hthatu

I made a compail for the server But the snail did not work And this syserr
********************************************************
SYSERR: Dec 28 21:20:36.998486 :: pid_init:
Start of pid: 3503
*********************************************************

Is there a solution?
 
Stato
Discussione chiusa ad ulteriori risposte.