Расшифровка паролей google_chrome

Рейтинг: 0Ответов: 1Опубликовано: 13.05.2023

На строке

pwd = win32crypt.CryptUnprotectData(password_value).decode('utf8')"

выскакивает ошибка

(87, 'CryptUnprotectData', 'Параметр задан неверно.')

Так понимаю, что параметр задан не верно, а как правильно его задать - не доходит.

import os
import sqlite3
import win32crypt

chrome_pass = 'C:\\Users\\Default\\AppData\\Local\\Google_Chrome\\Login Data'

def Chrome():
    try:
   
        if os.path.exists(chrome_pass) == True:
            conn = sqlite3.connect(chrome_pass)
            cursor = conn.cursor()
            cursor.execute('SELECT origin_url, username_value, password_value FROM Logins')
            show = cursor.fetchall()
            for origin_url, username_value, password_value in show:
                pwd = win32crypt.CryptUnprotectData(password_value).decode('utf8')
                origin_url = [0]
                username_value = [1]
                password_value = [2]
                text = origin_url + '\n'+ username_value + '\n' + password_value + '\n'
                print(text)
                
    finally:
        
             textt = 'passsword not found'
             print(textt)
                             
Chrome()

Ответы

▲ 2Принят

Chrome использует немного другую систему шифрования пароля нужно сначала найти ключ в Local State вот исправленный код (нужно установить pycryptodomex командой pip install pycryptodomex):

import base64
import os
import re
import shutil
import sqlite3

import win32crypt
from Cryptodome.Cipher import AES

chrome_pass = os.getenv('LOCALAPPDATA') + r"\Google\Chrome\User Data\Default\Login Data"
chrome_key = os.getenv('LOCALAPPDATA') + r"\Google\Chrome\User Data\Local State"


def chrome():
    try:
        if os.path.exists(chrome_pass):
            with open(chrome_key, 'r') as f:
                matches = re.findall(r'"encrypted_key":"(.+?)"', f.read())
                key = base64.b64decode(matches[0])[5:]
                secret_key = win32crypt.CryptUnprotectData(key, None, None, None, 0)[1]
            shutil.copy2(chrome_pass, "Logincopy.db")
            conn = sqlite3.connect("Logincopy.db")
            cursor = conn.cursor()
            cursor.execute('SELECT origin_url, username_value, password_value FROM Logins')
            show = cursor.fetchall()
            for origin_url, username_value, password_value in show:
                print(password_value)
                initialisation_vector = password_value[3:15]
                encrypted_password = password_value[15:-16]
                cipher = AES.new(secret_key, AES.MODE_GCM, initialisation_vector)
                decrypted_pass = cipher.decrypt(encrypted_password)
                decrypted_pass = decrypted_pass.decode()
                text = origin_url + '\n' + username_value + '\n' + decrypted_pass + '\n'
                print(text)

    finally:
        textt = 'passsword not found'
        print(textt)


chrome()