如何在Python中提取Chrome Cookie(详细实现)
Python如何提取Chrome Cookie?本文带你了解如何在你的 Windows 机器上使用 Python 提取 Google Chrome 浏览器保存的 cookie 并解密它们。
【如何在Python中提取Chrome Cookie(详细实现)】你可能已经知道,Chrome 浏览器会在你的机器本地保存大量浏览数据。毫无疑问,最危险的是能够从 Chrome 中提取密码和解密密码。此外,有趣的存储数据之一是 cookie。但是,大多数 cookie 值都是加密的。
如何在Python中提取Chrome Cookie?在本教程中,你将学习如何在 Windows 机器上使用 Python 提取 Chrome cookie 并对其进行解密。
相关:如何在 Python 中提取 Chrome 密码。
Python如何提取Cookie?首先,让我们安装所需的库:
$ pip3 install pycryptodome pypiwin32
打开一个新的 Python 文件并导入必要的模块:
import os
import json
import base64
import sqlite3
import shutil
from datetime import datetime, timedelta
import win32crypt # pip install pypiwin32
from Crypto.Cipher import AES # pip install pycryptodome
下面是两个方便的函数,可以帮助我们以后提取 cookie(来自chrome 密码提取器教程):
def get_chrome_datetime(chromedate):
"""Return a `datetime.datetime` object from a chrome format datetime
Since `chromedate` is formatted as the number of microseconds since January, 1601"""
if chromedate != 86400000000 and chromedate:
try:
return datetime(1601, 1, 1) + timedelta(microseconds=chromedate)
except Exception as e:
print(f"Error: {e}, chromedate: {chromedate}")
return chromedate
else:
return ""def get_encryption_key():
local_state_path = os.path.join(os.environ[
"USERPROFILE"],
"AppData", "Local", "Google", "Chrome",
"User Data", "Local State")
with open(local_state_path, "r", encoding="utf-8") as f:
local_state = f.read()
local_state = json.loads(local_state)# decode the encryption key from Base64
key = base64.b64decode(local_state[
"os_crypt"][
"encrypted_key"])
# remove 'DPAPI' str
key = key[
5:]
# return decrypted key that was originally encrypted
# using a session key derived from current user's logon credentials
# doc: http://timgolden.me.uk/pywin32-docs/win32crypt.html
return win32crypt.CryptUnprotectData(key, None, None, None, 0)[
1]
Python如何提取Chrome Cookie?
get_chrome_datetime()
函数将 chrome 格式的日期时间转换为 Python 日期时间格式。get_encryption_key()
提取和解码用于加密 cookie 的 AES 密钥,这"%USERPROFILE%\AppData\Local\Google\Chrome\User Data\Local State"
以 JSON 格式存储在文件中。def decrypt_data(data, key):
try:
# get the initialization vector
iv = data[
3:15]
data = https://www.lsbin.com/data[
15:]
# generate cipher
cipher = AES.new(key, AES.MODE_GCM, iv)
# decrypt password
return cipher.decrypt(data)[
:-16].decode()
except:
try:
return str(win32crypt.CryptUnprotectData(data, None, None, None, 0)[
1])
except:
# not supported
return""
上述函数接受数据和AES密钥作为参数,并使用密钥解密数据返回。
现在我们拥有了我们需要的一切,让我们深入研究 main 函数:
def main():
# local sqlite Chrome cookie database path
db_path = os.path.join(os.environ[
"USERPROFILE"], "AppData", "Local",
"Google", "Chrome", "User Data", "default", "Cookies")
# copy the file to current directory
# as the database will be locked if chrome is currently open
filename = "Cookies.db"
if not os.path.isfile(filename):
# copy file when does not exist in the current directory
shutil.copyfile(db_path, filename)
包含 cookie 数据的文件位于
db_path
变量中定义的位置,我们需要将其复制到当前目录,因为当前打开 Chrome 浏览器时数据库将被锁定。连接到SQLite数据库:
# connect to the database
db = sqlite3.connect(filename)
cursor = db.cursor()
# get the cookies from `cookies` table
cursor.execute("""
SELECT host_key, name, value, creation_utc, last_access_utc, expires_utc, encrypted_value
FROM cookies""")
# you can also search by domain, e.g thepythoncode.com
# cursor.execute("""
# SELECT host_key, name, value, creation_utc, last_access_utc, expires_utc, encrypted_value
# FROM cookies
# WHERE host_key like '%thepythoncode.com%'""")
如何在Python中提取Chrome Cookie?连接到数据库后,我们只需使用
cursor.execute()
函数查询cookies表即可获取存储在此文件中的所有cookie。你还可以按注释代码中所示的域名过滤 cookie。现在让我们获取 AES 密钥并遍历 cookie 表的行并解密所有加密数据:
# get the AES key
key = get_encryption_key()
for host_key, name, value, creation_utc, last_access_utc, expires_utc, encrypted_value in cursor.fetchall():
if not value:
decrypted_value = https://www.lsbin.com/decrypt_data(encrypted_value, key)
else:
# already decrypted
decrypted_value = value
print(f"""
Host: {host_key}
Cookie name: {name}
Cookie value (decrypted): {decrypted_value}
Creation datetime (UTC): {get_chrome_datetime(creation_utc)}
Last access datetime (UTC): {get_chrome_datetime(last_access_utc)}
Expires datetime (UTC): {get_chrome_datetime(expires_utc)}
===============================================================
""")
# update the cookies table with the decrypted value
# and make session cookie persistent
cursor.execute("""
UPDATE cookies SET value = https://www.lsbin.com/?, has_expires = 1, expires_utc = 99999999999999999, is_persistent = 1, is_secure = 0
WHERE host_key = ?
AND name = ?""", (decrypted_value, host_key, name))
# commit changes
db.commit()
# close connection
db.close()
Python如何提取Chrome Cookie?我们使用我们之前定义的
decrypt_data()
函数来解密encrypted_value
列,我们打印结果并将value
列设置为解密的数据。我们也保证Cookie持续通过设置is_persistent
来1
也is_secure
来0
,以表明它不再被加密。最后,让我们调用 main 函数:
if __name__ == "__main__":
main()
执行脚本后,它将打印存储在 Chrome 浏览器中的所有 cookie,包括加密的 cookie,以下是结果示例:
===============================================================
Host: www.example.com
Cookie name: _fakecookiename
Cookie value (decrypted): jLzIxkuEGJbygTHWAsNQRXUaieDFplZP
Creation datetime (UTC): 2021-01-16 04:52:35.794367
Last access datetime (UTC): 2021-03-21 10:05:41.312598
Expires datetime (UTC): 2022-03-21 09:55:48.758558
===============================================================
...
Python如何提取Cookie?总结太棒了,现在你知道如何提取 Chrome cookie 并在 Python 中使用它们了。
如何在Python中提取Chrome Cookie?为了避免这种情况,我们可以简单地清除 Chrome 浏览器中的所有 cookie,或者使用
DELETE
原始 Cookies 文件中的 SQL 中的命令来删除 cookie。另一种替代解决方案是使用隐身模式。在这种情况下,Chrome 浏览器不会保存浏览历史记录、cookie、站点数据或用户输入的任何信息。
此外,你还可以使用相同的方式提取和解密 Chrome 密码,本教程将展示如何操作。
不过值得注意的是,如果你想直接在 Python 中使用你的 cookie,而不像我们在这里所做的那样提取它们,那么有一个很酷的库可以帮助你做到这一点。
推荐阅读
- 如何在Python中创建HTTP代理(代码示例)
- 如何使用Experest的Appium Studio进行移动自动化测试()
- 在Python中如何使用OpenCV实现人脸检测(详细实现指南)
- Win8.1专业版关闭主板集成声卡的具体技巧
- 啥是xinput1_3.dll?Win8系统运行时提示缺少xinput1_3.dll文件怎样办?
- 番茄花园Win8.1专业版查看系统历史补丁的技巧
- 番茄花园Win8.1 64位纯净版下程序出现停止工作怎样办?
- Ghost Win8.1 64位旗舰版下创建公文包的具体技巧
- 电脑公司Win8 64位旗舰版通过路由器局限网速的技巧