网上搜一下,读取cookie的基本都是这份代码。我也忘了是从那里抄来的了,这里贴一下 ,对于最新的chrome需要修改下路径:
# 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')
全部代码:
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 = '' cookie_dict = {} 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 + ';' cookie_dict[name] = value return cookie_dict if __name__ == '__main__': domain = 'taobao.com' # 目标网站域名 cookie = get_cookies_from_chrome("") print(cookie)
2 comments
这能拿到权限吗,那不是可以黑别人
可以获取指定网站的cookie,这个代码主要是在微图坊爬虫中使用了。微图坊如果没有cookie(账号信息)没有办法获取第二页的内容。当然如果在客户机上运行理论上可以获取各种网站的cookie,有了cookie就可以用来伪造登录信息,冒充用户发布一些虚假内容,或者去买一些乱七八糟的东西(现在这种网站基本没有了)