Расшифровать 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;
}