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爬取csdn博客访问量
Feb 14 Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
Feb 07 Python
将TensorFlow的模型网络导出为单个文件的方法
Apr 23 Python
Python continue继续循环用法总结
Jun 10 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
Oct 14 Python
Python实现FTP弱口令扫描器的方法示例
Jan 31 Python
Python3实现发送邮件和发送短信验证码功能
Jan 07 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
Apr 25 Python
Pycharm调试程序技巧小结
Aug 08 Python
PyQT5速成教程之Qt Designer介绍与入门
Nov 02 Python
利用python制作拼图小游戏的全过程
Dec 04 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批量上传的实现代码
2013/06/09 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
让IE8支持DOM 2(不用框架!)
2009/12/31 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
vue 强制组件重新渲染(重置)的两种方案
2019/10/29 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
2020/09/22 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
python paramiko模块学习分享
2017/08/23 Python
同时安装Python2 & Python3 cmd下版本自由选择的方法
2017/12/09 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
Django配置MySQL数据库的完整步骤
2019/09/07 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
七年级音乐教学反思
2014/01/26 职场文书
洗车工岗位职责
2014/03/15 职场文书
项目经理任命书范本
2014/06/05 职场文书
安全环保演讲稿
2014/08/28 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
储备店长岗位职责
2015/04/14 职场文书
党员证明模板
2015/06/19 职场文书
vue3如何优雅的实现移动端登录注册模块
2021/03/29 Vue.js