Расшифровка паролей google_chrome
На строке
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()
Ответы (1 шт):
Автор решения: gord1402
→ Ссылка
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()