diff --git a/include/Network/network.h b/include/Network/network.h index bc64566..7481771 100644 --- a/include/Network/network.h +++ b/include/Network/network.h @@ -17,6 +17,7 @@ extern std::string UlStatus; extern std::string ListOfMods; void UDPSend(std::string Data); int KillSocket(uint64_t Dead); +void ClosePublic(); void CoreNetwork(); void GameSend(std::string Data); void SendLarge(std::string Data); diff --git a/include/Security/Init.h b/include/Security/Init.h index bbb7727..504ca8a 100644 --- a/include/Security/Init.h +++ b/include/Security/Init.h @@ -6,7 +6,7 @@ void PreGame(int argc, char* argv[],const std::string& GamePath); void InitGame(const std::string& Dir,const std::string&Current); std::string CheckVer(const std::string &path); +void FindDLL(const std::string& Name); void SecurityCheck(char* argv[]); -void FindDLL(char* args[]); std::string GetGameDir(); void LegitimacyCheck(); diff --git a/src/Logger.cpp b/src/Logger.cpp index c403928..0aff62e 100644 --- a/src/Logger.cpp +++ b/src/Logger.cpp @@ -66,12 +66,9 @@ void warn(const std::string& toPrint){ addToLog(Print); } void error(const std::string& toPrint) { - static int ECounter = 0; std::string Print = getDate() + Sec("[ERROR] ") + toPrint + "\n"; std::cout << Print; addToLog(Print); - if(ECounter > 10)exit(7); - ECounter++; } void except(const std::string& toPrint) { std::string Print = getDate() + Sec("[EXCEP] ") + toPrint + "\n"; diff --git a/src/Network/Core.cpp b/src/Network/Core.cpp index 589ee77..d7b9416 100644 --- a/src/Network/Core.cpp +++ b/src/Network/Core.cpp @@ -227,7 +227,7 @@ void CoreMain() { int Handle(EXCEPTION_POINTERS *ep){ char* hex = new char[100]; sprintf_s(hex,100, "%lX", ep->ExceptionRecord->ExceptionCode); - except(Sec("(Core) Code : ") + std::string(hex)); + except(Sec("(Core) ") + std::string(hex)); delete [] hex; return 1; } diff --git a/src/Network/GlobalHandler.cpp b/src/Network/GlobalHandler.cpp index c9b9145..bb13fbb 100644 --- a/src/Network/GlobalHandler.cpp +++ b/src/Network/GlobalHandler.cpp @@ -90,12 +90,7 @@ void ServerSend(std::string Data, bool Rel){ } } -void NetReset(){ - TCPTerminate = false; - GConnected = false; - Terminate = false; - UlStatus = Sec("Ulstart"); - MStatus = " "; +void ClosePublic(){ if(UDPSock != (SOCKET)(-1)){ debug(Sec("Terminating UDP Socket : ") + std::to_string(TCPSock)); KillSocket(UDPSock); @@ -106,6 +101,15 @@ void NetReset(){ KillSocket(TCPSock); } TCPSock = -1; +} + +void NetReset(){ + TCPTerminate = false; + GConnected = false; + Terminate = false; + UlStatus = Sec("Ulstart"); + MStatus = " "; + ClosePublic(); if(GSocket != (SOCKET)(-1)){ debug(Sec("Terminating GTCP Socket : ") + std::to_string(GSocket)); KillSocket(GSocket); diff --git a/src/Security/DLL.cpp b/src/Security/DLL.cpp index cb7dd6b..eca5f30 100644 --- a/src/Security/DLL.cpp +++ b/src/Security/DLL.cpp @@ -4,52 +4,44 @@ #include "Network/network.h" #include "Security/Enc.h" #include -#include "Logger.h" +#include #include -#include #include - -DWORD getParentPID(DWORD pid); -HANDLE getProcess(DWORD pid, LPSTR fname, DWORD sz); - void Kill(){ static bool Run = false; if(!Run)Run = true; else return; while(Run){ - std::this_thread::sleep_for(std::chrono::seconds(2)); - NetReset(); + std::this_thread::sleep_for(std::chrono::milliseconds(200)); + ClosePublic(); #ifdef DEBUG - debug(Sec("Attention! NetReset Check!")); + debug("NetReset Check!"); #endif } } -void FindDLL(char* args[]){ - static auto argv = args; +void FindDLL(const std::string& Name) { + static std::string PName = LocalEnc(Name.substr(0,Name.rfind(Sec("\\")))); + static bool Running = false; + if(Running)return; HANDLE hProcess = GetCurrentProcess(); - std::string Parent(MAX_PATH,0); - DWORD ppid = getParentPID(GetCurrentProcessId()); - HANDLE Process = getProcess(ppid, &Parent[0], MAX_PATH); - if(Process == nullptr){ - HMODULE hMods[1024]; - DWORD cbNeeded; - unsigned int i; - if(K32EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded)){ - for ( i = 1; i < (cbNeeded / sizeof(HMODULE)); i++ ){ - TCHAR szModName[MAX_PATH]; - if (K32GetModuleFileNameExA(hProcess, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR))){ - std::string Name(szModName),PName(argv[0]); - Name = Name.substr(0,Name.rfind(Sec("\\"))); - PName = PName.substr(0,PName.rfind(Sec("\\"))); - if(Name == PName){ - std::thread t1(Kill); - t1.detach(); - } + HMODULE hMods[1024]; + DWORD cbNeeded; + unsigned int i; + TCHAR szModName[MAX_PATH]; + if (K32EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded)) { + for (i = 1; i < (cbNeeded / sizeof(HMODULE)); i++) { + if (K32GetModuleFileNameExA(hProcess, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR))) { + std::string MName(szModName); + MName = MName.substr(0, MName.rfind(Sec("\\"))); + if (MName == LocalDec(PName)) { + Running = true; + std::thread t1(Kill); + t1.detach(); } - ZeroMemory(szModName,MAX_PATH); } + ZeroMemory(szModName, MAX_PATH); } } CloseHandle(hProcess); diff --git a/src/Startup.cpp b/src/Startup.cpp index 1c258cc..cd7b74a 100644 --- a/src/Startup.cpp +++ b/src/Startup.cpp @@ -181,7 +181,7 @@ void InitLauncher(int argc, char* argv[]) { SetConsoleTitleA((Sec("BeamMP Launcher v") + std::string(GetVer()) + GetPatch()).c_str()); InitLog(); CheckName(argc, argv); - FindDLL(argv); + FindDLL(argv[0]); SecurityCheck(argv); Discord_Main(); RequestRole();