Начиная с Chrome версии 80 и выше, файлы cookie шифруются с использованием AES-256 в режиме GCM. Применяемый ключ шифруется с использованием DPAPI. Подробности описаны здесь , раздел Chrome v80.0 и выше .
Зашифрованный ключ начинается с кодировки ASCII DPAPI
(т.е. 0x4450415049
) и кодируется в Base64, т. е. ключ должен быть сначала декодирован в Base64, а первые 5 байтов должны быть удалены. После этого возможна расшифровка с помощью win32crypt.CryptUnprotectData
. Расшифровка возвращает кортеж, второе значение которого содержит расшифрованный ключ:
import os
import json
import base64
import win32crypt
from Crypto.Cipher import AES
path = r'%LocalAppData%\Google\Chrome\User Data\Local 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.b64decode(encrypted_key) # Base64 decoding
encrypted_key = encrypted_key[5:] # Remove DPAPI
decrypted_key = win32crypt.CryptUnprotectData(encrypted_key, None, None, None, 0)[1] # Decrypt key
Шифрование файлов cookie выполняется с помощью AES-256 в режиме GCM . Это аутентифицированное шифрование, которое гарантирует конфиденциальность и подлинность / целостность. Во время шифрования генерируется тег аутентификации, который используется для проверки целостности во время дешифрования. Режим GCM основан на режиме CTR и использует IV (nonce). В дополнение к 32-байтовому ключу для расшифровки требуются одноразовый номер и тег аутентификации.
Зашифрованные данные начинаются с кодировки ASCII v10
(т. Е. 0x763130
), за которым следует одноразовый номер 12 байтов, фактический зашифрованный текст и, наконец, тег аутентификации 16 байтов. Отдельные компоненты можно разделить следующим образом:
data = bytes.fromhex('763130...') # the encrypted cookie
nonce = 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
Примечание. Как правило, сохраняются также файлы cookie, которые были сохранены с Chrome версиями ниже v80 и поэтому зашифрованы DPAPI. Файлы cookie, зашифрованные DPAPI, можно узнать по тому, что они начинаются с последовательности 0x01000000D08C9DDF0115D1118C7A00C04FC297EB
, здесь и здесь, раздел О DPAPI . Эти куки-файлы, конечно, могут быть расшифрованы не так, как описано выше, но с использованием предыдущей процедуры для куки-файлов, зашифрованных DPAPI. Инструменты для просмотра файлов cookie в незашифрованном или зашифрованном виде: ChromeCookiesView или Браузер БД для SQLite соответственно.