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实现破解猜数游戏算法示例
Sep 25 Python
python多进程中的内存复制(实例讲解)
Jan 05 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
Python-copy()与deepcopy()区别详解
Jul 12 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
关于pytorch中全连接神经网络搭建两种模式详解
Jan 14 Python
python实时监控logstash日志代码
Apr 27 Python
tensorflow实现残差网络方式(mnist数据集)
May 26 Python
python如何爬取网页中的文字
Jul 28 Python
如何向scrapy中的spider传递参数的几种方法
Nov 18 Python
如何利用python正则表达式匹配版本信息
Dec 09 Python
python开发人人对战的五子棋小游戏
May 02 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导出oracle库的php代码
2009/04/20 PHP
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
2014/03/18 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
2014/05/03 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
Koa 中的错误处理解析
2019/04/09 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
PyTorch中的Variable变量详解
2020/01/07 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
Python 生成VOC格式的标签实例
2020/03/10 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
暑期社会实践先进个人主要事迹
2014/05/22 职场文书
服务标语大全
2014/06/18 职场文书
群众路线表态发言材料
2014/10/17 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
邀请函样本
2015/02/02 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
欠条范文
2015/07/03 职场文书
nginx设置资源请求目录的方式详解
2022/05/30 Servers