static void Main(string[] args) { if (args.Length == 0) { ShowWindow(GetConsoleWindow(), SW_HIDE); } using (var reader = new StreamReader(@"blizzard.cfg")) { string[] data = reader.ReadToEnd().Split('#'); ServerIP = data[0]; Port = int.Parse(data[1]); } byte[] buff = new byte[1]; ConquerHash = GetFileHash(@"Conquer.exe"); MagicHash = GetFileHash(@"ini\MagicEffect.ini"); Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); while (true) { try { Client.Connect(new IPEndPoint(IPAddress.Parse(ServerIP), Port)); Program.WriteLog("[Socket] Connected to Server!"); break; } catch { Program.WriteLog("[Socket] Cannot connect --> Server is offline, Reconnecting in 10 seconds."); Thread.Sleep(10000); } } Client.Send(Packets.WelcomePacket(ConquerHash, MagicHash)); Client.Receive(buff, 0, buff.Length, SocketFlags.None); if (buff[0] == 10) { Client.Disconnect(false); Program.WriteLog("[Files Validation] Invalid client files."); Console.ReadLine(); Environment.Exit(0); return; } else if (buff[0] == 20) { Program.WriteLog("[Files Validation] Valid client files."); } #region Launch Conquer Process p = new Process(); p.StartInfo = new ProcessStartInfo(Path.Combine(Environment.CurrentDirectory, "Conquer.exe"), "blacknull"); p.StartInfo.WorkingDirectory = Environment.CurrentDirectory; p.Start(); ProtectedConquer = p.MainModule.FileName; MyProtection = Process.GetCurrentProcess().MainModule.FileName; #endregion string pr = Process.GetCurrentProcess().ProcessName.Replace(".exe", ""); var List = Process.GetProcessesByName(pr); Program.WriteLog("[Protection] Checking for running shield --> " + pr); if (List.Count() == 1) { Program.WriteLog("[Protection] Can`t find running shields..."); Program.WriteLog("[Protection] Starting Protection thread."); Program.WriteLog(); ThreadStamp = DateTime.Now; new Thread(new ThreadStart(Wrld)).Start(); } else { Environment.Exit(0); return; } while (true) { Console.ReadLine(); } }
static void Wrld() { while (true) { if (DateTime.Now > ThreadStamp.AddSeconds(10)) { ThreadStamp = DateTime.Now; try { string currentPath = Process.GetCurrentProcess().MainModule.FileName.Replace(Process.GetCurrentProcess().ProcessName.ToString() + ".exe", "").ToLower(); var allProcceses = Process.GetProcesses(); bool found = false; int skipped = 0; foreach (var p in allProcceses) { try { string filename = p.MainModule.FileName; string desc = p.MainModule.FileVersionInfo.FileDescription; if (filename.ToLower().Contains(Environment.CurrentDirectory.ToLower()) || desc.ToLower().Contains("Conquer")) { if ((filename.ToLower() != ProtectedConquer.ToLower()) && (filename.ToLower() != MyProtection.ToLower())) { Program.WriteLog("[Killing] Process --> " + p.ProcessName); p.Kill(); } } if (p.MainModule.FileName == ProtectedConquer) { found = true; } } catch { skipped++; continue; } } Program.WriteLog("[Process] Skipped --> " + skipped + " processes."); if (!found) { Client.Disconnect(false); Program.WriteLog("[Error] Can`t find the client, Exiting.. in 2 seconds."); Thread.Sleep(2000); Environment.Exit(0); } Client.Send(Packets.Beep()); Program.WriteLog("[Packets] Sent --> Beep on [" + GetTime() + "]"); } catch (SocketException) { Program.WriteLog("[Socket] Connection is died.. Reconnecting...."); byte[] buff = new byte[1]; try { Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Client.Connect(new IPEndPoint(IPAddress.Parse(ServerIP), 9230)); Client.Send(Packets.WelcomePacket(ConquerHash, MagicHash)); Client.Receive(buff, 0, buff.Length, SocketFlags.None); Program.WriteLog("[Socket] Reconnection --> Succeed.."); if (buff[0] == 10) { Client.Disconnect(false); Program.WriteLog("[Files Validation] Invalid client files."); Console.ReadLine(); Environment.Exit(0); return; } else if (buff[0] == 20) { Program.WriteLog("[Files Validation] Valid client files."); } } catch { Program.WriteLog("[Socket] Reconnection failed."); } } catch (Exception e) { Program.WriteLog(e.ToString()); } } } }