广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何使用Python提取Chrome浏览器保存的密码
  • 424
分享到

如何使用Python提取Chrome浏览器保存的密码

2024-04-02 19:04:59 424人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

由于Chrome会将大量浏览数据本地保存磁盘中,在本教程中,我们将编写 python 代码来提取 windows 计算机上 Chrome 中保存的密码。 首先,让我们安装所需的库:

由于Chrome会将大量浏览数据本地保存磁盘中,在本教程中,我们将编写 python 代码来提取 windows 计算机上 Chrome 中保存的密码。

首先,让我们安装所需的库:

pip install pycryptodome pypiwin32

打开一个新的 Python 文件,并导入必要的模块:


import os
import JSON
import base64
import sqlite3
import win32crypt
from Crypto.Cipher import AES
import shutil
from datetime import timezone, datetime, timedelta

在直接进入提取 chrome密码之前,我们需要定义一些有用的函数来帮助我们在主函数中。


def get_chrome_datetime(chromedate):
    """从chrome格式的datetime返回一个`datetime.datetime`对象
因为'chromedate'的格式是1601年1月以来的微秒数"""
    return datetime(1601, 1, 1) + timedelta(microseconds=chromedate)

def get_encryption_key():
    local_state_path = os.path.join(os.environ["USERPROFILE"],"AppData", "Local", "Google", "Chrome","User Data", "Local State")
    with open(local_state_path, "r", encoding="utf-8") as f:
        local_state = f.read()
        local_state = json.loads(local_state)

    # 从Base64解码加密密钥
    key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
    # 删除 DPapi str
    key = key[5:]
    # 返回最初加密的解密密钥
    # 使用从当前用户的登录凭据派生的会话密钥
    # 官方文档doc: Http://timgolden.me.uk/pywin32-docs/win32crypt.html
    return win32crypt.CryptUnprotectData(key, None, None, None, 0)[1]


def decrypt_password(passWord, key):
    try:
        # 获取初始化向量
        iv = password[3:15]
        password = password[15:]
        # 生成密码
        cipher = AES.new(key, AES.MODE_GCM, iv)
        # 解密密码
        return cipher.decrypt(password)[:-16].decode()
    except:
        try:
            return str(win32crypt.CryptUnprotectData(password, None, None, None, 0)[1])
        except:
            # not supported
            return ""
  • get_chrome_datetime()函数负责将 chrome 日期格式转换为人类可读的日期时间格式。
  • get_encryption_key()函数提取并解码用于加密密码的AES密钥,这"%USERPROFILE%\AppData\Local\Google\Chrome\User Data\Local State"作为 JSON 文件存储在路径中
  • decrypt_password() 将加密密码和 AES 密钥作为参数,并返回密码的解密版本。

下面是main主要功能:


def main():
    # 获取AES密钥
    key = get_encryption_key()
    # 本地sqlite Chrome数据库路径
    db_path = os.path.join(os.environ["USERPROFILE"], "AppData", "Local","Google", "Chrome", "User Data", "default", "Login Data")
    # 将文件复制到其他位置
    # 因为如果chrome当前正在运行,数据库将被定
    filename = "ChromeData.db"
    shutil.copyfile(db_path, filename)
    # 连接数据库
    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_created")
    # iterate over all rows
    for row in cursor.fetchall():
        origin_url = row[0]
        action_url = row[1]
        username = row[2]
        password = decrypt_password(row[3], key)
        date_created = row[4]
        date_last_used = row[5]        
        if username or password:
            print(f"Origin URL: {origin_url}")
            print(f"Action URL: {action_url}")
            print(f"Username: {username}")
            print(f"Password: {password}")
        else:
            continue
        if date_created != 86400000000 and date_created:
            print(f"Creation date: {str(get_chrome_datetime(date_created))}")
        if date_last_used != 86400000000 and date_last_used:
            print(f"Last Used: {str(get_chrome_datetime(date_last_used))}")
        print("="*50)
    cursor.close()
    db.close()
    try:
        # 尝试删除复制的db文件
        os.remove(filename)
    except:
        pass

