Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Chrome ver80+;登录数据解密问题_Python_Sqlite_Encryption_Aes_Shutil - Fatal编程技术网

Python Chrome ver80+;登录数据解密问题

Python Chrome ver80+;登录数据解密问题,python,sqlite,encryption,aes,shutil,Python,Sqlite,Encryption,Aes,Shutil,我以前的电脑窗口坏了。 我有完整的备份。我搜索并取消重新启动,无法从chrome的appdata中的文件中获取登录数据 这是我尝试过的python代码: 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.s

我以前的电脑窗口坏了。 我有完整的备份。我搜索并取消重新启动,无法从chrome的appdata中的文件中获取登录数据

这是我尝试过的python代码:

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:]  # removing DPAPI
    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:
        return "Chrome < 80"
        #print(e)
########HERE         ^


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)
            print("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
我还试着按菜单提供所需的文件


有任何隔离吗?

发布的代码在我的机器上工作,但只解密v80+的密码。对于较低的Chrome版本,需要不同的算法,因此需要不同的代码,请参阅。
utf-8 codec can't decode byte 0xcd in position 3: invalid continuation byte