Расшифровка ключа и паролей Google-Chrome
Хочу не много разобраться в коде, а именно вот в этой строчке:
key = base64.b64decode(matches[0])[5:]
Не очень понимаю, что означает [0] и [5:] и для чего они нужны. Объясните пожалуйста или скиньте ссылку, где можно почитать.
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():
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)
Ответы (1 шт):
Автор решения: gord1402
→ Ссылка
matches[0] - функция поиска модуля re findall возвращает все вхождения паттерна в строку, то есть если он будет входить 1 раз то будет список с одним элементом строкой ['вот так'] и нам нужно её получить поэтому берём первый элемент списка вот так [0].
[5:] - Первые 5 символов ключа это DPAPI они будут мешать расшифровке поэтому мы их удаляем двоеточие означает взятие всех элементов после индекса в данном случае 5.