Skip to content Skip to sidebar Skip to footer

Decrypting Chromium Cookies

I'm trying to use Chromium cookies in Python, because Chromium encrypts its cookies using AES (with CBC) I need to reverse this. I can recover the AES key from OS X's Keychain (it'

Solution 1:

You're on the right track! I've been working on this for a few days and finally figured it out. (Many thanks to the OP for the helpful links to the Chromium source.)

I've put up a post with a little more detail and a working script, but here is the basic idea:

#! /usr/bin/env python3

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

# Functiontoget 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')

# 1003on Mac, 1on Linux
iterations = 1003key = PBKDF2(my_pass, salt, length, iterations)
cipher = AES.new(key, AES.MODE_CBC, IV=iv)

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

Solution 2:

@n8henrie's answer worked for me, but in my environment with Ubuntu, Chrome no longer use 'peanuts' as password, instead it's stored in gnome keyring. I managed to get the password for decryption using secretstorage package like this:

importsecretstoragebus= 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()
        breakelse:
    raise Exception('Chrome password not found!')

Post a Comment for "Decrypting Chromium Cookies"