Я пытаюсь использовать Chromium cookie в Python, потому что Chromium шифрует свои файлы cookie с помощью AES (с CBC). Мне нужно отменить это.
Я могу восстановить ключ AES из Keychain OS X (он хранится в Base 64):
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())'
Здесь код, который у меня есть, все, что мне не хватает, - это дешифрование файлов cookie:
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
Я попробовал кучу вещей с pyCrypto AES module, но:
- У меня нет вектора инициализации (IV)
-
enc_val
не является кратным 16 в длину
Вот некоторые полезные ссылки:
- фиксация, которая начала все это
- components/encryptor/keychain_password_mac.mm
- Генерация ключа AES (не используется в OS X, но может помочь кому-то другому)
- функция вставки файлов cookie
Можете ли вы помочь мне понять это?