用Python解密Chrome Linux BLOB加密的cookies
我在Ubuntu上使用Chrome 33以上版本,发现这些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脚本来解密这些cookie。我看到有一个关于Chrome 33 Beta的cookie问题,但它依赖于CryptUnprotectData
,这是一个Windows的API。
首先,我想知道这些cookie是怎么加密的。我读过3DES和AES,但找不到可靠的来源来获取这些信息。
如果我能找到如何进行加密和解密的信息,我会写代码来完成这些操作。
谢谢
3 个回答
评论有点让人困惑,所以我来澄清一下。这段话是关于Chromium源代码中的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;
}
我也在研究这个问题。到目前为止,我发现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”这个盐值和“peanuts”这个密码来混淆密码。
我在这里发布了一个示例的Python脚本,可以用来解码在OSX或Linux系统中加密的cookies。