使用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())可正常工作
错误原因分析
- DPAPI解密失败:Windows下Chrome采用DPAPI(数据保护API)加密Cookie,仅创建Cookie的用户账户具备解密权限。即便用同账户运行,若系统权限不足、DPAPI密钥损坏,或Chrome的加密密钥存储文件(
Local State)读取异常,都会导致解密失败。 - MAC校验失败:
browser-cookie3尝试用AES-GCM解密时,MAC校验不通过,说明获取的解密密钥不正确,或是Cookie数据被篡改、损坏。 - 版本兼容性问题:新版Chrome可能修改了加密逻辑,而
browser-cookie3版本未及时适配,导致密钥提取失败。
解决方法
更新
browser-cookie3到最新版本
执行命令升级:pip install --upgrade browser-cookie3新版本通常会修复对Chrome新加密逻辑的适配问题。
检查并修复Chrome的
Local State文件
Chrome的加密密钥存储在Local State文件中(路径一般为C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data\Local State),若该文件损坏或权限异常,会导致密钥无法读取:- 关闭Chrome,备份
Local State文件后删除原文件,重启Chrome让其自动生成新文件。 - 确保当前用户对该文件拥有读取权限。
- 关闭Chrome,备份
以管理员身份运行脚本
右键点击Python脚本或命令提示符,选择「以管理员身份运行」,提升权限后重试解密操作。彻底关闭Chrome进程
打开任务管理器,结束所有Chrome相关进程(包括后台的Google Chrome Helper等),再运行脚本。
额外问题:确保Chrome Cookie解密可靠生效的操作
- 保持版本匹配:定期检查并升级
browser-cookie3,避免因Chrome版本更新导致加密逻辑不兼容。 - 固定运行环境:始终使用创建Cookie的Windows用户账户运行脚本,且确保账户权限未发生变更。
- 避免文件篡改:不要手动修改Chrome的Cookie数据库文件(
Cookies),操作前关闭所有Chrome进程,防止文件被锁定或写入脏数据。 - 定期验证功能:周期性运行测试脚本,确保解密逻辑正常,及时发现系统更新、Chrome升级带来的隐性问题。
内容的提问来源于stack exchange,提问作者Farhan Ahmed