首先,我们使用之前定义的get_encryption_key()函数获取加密密钥,然后我们将 sqlite 数据库(位于"%USERPROFILE%\AppData\Local\Google\Chrome\User Data\default\Login Data"保存密码的位置)复制到当前目录并连接到它,这是因为原始数据库文件将被锁定Chrome 当前正在运行。

之后,我们对登录表进行选择查询并遍历所有登录行,我们还解密每个密码date_created并将date_last_used日期时间重新格式化为更易于阅读的格式。

最后,我们打印凭据并从当前目录中删除数据库副本。

让我们调用主函数,完美提取Chrome浏览器保存的密码:

完整代码


import os
import json
import base64
import sqlite3
import win32crypt
from Crypto.Cipher import AES
import shutil
from datetime import  datetime, timedelta

def get_chrome_datetime(chromedate):
    """从chrome格式的datetime返回一个`datetime.datetime`对象
因为'chromedate'的格式是1601年1月以来的微秒数"""
    return datetime(1601, 1, 1) + timedelta(microseconds=chromedate)

def get_encryption_key():
    local_state_path = os.path.join(os.environ["USERPROFILE"],
                                    "AppData", "Local", "Google", "Chrome",
                                    "User Data", "Local State")
    with open(local_state_path, "r", encoding="utf-8") as f:
        local_state = f.read()
        local_state = json.loads(local_state)

    key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
   
    key = key[5:]
    
    return win32crypt.CryptUnprotectData(key, None, None, None, 0)[1]


def decrypt_password(password, key):
    try:
        iv = password[3:15]
        password = password[15:]
        cipher = AES.new(key, AES.MODE_GCM, iv)
        return cipher.decrypt(password)[:-16].decode()
    except:
        try:
            return str(win32crypt.CryptUnprotectData(password, None, None, None, 0)[1])
        except:
            # not supported
            return ""


def main():
    key = get_encryption_key()
    db_path = os.path.join(os.environ["USERPROFILE"], "AppData", "Local",
                            "Google", "Chrome", "User Data", "default", "Login Data")
    filename = "ChromeData.db"
    shutil.copyfile(db_path, filename)
    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_created")
    # iterate over all rows
    for row in cursor.fetchall():
        origin_url = row[0]
        action_url = row[1]
        username = row[2]
        password = decrypt_password(row[3], key)
        date_created = row[4]
        date_last_used = row[5]        
        if username or password:
            print(f"Origin URL: {origin_url}")
            print(f"Action URL: {action_url}")
            print(f"Username: {username}")
            print(f"Password: {password}")
        else:
            continue
        if date_created != 86400000000 and date_created:
            print(f"Creation date: {str(get_chrome_datetime(date_created))}")
        if date_last_used != 86400000000 and date_last_used:
            print(f"Last Used: {str(get_chrome_datetime(date_last_used))}")
        print("="*50)

    cursor.close()
    db.close()
    try:
        # try to remove the copied db file
        os.remove(filename)
    except:
        pass


if __name__ == "__main__":
    main()

以上就是教你用Python提取Chrome浏览器保存的密码的详细内容,更多关于Python提取Chrome浏览器保存的密码的资料请关注编程网其它相关文章!

--结束END--

本文标题: 如何使用Python提取Chrome浏览器保存的密码

本文链接: https://www.lsjlt.com/news/127866.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用Python提取Chrome浏览器保存的密码
    由于Chrome会将大量浏览数据本地保存磁盘中,在本教程中,我们将编写 Python 代码来提取 Windows 计算机上 Chrome 中保存的密码。 首先,让我们安装所需的库: ...
    99+
    2022-11-12
  • 怎么使用Python提取Chrome浏览器保存的密码
    小编给大家分享一下怎么使用Python提取Chrome浏览器保存的密码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!由于Chrome会将大量浏览数据本地保存磁盘中,在本教程中,我们将编写 Python 代码来提取 Wind...
    99+
    2023-06-15
  • 如何实现Chrome浏览器的自动保存密码提示功能禁用
    这篇文章主要介绍“如何实现Chrome浏览器的自动保存密码提示功能禁用”,在日常操作中,相信很多人在如何实现Chrome浏览器的自动保存密码提示功能禁用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何实现C...
    99+
    2023-06-08
  • 如何查看浏览器保存的密码
    这篇文章主要为大家展示了“如何查看浏览器保存的密码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何查看浏览器保存的密码”这篇文章吧。方法/步骤:打开开始菜单,随后在搜索框中输入“凭据管理器”并...
    99+
    2023-06-27
  • 谷歌浏览器不提示保存密码如何解决
    这期内容当中小编将会给大家带来有关谷歌浏览器不提示保存密码如何解决,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。操作环境:windows7系统、Dell G3电脑、Google Chrome88.0.43...
    99+
    2023-06-07
  • 怎么使用python提取chrome浏览器的历史记录及收藏夹
    本篇内容介绍了“怎么使用python提取chrome浏览器的历史记录及收藏夹”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!(一)查询chro...
    99+
    2023-06-29
  • 电脑360浏览器如何保存网页账号密码
    这篇文章主要介绍“电脑360浏览器如何保存网页账号密码”,在日常操作中,相信很多人在电脑360浏览器如何保存网页账号密码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”电脑360浏览器如何保存网页账号密码”的疑...
    99+
    2023-07-01
  • windows中如何取消浏览器弹出的是否保存网页密码弹窗
    这篇文章给大家分享的是有关windows中如何取消浏览器弹出的是否保存网页密码弹窗的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。解决方法/步骤:点击开始菜单并打开控制面板界面。在打开的界面中选择网络和intern...
    99+
    2023-06-27
  • Python爬虫如何使用浏览器的cookies browsercookie
    这篇文章给大家介绍Python爬虫如何使用浏览器的cookies browsercookie,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。很多用Python的人可能都写过网络爬虫,自动化获取网络数据确实是一件令人愉悦的...
    99+
    2023-06-02
  • 如何使用 Python 容器提高代码的可读性?
    Python 是一种优秀的编程语言,它拥有丰富的数据类型和容器类型,例如列表、字典、元组和集合等。使用这些容器类型可以大大提高代码的可读性和可维护性,使得代码更易于理解和修改。本文将介绍如何使用 Python 容器提高代码的可读性,并且通过...
    99+
    2023-07-02
    容器 http shell
  • 如何在 Python 中使用缓存对象框架来提高您的代码效率?
    Python 是一种流行的编程语言,它的灵活性和易用性使其成为了很多开发人员的选择。但是,当涉及到大量数据处理时,Python 的速度可能会变慢,这是因为它是一种解释型语言。此时,使用缓存对象框架是提高Python代码效率的一个好方法。 本...
    99+
    2023-09-28
    缓存 对象 框架
  • 如何使用 Python 接口响应容器来提高代码的效率?
    在现代软件开发中,一个常见的问题是如何提高代码的效率。Python 是一种非常流行的编程语言,因为它非常易于学习和使用。Python 提供了许多内置的容器,如列表、元组、字典和集合,这些容器非常适合处理数据。但是,当你需要处理大量的数据时...
    99+
    2023-06-15
    接口 响应 容器
  • 如何使用Python中的内存管理技巧和优化算法提高代码性能和资源利用率
    如何使用Python中的内存管理技巧和优化算法提高代码性能和资源利用率引言:Python作为一种高级编程语言,以其简洁、易读的语法和强大的功能而受到广泛的应用。然而,由于其动态类型和垃圾收集机制的特性,Python在内存管理方面可能存在一些...
    99+
    2023-10-27
    内存管理 性能提升 优化算法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作