Chromium-Cookies entschlüsseln

Lesezeit: 3 Minuten

Benutzer-Avatar
Denken Sie an Chaos

Ich versuche, Chromium-Cookies in Python zu verwenden, da Chromium seine Cookies mit AES (mit CBC) verschlüsselt, muss ich dies umkehren.

Ich kann den AES-Schlüssel aus dem Schlüsselbund von OS X wiederherstellen (er ist in Base 64 gespeichert):

security find-generic-password -w -a Chrome -s Chrome Safe Storage
# From Python:
python -c 'from subprocess import PIPE, Popen; print(Popen(['security', 'find-generic-password', '-w', '-a', 'Chrome', '-s', 'Chrome Safe Storage'], stdout=PIPE).stdout.read().strip())'

Hier ist der Code, den ich habe, alles, was mir fehlt, ist die Cookies zu entschlüsseln:

from subprocess import PIPE, Popen
from sqlite3 import dbapi2

def get_encryption_key():
  cmd = ['security', 'find-generic-password', '-w', '-a', 'Chrome', '-s', 'Chrome Safe Storage']
  return Popen(cmd, stdout=PIPE).stdout.read().strip().decode('base-64')

def get_cookies(database):
  key = get_encryption_key()
  with dbapi2.connect(database) as conn:
    conn.rollback()
    rows = conn.cursor().execute('SELECT name, encrypted_value FROM cookies WHERE host_key like ".example.com"')

  cookies = {}
  for name, enc_val in rows:
    val = decrypt(enc_val, key) # magic missing
    cookies[name] = val

  return cookies

Ich habe einiges mit ausprobiert Das AES-Modul von pyCrypto sondern:

  1. Ich habe keinen Initialisierungsvektor (IV)
  2. enc_val ist kein Vielfaches von 16 in der Länge

Hier sind einige Links, die nützlich erscheinen:

Können Sie mir helfen, das herauszufinden?

Benutzer-Avatar
n8henrie

Sie sind auf dem richtigen Weg! Ich habe ein paar Tage daran gearbeitet und es endlich herausgefunden. (Vielen Dank an das OP für die hilfreichen Links zur Chromium-Quelle.)

Ich habe eine aufgestellt Post mit etwas mehr Details und einem funktionierenden Skript, aber hier ist die Grundidee:

#! /usr/bin/env python3

from Crypto.Cipher import AES
from Crypto.Protocol.KDF import PBKDF2

# Function to get rid of padding
def clean(x): 
    return x[:-x[-1]].decode('utf8')

# replace with your encrypted_value from sqlite3
encrypted_value = ENCRYPTED_VALUE 

# Trim off the 'v10' that Chrome/ium prepends
encrypted_value = encrypted_value[3:]

# Default values used by both Chrome and Chromium in OSX and Linux
salt = b'saltysalt'
iv = b' ' * 16
length = 16

# On Mac, replace MY_PASS with your password from Keychain
# On Linux, replace MY_PASS with 'peanuts'
my_pass = MY_PASS
my_pass = my_pass.encode('utf8')

# 1003 on Mac, 1 on Linux
iterations = 1003

key = PBKDF2(my_pass, salt, length, iterations)
cipher = AES.new(key, AES.MODE_CBC, IV=iv)

decrypted = cipher.decrypt(encrypted_value)
print(clean(decrypted))

  • Fantastisch! Ich habe nur sauber umgeschrieben, um mit Python 2 zu arbeiten: def clean(x): return x[:-ord(x[-1])] (PEP8 sagt kein f = Lambda 😉 )

    – Denken Sie Chaos

    19. Mai 2014 um 15:32 Uhr

  • Süss. Bearbeitet, um dies widerzuspiegeln.

    – n8henrie

    19. Mai 2014 um 19:43 Uhr

  • Wie kann ich die importierten Pakete installieren?

    – Sergej Krivosheenko

    4. November 2019 um 10:23 Uhr

  • pip install pycrypto, denke ich, aber ich habe all dies auch in einem Paket namens pycookiecheat gebündelt, das jetzt die cryptography Paket

    – n8henrie

    4. November 2019 um 14:34 Uhr


Benutzer-Avatar
Ski

Die Antwort von @ n8henrie hat bei mir funktioniert, aber in meiner Umgebung mit Ubuntu verwendet Chrome keine “Erdnüsse” mehr als Passwort, sondern wird im Gnome-Schlüsselbund gespeichert. Ich habe es geschafft, das Passwort für die Entschlüsselung zu erhalten Geheimspeicher Paket so:

import secretstorage

bus = secretstorage.dbus_init()
collection = secretstorage.get_default_collection(bus)
for item in collection.get_all_items():
    if item.get_label() == 'Chrome Safe Storage':
        MY_PASS = item.get_secret()
        break
else:
    raise Exception('Chrome password not found!')

  • Richtig – falls es jemanden interessiert, dieses Problem mit dem Ubuntu / Gnome-Schlüsselring wurde ein wenig diskutiert in dieser Angelegenheit in meinem Paket pycookiecheat, das als Ergebnis eine ähnliche Lösung implementiert hat.

    – n8henrie

    29. Juni 2017 um 2:36 Uhr

1012090cookie-checkChromium-Cookies entschlüsseln

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy