Расшифровать Chrome Linux BLOB зашифрованные файлы cookie в Python
У меня есть Chrome 33+ в Ubuntu, и я вижу, что куки зашифрованы в структуре BLOB:
CREATE TABLE cookies (creation_utc INTEGER NOT NULL UNIQUE PRIMARY KEY,host_key TEXT NOT NULL,name TEXT NOT NULL,value TEXT NOT NULL,path TEXT NOT NULL,expires_utc INTEGER NOT NULL,secure INTEGER NOT NULL,httponly INTEGER NOT NULL,last_access_utc INTEGER NOT NULL, has_expires INTEGER NOT NULL DEFAULT 1, persistent INTEGER NOT NULL DEFAULT 1,priority INTEGER NOT NULL DEFAULT 1,encrypted_value BLOB DEFAULT '');
Я хотел бы написать скрипт python для расшифровки файла cookie. Я видел, что есть проблема Cookie с Chrome 33 Beta но полагается в CryptUnprotectData
что это API Windows.
прежде всего, я хотел бы знать, как файлы зашифрованы. Я читал 3DES и AES, но я не нахожу надежного источника, чтобы получить информация.
Я напишу код, чтобы сделать необходимое шифрование и дешифрование, если у меня есть информация о том, как это сделать.
спасибо
3 ответов
Я опубликовал пример скрипта Python здесь для декодирования зашифрованных файлов cookie в OSX или Linux.
Я тоже над этим работаю. До сих пор я обнаружил, что Chrome(Windows) использует функцию CryptProtectData для шифрования значений cookie. Та же функция, которую он использует для шифрования сохраненных паролей в файле данных входа. CryptProtectData использует данные учетной записи пользователя и пароль вошедшего в систему пользователя windows для шифрования данных. Чтобы расшифровать его, мы должны использовать функцию CryptUnProtectData с той же учетной записью пользователя.
вот фрагмент для расшифровки входа в систему Данные https://gist.github.com/jordan-wright/5770442
теперь о Linux я прочитал здесь: http://www.linkedin.com/groups/Google-Chrome-encrypt-Stored-Cookies-36874.S.5826955428000456708
"на других системах, кажется, запутать пароли с солью "saltysalt" и пароль "арахис""
комментарии немного запутаны, поэтому просто чтобы уточнить, это источник хрома в os_crypt_win.cc таким образом, вы можете видеть, что он просто помещает строку в blob и запускает CryptUnprotectData()
bool OSCrypt::DecryptString(const std::string& ciphertext,
std::string* plaintext) {
DATA_BLOB input;
input.pbData = const_cast<BYTE*>(
reinterpret_cast<const BYTE*>(ciphertext.data()));
input.cbData = static_cast<DWORD>(ciphertext.length());
DATA_BLOB output;
BOOL result = CryptUnprotectData(&input, NULL, NULL, NULL, NULL,
0, &output);
if (!result)
return false;
plaintext->assign(reinterpret_cast<char*>(output.pbData), output.cbData);
LocalFree(output.pbData);
return true;
}