栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Chrome 80如何解码Cookie

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Chrome 80如何解码Cookie

从Chrome 80及更高版本开始,在GCM模式下使用AES-256对cookie进行加密。应用的密钥使用DPAPI加密。细节描述在这里,部分
铬v80.0或更高

加密密钥以ASCII编码

DPAPI
(即
0x4450415049
)开头,并且是base64编码的,即密钥必须首先经过base64解码,并且必须删除前5个字节。之后,可以解密
win32crypt.CryptUnprotectData
。解密返回一个元组,其第二个值包含解密的密钥:

import osimport jsonimport base64 import win32cryptfrom Crypto.Cipher import AESpath = r'%LocalAppData%GoogleChromeUser DataLocal State'path = os.path.expandvars(path)with open(path, 'r') as file:    encrypted_key = json.loads(file.read())['os_crypt']['encrypted_key']encrypted_key = base64.b64depre(encrypted_key)      # base64 decodingencrypted_key = encrypted_key[5:]         # Remove DPAPIdecrypted_key = win32crypt.CryptUnprotectData(encrypted_key, None, None, None, 0)[1]  # Decrypt key

cookies的加密在GCM模式下使用AES-256执行。这是经过身份验证的加密,可确保机密性和真实性/完整性。在加密期间,将生成一个身份验证标签,该身份验证标签用于解密期间的完整性验证。GCM模式基于CTR模式,并使用IV(即席)。除32个字节的密钥外,解密还需要现时和身份验证标签。

加密数据以ASCII编码

v10
(即
0x763130
)开头,后跟12个字节的随机数,实际密文,最后是16个字节的身份验证标签。各个组件可以按以下方式分开:

data = bytes.fromhex('763130...') # the encrypted cookienonce = data[3:3+12]ciphertext = data[3+12:-16]tag = data[-16:]

从而

data
包含加密的数据。解密本身是使用PyCryptodome完成的:

cipher = AES.new(decrypted_key, AES.MODE_GCM, nonce=nonce)plaintext = cipher.decrypt_and_verify(ciphertext, tag) # the decrypted cookie

注意:通常,还会存储已使用v80以下的Chrome版本保存的cookie,因此已对DPAPI进行了加密。可以通过以下事实来识别DPAPI加密的cookie:它们以序列开头

0x01000000D08C9DDF0115D1118C7A00C04FC297EB
(此处和此处
关于DPAPI的

部分)
开头。这些cookie当然不能如上所述进行解密,但是可以使用DPAPI加密cookie的前一过程进行解密。用于查看未加密或已加密形式的cookie的工具分别是
ChromecookiesView
SQLite的数据库浏览器



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516744.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号