Chrome 80 как декодировать куки - PullRequest
1 голос
/ 26 февраля 2020

У меня был рабочий скрипт для открытия и расшифровки файлов cookie Google Chrome, который выглядел следующим образом:

decrypted = win32crypt.CryptUnprotectData(enctypted_cookie_value, None, None, None, 0)

Похоже, что после обновления 80 оно больше не является допустимым решением.

Согласно этому сообщению в блоге https://blog.nirsoft.net/2020/02/19/tools-update-new-encryption-chrome-chromium-version-80/ кажется, что мне нужно CryptUnprotectData для encrypted_key из файла Local State, чем каким-то образом расшифровать cook ie, используя расшифрованный ключ.

Для первой части я получил свой encrypted_key

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 = bytearray(encrypted_key, 'utf-8')

Затем я попытался расшифровать его

decrypted_key = win32crypt.CryptUnprotectData (encrypted_key, None, None, None, 0)

И получил исключение :

pywintypes.error: (13, 'CryptProtectData', 'The data is invalid.')

и я не могу понять, как это исправить

Также для второй части шифрования кажется, что я должен использовать pycryptodome, что-то вроде этого фрагмента:

cipher = AES.new(encrypted_key, AES.MODE_GCM, nonce=nonce)
plaintext = cipher.decrypt(data)

Но я не могу понять, где я должен получить значение nonce

Может кто-нибудь объяснить, как правильно Chrome печенье расшифровывать?

Ответы [ 2 ]

6 голосов
/ 27 февраля 2020

Начиная с 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 соответственно.

0 голосов
/ 27 февраля 2020

Возможно, вы скопировали значение зашифрованного ключа DPAPI из одной учетной записи пользователя на Windows и пытаетесь вызвать CryptUnprotectData WinAPI, когда вы вошли в систему как другой пользователь. Это не будет работать по природе DPAPI.

...