在Windows上解密Chrome浏览器的Cookie

时间:2014-06-22 17:08:07

标签: google-chrome cookies encryption

我写了一个程序,使用chrome的登录cookie自动执行某些操作,但由于Chrome在1月加密了所有Cookie,我的程序无法再运行了。

我试图通过This Topic解密cookie,并在mac os的java上取得成功,但我通常的运行环境是win7 os,所以我必须在Windows上解密它。

我在Chromium的源代码中找到了os_crypt_win.cc,它有一个加密部分:

bool OSCrypt::EncryptString(const std::string& plaintext, std::string* ciphertext) {
  DATA_BLOB input;
  input.pbData = const_cast<BYTE*>(reinterpret_cast<const BYTE*>(plaintext.data()));
  input.cbData = static_cast<DWORD>(plaintext.length());

  DATA_BLOB output;
  BOOL result = CryptProtectData(&input, L"", NULL, NULL, NULL, 0, &output);
  if (!result)
    return false;

  // this does a copy
  ciphertext->assign(reinterpret_cast<std::string::value_type*>(output.pbData), output.cbData);

  LocalFree(output.pbData);
  return true;
}

我在java中用JNA模仿这部分:

String encrypted = bytesToHex(Crypt32Util.cryptProtectData(Native.toByteArray(plaintext), 0));

String encrypted = bytesToHex(Crypt32Util.cryptProtectData(plaintext.getBytes());

String encrypted = bytesToHex(Crypt32Util.cryptProtectData(plaintext.getBytes("UTF-8"));

String encrypted = bytesToHex(Crypt32Util.cryptProtectData(plaintext.getBytes("UTF-16"));

但是我得到的错误加密值与Chrome中的值存储区不同。

我是否使用了错误的方法对此进行加密,还是我错过了重要的内容?

你能帮我搞清楚吗?

1 个答案:

答案 0 :(得分:1)

您使用了正确的方法来加密值。 价值观是怎样的错误&#34;?如果它们与存储在chrome中的那个不同,那就不是问题了。 原因很简单:

来自msdn

  

&#34;该函数创建会话密钥以执行加密。该   当要解密数据时,会再次导出会话密钥。&#34;

来自msdn blog

  

&#34;为每次调用CryptProtectData创建随机会话密钥。   此密钥源自主密钥,一些随机数据和一些   用户传入的可选熵。然后使用会话密钥   进行实际加密。&#34;

您应该检查的重要事项是您是否能够使用 DecryptUnprotectData 解密值。