Расшифровка ключа и паролей Google-Chrome

Рейтинг: -3Ответов: 1Опубликовано: 14.05.2023

Хочу не много разобраться в коде, а именно вот в этой строчке:

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)

   



Ответы

▲ 0

matches[0] - функция поиска модуля re findall возвращает все вхождения паттерна в строку, то есть если он будет входить 1 раз то будет список с одним элементом строкой ['вот так'] и нам нужно её получить поэтому берём первый элемент списка вот так [0].
[5:] - Первые 5 символов ключа это DPAPI они будут мешать расшифровке поэтому мы их удаляем двоеточие означает взятие всех элементов после индекса в данном случае 5.