Как извлечь файлы cookie Chrome в Python
True HackTrue Hack - не забудь подписаться на канал, чтоб не пропустить новые статьи!

И так, приступим!
Мы не призываем вас к каким-либо действиям, статья написана исключительно в ознакомительных целях, чтобы уберечь читателя от противоправных действий.
Как вы, возможно, уже знаете, браузер Chrome сохраняет много данных о просмотре локально на вашем компьютере. Одним из интересных хранимых данных являются файлы cookie. Однако большинство значений файлов cookie зашифрованы.
В этом уроке вы узнаете, как извлечь файлы cookie Chrome и расшифровать их как werll на вашем компьютере с Windows с помощью Python.
Для начала давайте установим необходимые библиотеки:
$ 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 password extractor):
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]
get_chrome_datetime() функция преобразует даты формата chrome в формат Python datetime.
get_encryption_key() извлекает и декодирует ключ AES, который был использован для шифрования файлов cookie, он хранится в "%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 = 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 в качестве параметров и использует ключ для расшифровки данных, чтобы вернуть его.
Теперь, когда у нас есть все, что нам нужно, давайте погрузимся в основную функцию:
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%'""")
После подключения к базе данных мы просто запрашиваем таблицу cookie с cursor.execute()функцией, чтобы получить все файлы cookie, хранящиеся в этом файле. Вы также можете фильтровать файлы cookie по доменному имени, как показано в прокомментированном коде.
Теперь давайте возьмем ключ AES переберем строки таблицы cookies и расшифруем все зашифрованные данные:
# 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 = 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 = ?, 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()
Мы используем нашу ранее определенную decrypt_data()функцию для расшифровки encrypted_valueстолбца, печатаем результаты и устанавливаем valueстолбец на расшифрованные данные. Мы также делаем файл cookie постоянным, устанавливая значение is_persistentto1, а также is_secureto0, чтобы указать, что он больше не зашифрован.
Наконец, давайте вызовем основную функцию:
if __name__ == "__main__":
main()
После того, как вы выполните сценарий, он напечатает все файлы cookie, хранящиеся в вашем браузере Chrome, включая зашифрованные, вот пример результатов:
===============================================================
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
===============================================================
...
Вывод
Потрясающе, теперь вы знаете, как извлечь файлы cookie Chrome и использовать их в Python.
Чтобы защитить себя от этого, мы можем просто очистить все файлы cookie в браузере Chrome или использовать DELETEкоманду на SQL в исходном файле Cookie для удаления файлов cookie.
Другим альтернативным решением является использование режима Icognito. В этом случае браузер Chrome не сохраняет историю просмотра, файлы cookie, данные сайта или любую информацию, введенную пользователями.
Однако стоит отметить, что если вы хотите использовать свои куки в Python напрямую, не извлекая их, как мы сделали здесь, есть классная библиотека, которая поможет вам это сделать.
● Buratinopol - хакинг, кибербезопасность, приватность, анонимность
● SOFTWARE — хранилище приватных софтов и прочей годноты. Подпишись!
● CODING — программирование доступным языком.
● Termux - one — гайды и статьи по Termux.