python 获取谷歌浏览器保存的密码


Posted in Python onJanuary 06, 2021

由于谷歌浏览器80以后版本采用了新的加密方式,所以记录在这里

# -*- coding:utf-8 -*-
import os
import json
import base64
import sqlite3
from win32crypt import CryptUnprotectData
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

#  pip install pywin32
#  pip install cryptography
#  文档:https://source.chromium.org/chromium/chromium/src/+/master:components/os_crypt/os_crypt_win.cc?q=OSCrypt&ss=chromium

class Chrome:
  def __init__(self):
    self.local_state = os.environ['LOCALAPPDATA'] + r'\Google\Chrome\User Data\Local State'
    self.cookie_path = os.environ['LOCALAPPDATA'] + r"\Google\Chrome\User Data\Default\Login Data"

  def get_key(self):
    with open(self.local_state, 'r', encoding='utf-8') as f:
      base64_encrypted_key = json.load(f)['os_crypt']['encrypted_key']
    encrypted_key_with_header = base64.b64decode(base64_encrypted_key)
    # 去掉开头的DPAPI
    encrypted_key = encrypted_key_with_header[5:]
    key_ = CryptUnprotectData(encrypted_key, None, None, None, 0)[1]
    return key_

  @staticmethod
  def decrypt_string(key, secret, salt=None):
    """
    解密
    """
    # 去掉'v10'
    nonce, cipher_bytes = secret[3:15], secret[15:]
    aes_gcm = AESGCM(key)
    return aes_gcm.decrypt(nonce, cipher_bytes, salt).decode('utf-8')

  @staticmethod
  def encrypt_string(key, data, salt=None):
    """
    加密
    """
    aes_gcm = AESGCM(key)
    prefix = "v10".encode("utf-8")
    # 随机生成12位字符串,拼接"v10" 共15位
    nonce = os.urandom(12)
    cipher_bytes = data.encode("utf-8")
    return prefix + nonce + aes_gcm.encrypt(nonce, cipher_bytes, salt)

  def get_password(self, host):
    sql = f"select username_value,password_value from logins where signon_realm ='{host}';"
    with sqlite3.connect(self.cookie_path) as conn:
      cu = conn.cursor()
      res = cu.execute(sql).fetchall()
      cu.close()
      result = []
      key = self.get_key()

      for name, encrypted_value in res:

        if encrypted_value[0:3] == b'v10' or encrypted_value[0:3] == b'v11':
          password = self.decrypt_string(key, encrypted_value)
        else:
          password = CryptUnprotectData(encrypted_value)[1].decode()
        result.append({'user_name': name, 'password': password})
      return result

  def set_password(self, host, username, password):
    key = self.get_key()
    encrypt_secret = self.encrypt_string(key, password)
    sq = f"""update logins set password_value=x'{encrypt_secret.hex()}' where signon_realm ='{host}' and username_value='{username}';"""
    with sqlite3.connect(self.cookie_path) as conn:
      cu = conn.cursor()
      cu.execute(sq)
      conn.commit()


if __name__ == '__main__':
  a = Chrome()
  aa = a.get_password("https://baidu.com")
  print(aa)

以上就是python 获取谷歌浏览器保存的密码的详细内容,更多关于python 获取浏览器密码的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
跟老齐学Python之编写类之一创建实例
Oct 11 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
Jan 04 Python
简单实现python画圆功能
Jan 25 Python
selenium+python 去除启动的黑色cmd窗口方法
May 22 Python
numpy中loadtxt 的用法详解
Aug 03 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
python+selenium select下拉选择框定位处理方法
Aug 24 Python
pytorch:torch.mm()和torch.matmul()的使用
Dec 27 Python
Python不支持 i ++ 语法的原因解析
Jul 22 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 Python
python基于OpenCV模板匹配识别图片中的数字
Mar 31 Python
总结Python使用过程中的bug
Jun 18 Python
python实现PolynomialFeatures多项式的方法
Jan 06 #Python
pytorch中index_select()的用法详解
Jan 06 #Python
Python之京东商品秒杀的实现示例
Jan 06 #Python
Python实现小黑屋游戏的完整实例
Jan 06 #Python
Jupyter Notebook 安装配置与使用详解
Jan 06 #Python
在Ubuntu中安装并配置Pycharm教程的实现方法
Jan 06 #Python
python requests库的使用
Jan 06 #Python
You might like
PHP 和 MySQL 基础教程(三)
2006/10/09 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
如何使用Strace调试工具
2013/06/03 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
文字幻灯片
2006/06/26 Javascript
JS宝典学习笔记(下)
2007/01/10 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
jquery根据name属性查找的小例子
2013/11/21 Javascript
jquery学习总结(超级详细)
2014/09/04 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
微信小程序 数据绑定及运算的简单实例
2017/09/20 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
用Python实现命令行闹钟脚本实例
2016/09/05 Python
python实现矩阵打印
2019/03/02 Python
Python3.5局部变量与全局变量作用域实例分析
2019/04/30 Python
基于python调用psutil模块过程解析
2019/12/20 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
班风学风建设方案
2014/05/06 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
学生逃课检讨书
2015/02/17 职场文书
python基础之停用词过滤详解
2021/04/21 Python
实现GO语言对数组切片去重
2022/04/20 Golang