詳解python如何提取瀏覽器中保存的網(wǎng)站登錄用戶名密碼
很多瀏覽器都貼心地提供了保存用戶密碼功能,用戶一旦開啟,就不需要每次都輸入用戶名、密碼,非常方便。作為python腳本,能否拿到用戶提前保存在瀏覽器中的用戶名密碼,用以自動(dòng)登錄呢?必須有,小爬已經(jīng)提前踩過很多坑,找到了可行的方案。
以Chrome瀏覽器為例,瀏覽器中的用戶數(shù)據(jù)(包含加密后的密碼)都存在下圖所示的位置中:
文件的路徑就像這樣 C: => Users => <Your_Name> => AppData =>Local => Google => Chrome => User Data =>Local State
由于每臺(tái)電腦的用戶名是不確定的,因此小爬這里用python中的OS庫來動(dòng)態(tài)得到:
local_computer_directory_path = os.path.join(os.environ["USERPROFILE"], "AppData", "Local", "Google", "Chrome","User Data", "Local State")
知道了具體位置后,我們需要先拿到加密后的密文,顯然該密碼肯定不是以明文的形式保存在文件中,否則安全無法保證。獲取密文之前,還得先知道用于加密的密鑰,這需要先安裝pycryptodomex庫,直接用pip來安裝即可。一切就緒,現(xiàn)在編寫一個(gè)獲取密鑰的python函數(shù):
import os,json,base64,sqlite3,win32crypt,shutil from Cryptodome.Cipher import AES #需要安裝pip install pycryptodomex 庫 from datetime import datetime, timedelta def fetching_encryption_key(): '''動(dòng)態(tài)獲取保存用戶數(shù)據(jù)的文件的路徑,然后讀出加密后的密文''' local_computer_directory_path = os.path.join(os.environ["USERPROFILE"], "AppData", "Local", "Google", "Chrome","User Data", "Local State") with open(local_computer_directory_path, "r", encoding="utf-8") as f: local_state_data = f.read() local_state_data = json.loads(local_state_data) # decoding the encryption key using base64 encryption_key = base64.b64decode( local_state_data["os_crypt"]["encrypted_key"]) # remove Windows Data Protection API (DPAPI) str encryption_key = encryption_key[5:] # return decrypted key return win32crypt.CryptUnprotectData(encryption_key, None, None, None, 0)[1]
有了這個(gè)密鑰,咱們還需要編寫一個(gè)解密的方法將密碼變成明文,考慮到Chrome瀏覽器的版本80之前和之后用了截然不同的加密手段,因此,對(duì)應(yīng)的解密方法也不同,小爬將他們一并整合到解密的函數(shù)中:
def password_decryption(password, encryption_key): try: iv = password[3:15] password = password[15:] # generate cipher cipher = AES.new(encryption_key, AES.MODE_GCM, iv) # decrypt password return cipher.decrypt(password)[:-16].decode() except: try: return str(win32crypt.CryptUnprotectData(password, None, None, None, 0)[1]) except: return "No Passwords"
核心搞定之后,還涉及到一個(gè)知識(shí)點(diǎn),用于某個(gè)網(wǎng)站登錄的用戶名 以及加密后的密文存儲(chǔ)在哪里?別急,還是之前提到的Local State文件,其實(shí)它是一個(gè)本地sqlite3數(shù)據(jù)庫文件,我們可以借助sqlite3庫以及sql語法輕松獲取。當(dāng)然需要先知道目標(biāo)網(wǎng)站的域名,比如小爬就想取本地chrome瀏覽器中我自己保存用于登錄博客園網(wǎng)站(base_url="cnblogs.com")的用戶名密碼。另外需要注意的是,同一個(gè)網(wǎng)站,瀏覽器是支持同時(shí)保存幾組用戶名密碼的。代碼示例如下:
def get_url_credential(base_url): '''如果chrome瀏覽器本地存儲(chǔ)了OA密碼,則返回用戶和密碼列表,否則返回False''' key = fetching_encryption_key() db_path = os.path.join(os.environ["USERPROFILE"], "AppData", "Local", "Google", "Chrome", "User Data", "default", "Login Data") filename = "ChromePasswords.db" shutil.copyfile(db_path, filename) # 為了避免程序bug將原有的login Data 文件損壞,復(fù)制一份出來供程序用 # connecting to the database db = sqlite3.connect(filename) cursor = db.cursor() cursor.execute("select origin_url, action_url, username_value, password_value, date_created, date_last_used from logins order by date_last_used") user_name,pass_word=None,None userInfos=[] # 用于存放多組同一個(gè)網(wǎng)站的用戶名 密碼 for row in cursor.fetchall(): main_url = row[0] if base_url in main_url: user_name = row[2] pass_word = password_decryption(row[3], key) userInfos.append([user_name,pass_word]) cursor.close() db.close() try: os.remove(filename) except: pass return userInfos
到此這篇關(guān)于詳解python如何提取瀏覽器中保存的網(wǎng)站登錄用戶名密碼的文章就介紹到這了,更多相關(guān)python提取瀏覽器密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sublime python3 輸入換行不結(jié)束的方法
下面小編就為大家分享一篇sublime python3 輸入換行不結(jié)束的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04python小例子-縮進(jìn)式編碼+算術(shù)運(yùn)算符+定義與賦值
這篇文章主要給大家分享一些python學(xué)習(xí)小例子,內(nèi)容包括縮進(jìn)式編碼風(fēng)格、算術(shù)運(yùn)算符、定義與賦值,需要的小伙伴可以參考一下2022-04-04舉例講解Python中的算數(shù)運(yùn)算符的用法
這篇文章主要介紹了舉例講解Python中的算數(shù)運(yùn)算符的用法,是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05Python開發(fā)文字版密室逃脫游戲的實(shí)例(含代碼)
密室逃脫游戲是一種頗受歡迎的解謎類游戲,玩家通常需要通過觀察、推理、合作等方式解決一系列難題,以逃脫困境,在這篇博文中,我們將使用Python開發(fā)一個(gè)文字版密室逃脫游戲,旨在通過簡單的文本交互來呈現(xiàn)游戲的趣味性與挑戰(zhàn)性2025-04-04Pycharm github配置實(shí)現(xiàn)過程圖解
這篇文章主要介紹了Pycharm github配置實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Python實(shí)現(xiàn)隨機(jī)分層抽樣的示例詳解
在數(shù)據(jù)分析與機(jī)器學(xué)習(xí)的實(shí)踐中,抽樣是不可或缺的一步,分層抽樣作為一種常用的抽樣方法,能夠確保樣本在不同類別中的比例與總體一致,下面我們看看如何使用Python實(shí)現(xiàn)隨機(jī)分層抽樣吧2024-11-11解讀keras中的正則化(regularization)問題
這篇文章主要介紹了解讀keras中的正則化(regularization)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Python中tkinter的用戶登錄管理的實(shí)現(xiàn)
這篇文章主要介紹了Python中tkinter的用戶登錄管理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04利用python微信庫itchat實(shí)現(xiàn)微信自動(dòng)回復(fù)功能
最近發(fā)現(xiàn)了一個(gè)特別好玩的Python 微信庫itchat,可以實(shí)現(xiàn)自動(dòng)回復(fù)等多種功能,下面這篇文章主要給大家介紹了利用python微信庫itchat實(shí)現(xiàn)微信自動(dòng)回復(fù)功能的相關(guān)資料,需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。2017-05-05