Ответ 1
Я опубликовал пример Python script здесь для декодирования зашифрованных файлов cookie в OSX или Linux.
У меня есть Chrome 33+ в Ubuntu, и я вижу, что файлы cookie зашифрованы в структуре 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 script для дешифрования файла cookie. Я видел, что есть проблема Cookie с Chrome 33 Beta, но полагается в CryptUnprotectData
, что это Windows API.
Прежде всего, я хотел бы знать, как шифруются файлы cookie. Я прочитал 3DES и AES, но я не нашел надежного источника для получения информации.
Я напишу код, чтобы сделать необходимое шифрование и дешифрование, если у меня есть информация о том, как это сделать.
Спасибо
Я опубликовал пример Python script здесь для декодирования зашифрованных файлов 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;
}