You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

使用browser-cookie3提取Chrome Cookie遇解密错误的原因与解决

我尝试用Python的browser-cookie3包提取Chrome浏览器Cookie,代码如下:

import browser_cookie3

cookies = browser_cookie3.chrome(domain_name="example.com")
for cookie in cookies:
    print(cookie)

但运行后出现以下错误:

Traceback (most recent call last):
  File "browser_cookie3\__init__.py", line 315, in _decrypt
    return self._decrypt_windows_chromium(value, encrypted_value)
  File "browser_cookie3\__init__.py", line 306, in _decrypt_windows_chromium
    _, data = crypt_unprotect_data(encrypted_value)
  File "browser_cookie3\__init__.py", line 94, in crypt_unprotect_data
    raise RuntimeError('Failed to decrypt the cipher text with DPAPI')
RuntimeError: Failed to decrypt the cipher text with DPAPI

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "browser_cookie3\__init__.py", line 331, in _decrypt
    data = aes.decrypt_and_verify(encrypted_value[12:-16], tag)
  File "Crypto\Cipher\_mode_gcm.py", line 567, in decrypt_and_verify
    self.verify(received_mac_tag)
  File "Crypto\Cipher\_mode_gcm.py", line 508, in verify
    raise ValueError("MAC check failed")
ValueError: MAC check failed

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    cookies = browser_cookie3.chrome(domain_name="facebook.com")
  File "browser_cookie3\__init__.py", line 649, in chrome
    return Chrome(cookie_file, domain_name, key_file).load()
  File "browser_cookie3\__init__.py", line 291, in load
    value = self._decrypt(value, enc_value)
  File "browser_cookie3\__init__.py", line 333, in _decrypt
    raise BrowserCookieError('Unable to get key for cookie decryption')
browser_cookie3.BrowserCookieError: Unable to get key for cookie decryption

已尝试的操作:

  • 使用Chrome所属的Windows用户运行脚本
  • 运行脚本前关闭Chrome
  • 改用Firefox(browser_cookie3.firefox())可正常工作

错误原因分析

  1. DPAPI解密失败:Windows下Chrome采用DPAPI(数据保护API)加密Cookie,仅创建Cookie的用户账户具备解密权限。即便用同账户运行,若系统权限不足、DPAPI密钥损坏,或Chrome的加密密钥存储文件(Local State)读取异常,都会导致解密失败。
  2. MAC校验失败browser-cookie3尝试用AES-GCM解密时,MAC校验不通过,说明获取的解密密钥不正确,或是Cookie数据被篡改、损坏。
  3. 版本兼容性问题:新版Chrome可能修改了加密逻辑,而browser-cookie3版本未及时适配,导致密钥提取失败。

解决方法

  1. 更新browser-cookie3到最新版本
    执行命令升级:

    pip install --upgrade browser-cookie3
    

    新版本通常会修复对Chrome新加密逻辑的适配问题。

  2. 检查并修复Chrome的Local State文件
    Chrome的加密密钥存储在Local State文件中(路径一般为C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data\Local State),若该文件损坏或权限异常,会导致密钥无法读取:

    • 关闭Chrome,备份Local State文件后删除原文件,重启Chrome让其自动生成新文件。
    • 确保当前用户对该文件拥有读取权限。
  3. 以管理员身份运行脚本
    右键点击Python脚本或命令提示符,选择「以管理员身份运行」,提升权限后重试解密操作。

  4. 彻底关闭Chrome进程
    打开任务管理器,结束所有Chrome相关进程(包括后台的Google Chrome Helper等),再运行脚本。


额外问题:确保Chrome Cookie解密可靠生效的操作

  1. 保持版本匹配:定期检查并升级browser-cookie3,避免因Chrome版本更新导致加密逻辑不兼容。
  2. 固定运行环境:始终使用创建Cookie的Windows用户账户运行脚本,且确保账户权限未发生变更。
  3. 避免文件篡改:不要手动修改Chrome的Cookie数据库文件(Cookies),操作前关闭所有Chrome进程,防止文件被锁定或写入脏数据。
  4. 定期验证功能:周期性运行测试脚本,确保解密逻辑正常,及时发现系统更新、Chrome升级带来的隐性问题。

内容的提问来源于stack exchange,提问作者Farhan Ahmed

火山引擎 最新活动