python获取浏览器Cookies作业

python获取浏览器Cookies作业,第1张

python获取浏览器Cookies作业

第一题

win10系统中本地cookie的存放位置为:

    IE浏览器:%APPDATA%MicrosoftWindowscookies 目录中的xxx.txt文件 (IE浏览器分开存放的);

    火狐浏览器:%APPDATA%MozillaFirefoxProfiles 目录中的???.default-release或???.default目录,名为cookies.sqlite的文件;

   谷歌浏览器:%LOCALAPPDATA%GoogleChromeUser DataDefault 目录中,名为cookies的文件。

   使用以下代码获取你所用机器的不同浏览器的cookie的文件夹,并打印输出。

只写了一个谷歌的例子

import os
import json
import base64
import sqlite3
import win32crypt
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

# 读取chrome保存在json文件中的key(str)
def GetString(LocalState):
    with open(LocalState, 'r', encoding='utf-8') as f:
        s = json.load(f)['os_crypt']['encrypted_key']
    return s

# base64解码,DPAPI解密,得到真实的AESGCM key(bytes)
def pull_the_key(base64_encrypted_key):
    encrypted_key_with_header = base64.b64decode(base64_encrypted_key)
    encrypted_key = encrypted_key_with_header[5:]
    key = win32crypt.CryptUnprotectData(encrypted_key, None, None, None, 0)[1]
    return key

# AESGCM解密
def DecryptString(key, data):
    nonce, cipherbytes = data[3:15], data[15:]
    aesgcm = AESGCM(key)
    plainbytes = aesgcm.decrypt(nonce, cipherbytes, None)
    plaintext = plainbytes.decode('utf-8')
    return plaintext

if __name__ == '__main__':

    UserDataDir = os.environ['LOCALAPPDATA'] + r'GoogleChromeUser Data'
    LocalStateFilePath = UserDataDir + r'Local State'
    cookiesFilePath = UserDataDir + r'Defaultcookies'
    print(cookiesFilePath)

    con = sqlite3.connect(cookiesFilePath)
    con.text_factory = bytes
    res = con.execute('select host_key,name,encrypted_value from cookies').fetchall()
    con.close()
    print(res)

    key = pull_the_key(GetString(LocalStateFilePath))
    for i in res:
        print(i[0], i[1], DecryptString(key, i[2]))

第二题 

以下是关于SQL接口的扩展库sqlite3的介绍:

        https://www.runoob.com/sqlite/sqlite-python.html

请使用 sqlite3创建一个对cookie数据库文件的数据库连接对象,解析并打印cookies.sqlite文件的内容。

if 'default-release-2' in folds_end:
    cookie_fold_index = folds_end.index('default-release-2')

如果没有出现以下结果可以试着手动改上面的default-release-2,可以改为我画红圈的后面的那个数字我这里是default-release-2,你可以改成你自己相应的default-release-xxx,第三题的同样如此

如果后面还是没下面这些输出,可以看看浏览器是否保留cookies

 

import os
import sqlite3
def get_firfox_cookie_path():
    cookiepath_common = os.environ['APPDATA'] + r"MozillaFirefoxProfiles"
    folds_arr = os.listdir(cookiepath_common)
    folds_end = [os.path.splitext(file)[-1][1:] for file in folds_arr]
    print(cookiepath_common,folds_arr)
    for i in folds_end:
        print(i)
    if 'default-release-2' in folds_end:
        cookie_fold_index = folds_end.index('default-release-2')
    else:
        cookie_fold_index = folds_end.index('default')
    cookie_fold = folds_arr[cookie_fold_index]
    cookie_path = os.path.join(cookiepath_common, cookie_fold)
    return os.path.join(cookie_path, 'cookies.sqlite')

def printcookies(cookiesDB):
    try:
        conn = sqlite3.connect(cookiesDB)
        c = conn.cursor()
        c.execute('SELECt host, name, value FROM moz_cookies')
        for row in c:
            host = str(row[0])
            name = str(row[1])
            value = str(row[2])
            print ('Host: ' + host + ', cookie: ' + name + ', Value: ' + value)
    except Exception as e:
        if 'encrypted' in str(e):
            print('Error')

printcookies(get_firfox_cookie_path())

第三题

win10系统中火狐浏览器的书签及其访问记录存放位置为:%APPDATA%MozillaFirefoxProfiles 目录中的xxx.default目录,名为places.sqlite的文件。

要求:使用前两题的方法解析并打印输出win10系统中火狐浏览器的书签及其访问记录。

    主要代码:

  conn = sqlite3.connect(places.sqlite文件)

  c = conn.cursor()

  c.execute("select url, datetime(last_visit_date/1000000, 'unixepoch'), title from moz_places;") 

import os
import sqlite3
def get_firfox_cookie_path():
    cookiepath_common = os.environ['APPDATA'] + r"MozillaFirefoxProfiles"
    folds_arr = os.listdir(cookiepath_common)
    folds_end = [os.path.splitext(file)[-1][1:] for file in folds_arr]
    for i in folds_end:
        print(i)
    if 'default-release-2' in folds_end:
        cookie_fold_index = folds_end.index('default-release-2')
    else:
        cookie_fold_index = folds_end.index('default')
    cookie_fold = folds_arr[cookie_fold_index]
    cookie_path = os.path.join(cookiepath_common, cookie_fold)
    return os.path.join(cookie_path, 'places.sqlite')

def printcookies(cookiesDB):
    try:
        conn = sqlite3.connect(cookiesDB)
        c = conn.cursor()
        c.execute("select url, datetime(last_visit_date/1000000, 'unixepoch'), title from moz_places;")
        for row in c:
            url = str(row[0])
            datetime = str(row[1])
            title = str(row[2])
            print ('Url: ' + url + ', datatime: ' + datetime + ', title: ' + title)
    except Exception as e:
        if 'encrypted' in str(e):
            print('Error')

printcookies(get_firfox_cookie_path())

运行结果如图

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5073648.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存