美文网首页
Python Chrome 96版本以上获取cookie

Python Chrome 96版本以上获取cookie

作者: WMSmile | 来源:发表于2022-01-17 15:21 被阅读0次

    Python Chrome 96版本以上获取cookie

    Chrome96版本更新之后,chookie的位置变更,导致获取不到cookie的值。

    原因如下:

    96版本以前,cookie文件路径:./AppData/Local/Google/Chrome/User Data/default/Cookies

    96版本之后,cookie文件路径:./Google/Chrome/User Data/Default/Network/Cookies

    Python文件

    import sqlite3
    import urllib3
    import os
    import json
    import sys
    import base64
    from cryptography.hazmat.backends import default_backend
    from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    def dpapi_decrypt(encrypted):
        import ctypes
        import ctypes.wintypes
        class DATA_BLOB(ctypes.Structure):
            _fields_ = [('cbData', ctypes.wintypes.DWORD),
                        ('pbData', ctypes.POINTER(ctypes.c_char))]
        p = ctypes.create_string_buffer(encrypted, len(encrypted))
        blobin = DATA_BLOB(ctypes.sizeof(p), p)
        blobout = DATA_BLOB()
        retval = ctypes.windll.crypt32.CryptUnprotectData(
            ctypes.byref(blobin), None, None, None, None, 0, ctypes.byref(blobout))
        if not retval:
            raise ctypes.WinError()
        result = ctypes.string_at(blobout.pbData, blobout.cbData)
        ctypes.windll.kernel32.LocalFree(blobout.pbData)
        return result
    def aes_decrypt(encrypted_txt):
        with open(os.path.join(os.environ['LOCALAPPDATA'],
                               r"Google\Chrome\User Data\Local State"), encoding='utf-8', mode="r") as f:
            jsn = json.loads(str(f.readline()))
        encoded_key = jsn["os_crypt"]["encrypted_key"]
        encrypted_key = base64.b64decode(encoded_key.encode())
        encrypted_key = encrypted_key[5:]
        key = dpapi_decrypt(encrypted_key)
        nonce = encrypted_txt[3:15]
        cipher = Cipher(algorithms.AES(key), None, backend=default_backend())
        cipher.mode = modes.GCM(nonce)
        decryptor = cipher.decryptor()
        return decryptor.update(encrypted_txt[15:])
    def chrome_decrypt(encrypted_txt):
        if sys.platform == 'win32':
            try:
                if encrypted_txt[:4] == b'x01x00x00x00':
                    decrypted_txt = dpapi_decrypt(encrypted_txt)
                    return decrypted_txt.decode()
                elif encrypted_txt[:3] == b'v10':
                    decrypted_txt = aes_decrypt(encrypted_txt)
                    return decrypted_txt[:-16].decode()
            except WindowsError:
                return None
        else:
            raise WindowsError
    def get_cookies_from_chrome(domain):
        sql = f'SELECT name, encrypted_value as value FROM cookies where host_key like "%{domain}%"'
        # chrome 96 版本以下
        # filename = os.path.join(os.environ['USERPROFILE'], r'AppData\Local\Google\Chrome\User Data\default\Cookies')
        # chrome96 版本以上
        filename = os.path.join(os.environ['USERPROFILE'], r'AppData\Local\Google\Chrome\User Data\default\Network\Cookies')
        con = sqlite3.connect(filename)
        con.row_factory = sqlite3.Row
        cur = con.cursor()
        cur.execute(sql)
        cookie = ''
        for row in cur:
            print("1111>>>>>",row)
            if row['value'] is not None:
                name = row['name']
                value = chrome_decrypt(row['value'])
                print("2222>>>>",name,value)
                if value is not None:
                    cookie += name + '=' + value + ';'
        return cookie
    if __name__ == '__main__':
        domain = 'taobao.com'   # 目标网站域名
        cookie = get_cookies_from_chrome("")
        print(cookie)
    
    

    相关文章

      网友评论

          本文标题:Python Chrome 96版本以上获取cookie

          本文链接:https://www.haomeiwen.com/subject/nemchrtx.html