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"