【问题标题】:Decrypt Chrome Linux BLOB encrypted cookies in Python在 Python 中解密 Chrome Linux BLOB 加密的 cookie
【发布时间】:2014-04-09 20:14:20
【问题描述】:

我在 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。我已经看到有 Cookie issue with Chrome 33 Beta 但依赖于 CryptUnprotectData 它是一个 Windows API。

首先我想知道 cookie 是如何加密的。我已阅读 3DES 和 AES,但找不到可靠的来源来获取信息。

如果我有相关信息,我会编写代码来进行必要的加密和解密。

谢谢

【问题讨论】:

标签: python linux google-chrome cookies encryption


【解决方案1】:

我发布了一个示例 Python 脚本 here,用于在 OSX 或 Linux 中解码加密的 cookie。

【讨论】:

    【解决方案2】:

    我也一直在努力。到目前为止,我发现 Chrome(Windows) 使用 CryptProtectData 函数来加密它的 cookie 值。它用于加密登录数据文件中保存的密码的相同功能。 CryptProtectData 使用登录的 windows 用户的用户帐户信息和密码来加密数据。要解密它,我们必须使用 CryptUnProtectData 函数与登录的相同用户帐户。

    这是一个用于解密登录数据的 sn-p https://gist.github.com/jordan-wright/5770442

    现在关于 Linux,我在这里读到: http://www.linkedin.com/groups/Google-Chrome-encrypt-Stored-Cookies-36874.S.5826955428000456708

    在其他系统上,它似乎用盐“saltysalt”和密码“peanuts”来混淆密码

    【讨论】:

    • 或者,也许是macos上的“mock_password”
    【解决方案3】:

    cmets 有点混乱,所以澄清一下,这是 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;
    }
    

    【讨论】:

    • 我在windows上使用c++,上面的代码可以为我工作
    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多