186 lines
4.9 KiB
C#
186 lines
4.9 KiB
C#
#region Usings
|
|
using System;
|
|
using System.IO;
|
|
using System.Diagnostics;
|
|
using System.Threading;
|
|
using System.Security.Cryptography;
|
|
using System.Text.RegularExpressions;
|
|
using Microsoft.Win32;
|
|
using System.Runtime.InteropServices;
|
|
using System.Security.Principal;
|
|
using System.Linq;
|
|
using System.ComponentModel;
|
|
using System.Net;
|
|
using System.Threading.Tasks;
|
|
#endregion
|
|
|
|
namespace Novetus.Core
|
|
{
|
|
#region Security Functions
|
|
public class SecurityFuncs
|
|
{
|
|
[DllImport("user32.dll")]
|
|
static extern int SetWindowText(IntPtr hWnd, string text);
|
|
public static bool IsElevated { get { return WindowsIdentity.GetCurrent().Owner.IsWellKnown(WellKnownSidType.BuiltinAdministratorsSid); } }
|
|
|
|
public static string Decode(string EncodedData, bool useOldDecoding = false)
|
|
{
|
|
if (useOldDecoding)
|
|
{
|
|
return DecodeOld(EncodedData);
|
|
}
|
|
|
|
try
|
|
{
|
|
string decode = EncodedData.Decrypt();
|
|
return decode;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return DecodeOld(EncodedData);
|
|
}
|
|
}
|
|
|
|
private static string DecodeOld(string EncodedData)
|
|
{
|
|
var EncodedBytes = Convert.FromBase64String(EncodedData);
|
|
return System.Text.Encoding.UTF8.GetString(EncodedBytes);
|
|
}
|
|
|
|
public static string Encode(string plainText, bool useOldEncoding = false)
|
|
{
|
|
if (useOldEncoding)
|
|
{
|
|
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
|
|
return System.Convert.ToBase64String(plainTextBytes);
|
|
}
|
|
else
|
|
{
|
|
return plainText.Crypt();
|
|
}
|
|
}
|
|
|
|
public static string GenerateMD5(string filename)
|
|
{
|
|
using (var md5 = MD5.Create())
|
|
{
|
|
using (var stream = new BufferedStream(File.OpenRead(filename), 1200000))
|
|
{
|
|
return BitConverter.ToString(md5.ComputeHash(stream)).Replace("-", "");
|
|
}
|
|
}
|
|
}
|
|
|
|
private static string RandomStringTitle()
|
|
{
|
|
CryptoRandom random = new CryptoRandom();
|
|
return NovetusFuncs.RandomString(random.Next(20), " ");
|
|
}
|
|
|
|
public static void RenameWindow(Process exe, ScriptType type, string clientname, string mapname)
|
|
{
|
|
if (!GlobalVars.SelectedClientInfo.AlreadyHasSecurity)
|
|
{
|
|
int time = 500;
|
|
BackgroundWorker worker = new BackgroundWorker();
|
|
worker.WorkerSupportsCancellation = true;
|
|
worker.DoWork += (obj, e) => WorkerDoWork(exe, type, time, worker, clientname, mapname);
|
|
worker.RunWorkerAsync();
|
|
}
|
|
}
|
|
|
|
private static void WorkerKill(Process exe, ScriptType type, int time, BackgroundWorker worker, string clientname, string mapname)
|
|
{
|
|
worker.DoWork -= (obj, e) => WorkerDoWork(exe, type, time, worker, clientname, mapname);
|
|
worker.CancelAsync();
|
|
worker.Dispose();
|
|
}
|
|
|
|
private static void WorkerDoWork(Process exe, ScriptType type, int time, BackgroundWorker worker, string clientname, string mapname)
|
|
{
|
|
DateTime StartTimeAfterMinute = exe.StartTime.AddMinutes(1);
|
|
|
|
if (exe.IsRunning())
|
|
{
|
|
while (exe.IsRunning())
|
|
{
|
|
if (exe.MainWindowHandle == null && DateTime.Now > StartTimeAfterMinute)
|
|
{
|
|
exe.Kill();
|
|
WorkerKill(exe, type, time, worker, clientname, mapname);
|
|
break;
|
|
}
|
|
|
|
switch (type)
|
|
{
|
|
case ScriptType.Client:
|
|
SetWindowText(exe.MainWindowHandle, "Novetus "
|
|
+ GlobalVars.ProgramInformation.Version + " - "
|
|
+ clientname + " "
|
|
+ ScriptFuncs.Generator.GetNameForType(type)
|
|
+ " [" + GlobalVars.CurrentServer.ToString() + "]"
|
|
+ RandomStringTitle());
|
|
break;
|
|
case ScriptType.Server:
|
|
case ScriptType.Solo:
|
|
SetWindowText(exe.MainWindowHandle, "Novetus "
|
|
+ GlobalVars.ProgramInformation.Version + " - "
|
|
+ clientname + " "
|
|
+ ScriptFuncs.Generator.GetNameForType(type)
|
|
+ (string.IsNullOrWhiteSpace(mapname) ? " [Place1]" : " [" + mapname + "]")
|
|
+ RandomStringTitle());
|
|
break;
|
|
case ScriptType.Studio:
|
|
SetWindowText(exe.MainWindowHandle, "Novetus Studio "
|
|
+ GlobalVars.ProgramInformation.Version + " - "
|
|
+ clientname
|
|
+ (string.IsNullOrWhiteSpace(mapname) ? " [Place1]" : " [" + mapname + "]")
|
|
+ RandomStringTitle());
|
|
break;
|
|
case ScriptType.EasterEgg:
|
|
case ScriptType.EasterEggServer:
|
|
default:
|
|
SetWindowText(exe.MainWindowHandle, ScriptFuncs.Generator.GetNameForType(type)
|
|
+ RandomStringTitle());
|
|
break;
|
|
}
|
|
|
|
Thread.Sleep(time);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Thread.Sleep(time);
|
|
RenameWindow(exe, type, clientname, mapname);
|
|
}
|
|
}
|
|
|
|
//https://www.c-sharpcorner.com/article/caesar-cipher-in-c-sharp/
|
|
private static char cipher(char ch, int key)
|
|
{
|
|
if (!char.IsLetter(ch))
|
|
{
|
|
return ch;
|
|
}
|
|
|
|
char d = char.IsUpper(ch) ? 'A' : 'a';
|
|
return (char)((((ch + key) - d) % 26) + d);
|
|
}
|
|
|
|
public static string Encipher(string input, int key)
|
|
{
|
|
string output = string.Empty;
|
|
|
|
foreach (char ch in input)
|
|
output += cipher(ch, key);
|
|
|
|
return output;
|
|
}
|
|
|
|
public static string Decipher(string input, int key)
|
|
{
|
|
return Encipher(input, 26 - key);
|
|
}
|
|
}
|
|
#endregion
|
|
} |