Python3获取Windows下Chrome 90版本的Cookie值

Python3获取Windows下Chrome 90版本的Cookie值文章目录Python3获取Windows下Chrome 90版本的Cookie值前言一、AES_GSM加密方式二、DPAPI三、具体流程如下四、具体代码前言 现在京东、12360等网站的登录过程非常复杂,通过程序去实现登录也不容易,因此采取使用chrome浏览器登录后,再通过程序获得当前chrome浏览器的cookies,然后进行优惠券和火车票的自动抢订,也是一种方法。由于某些黑客通过用户后台驻留程序获得用户当前的coo
摘要由CSDN通过智能技术生成

Python3获取Windows下Chrome 90版本的Cookie值


前言

现在京东、12360等网站的登录过程非常复杂,通过程序去实现登录也不容易,因此采取使用chrome浏览器登录后,再通过程序获得当前chrome浏览器的cookies,然后进行优惠券和火车票的自动抢订,也是一种方法。
由于某些黑客通过用户后台驻留程序获得用户当前的cookies,然后可能会去做一些违法的事,因此在chrome的2020年后的版本,如chrome 90版本,在cookies的处理采用了较为复杂的AES_GSM和DPAPI相结合的加密方式,下面就详细介绍Chrome 90后版本对如何对cookie进行加密的原理,并根据该原理,通过python3实现对cookies的解密。


一、AES_GSM加密方式

AES是对称加密的一种,加密和解密使用相同密钥。在CPU中,由于集成了专门的AES指令集,通过该指令集,提升了AES加解密的速度,因此AES的应用越来越广泛。
AES的加密方式有很多种,这里就不详细去描述了,而AES_GSM结合了CTR和GMAC两种加密方式,加密过程相对比较复杂,使用了密钥、Nonce(初始项量)、Counter(块编号)、MAC,既可以并行执行,因为所有的块只依赖于Nonce与Counter,并不会依赖于前一个密文块,又通过MAC保证了数据完整性的验证。
具体加密方式如下:1、将明文数据分块进行顺序编号;2将每个编号与初始向量(IV)组合,并使用密钥k,做AES加密;3将加密的结果与分块的明文按编号顺序进行XOR运算来生成密文,该过程为并行;4将密钥K通过GMAC生成结果,将该结果与密文进行XOR运算,生成可用于验证数据完整性的身份验证标签MAC;5将IV、密文和身份验证标签MAC组合起来。
Chrome 90版本将cookies通过上述方式加密后,将最后生成的组合信息存放在
os.environ[‘LOCALAPPDATA’]+r"\Google\Chrome\User Data\Default\Cookies"该文件中。
可以看到,从该文件读取信息包含了IV、密文和MAC,那么只需要找到密钥KEY,就可以从该信息中恢复出cookies的具体值,那么KEY到底存放在哪儿呢?Chrome 将key加密后存放,但如果又引入一个KEY去加密,那就会出现类似套娃的问题,因此引入了DPAPI,通过该方式加密,使用了操作系统级的加密,有较高的安全性,下面简单介绍下DPAPI。

二、DPAPI

DPAPI是微软通过操作系统提供的对数据进行加解密的方式,密钥是使用MasterKe、随机数和系统登录密码(可选)通过PBKDF2算法生成密钥,总之DPAPI据微软的介绍是相当安全的,具体原理可以参考微软的官方文档,我们只要知道,通过DPAPI提供的接口,CryptProtectData和CryptUnprotectData实现加解密数据。
Python3对DPAPI的调用
Python3使用ctype库实现调用动态链接库中的函数,通过ctypes.wintypes构造复杂的C数据类型,实现底层操作系统的调用。
具体调用过程如下
#构造输入输出数据结构
class DATA_BLOB(ctypes.Structure):
fields = [(‘cbData’, ctypes.wintypes.DWORD),
(‘pbData’, ctypes.POINTER(ctypes.c_char))]
#调用DPAPI的CryptUnprotectData
ctypes.windll.crypt32.CryptUnprotectData(ctypes.byref(blobin), None, None, None, None, 0, ctypes.byref(blobout))
具体可参考https://blog.csdn.net/xiaoqing_2014/article/details/79546957

三、具体流程如下

1获取Chrome加密cookies的key,由于该key使用了DPAIP加
后,又使用了base64加密后存在了google的相关目录下,所以需要以下步骤,获取key
(1)从os.environ[‘LOCALAPPDATA’],Google\Chrome\User
Data\Local State文件中获取[os_crypt][encrypted_key]下的内容,该内容为加密后的key 。
(2)首先使用base64.b64decode去解密。解密后该结果为前5个字符为DPAPI 后面类似\x01\x00\x00\x00\xd0\x8c\x9d\xdf\x01…, DPAPI是google在存放加密信息时,增加的标志,因此去掉前5个字符。
(3)将(2)得到的数据再通过DPAPI的 CryptUnprotectData解密,获得最终的key

2获取cookies的加密内容,从中获取Nonce,通过AES_GSM进行解密。
(1)使用SqlLite打开 os.environ[‘LOCALAPPDATA’]+r"\Google\Chrome\User Data\Default\Cookies
在这里插入图片描述

可以看见cookies中有一列encrypted,其中就存放的是加密后cookies的内容,该内容以V10开头。具体如下
1-3 : v10
3-15 : Nonce
中间部分 :密文
后16位 :MAC
由于我们不关心数据校验,因此MAC部分可以直接截掉。
(2)通过得到的key、Nonce、密文,然后可以通过python的Cryptography库完成解密,具体解密方式见后面的代码.

四、具体代码

代码如下:

import sqlite3
import requests
from win32crypt import CryptUnprotectData
import os,sys
from http import 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值