我在Ubuntu中使用了Chrome 33+,我发现这些cookie是以BLOB结构encryption的:
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。
首先我想知道cookies是如何encryption的。 我已经阅读3DES和AES,但是我没有find一个可靠的来源来获取信息。
如果我有关于如何做的信息,我会写代码做必要的encryption和解密。
谢谢
我已经发布了一个Python脚本示例,用于在OSX或Linux中解密加密的cookie。
我也一直在努力。 直到现在我发现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; }