一段代码读取Chrome存储的所有账号密码和Cookie

先写结论:
Chrome密码管理里的账号密码,还有Cookie,安全性并不算太高,一段代码就可以自动读取并上报到其它地方。
尤其是国内用户大多喜欢破解软件,这些软件只要注入这样一段代码,就无声无息的把你的所有账号密码、网站Cookie都提取出来了,然后接收者可以做什么,完全凭想象了。
而你,还不知道什么情况下丢失的……
因此,不推荐使用Chrome的密码管理功能,尤其是很重要的密码,但是不用Cookie是不可能的。
所以,最根本的是不要乱运行不明来源的程序,包括那些破解程序,这点比较难就是了,大家应该改不了不用破解的习惯……


下面是正文:

安全警示

本文涉及到个人的敏感数据,仅作为研究和演示使用,请勿用于非法用途。
同时也警醒一下大家,还是避免用Chrome存储重要密码。
Cookie就没办法了,所以如果要运行什么破解程序之类,请尽量先清空Cookie后再操作。

数据存储路径

最近由于项目安全需要,对Chrome的数据进行了一些粗浅的研究,包括扩展的数据存储、密码管理的数据存储以及Cookie的数据存储,所有这些数据,都存储在chrome://version 的个人资料路径下:
在这里插入图片描述
以截图里的路径为例,下面先说明一下数据存储位置。

扩展(也叫插件)文件

扩展程序会存储在这个目录下:
C:\Users\youbl\AppData\Local\Google\Chrome\User Data\Default\Extensions
扩展数据一般会存储在这两个目录下(包括LocalStorage和IndexDB等):

  • C:\Users\youbl\AppData\Local\Google\Chrome\User Data\Default\Sync Extension Settings:
    存储扩展同步数据,如果Chrome登录了谷歌账号,该数据会被谷歌账号关联和同步
  • C:\Users\youbl\AppData\Local\Google\Chrome\User Data\Default\Local Extension Settings:
    存放扩展本地数据,不被谷歌官方同步

这3个目录下,都是一堆子目录,每个子目录,都代表一个扩展,跟chrome://extensions/页面的ID是一一对应的:
在这里插入图片描述
注:本文对扩展的数据内容不做介绍。

账号密码文件

你在Chrome中,记录的所有账号密码,都会出现在这里,点击这边的密码,都会要求你输出操作系统的登录密码,来进行验证,看起来是比较安全的
在这里插入图片描述
在这里插入图片描述
这些账号密码,实际的本地存储文件路径是:
C:\Users\youbl\AppData\Local\Google\Chrome\User Data\Default\Login Data
这是一个Sqlite数据库,可以使用任意一个数据库工具打开和查看数据,logins表就存储了所有账号密码,当然密码进行了加密,其它都是明文,比如url、账号。
密码如何解密,参看最后的代码:
在这里插入图片描述

Cookie文件

Cookie在Chrome的F12开发者工具=>Application,可以随时查看当前域名下的Cookie:
在这里插入图片描述
所有域名下的所有Cookie数据,实际的本地存储文件路径是:
C:\Users\youbl\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies
这也是一个Sqlite格式的数据库,跟密码一样,Cookie的value进行了加密,其它都是明文,比如主机、cookie-name等,value如何解密也请参看最后的代码:
在这里插入图片描述

解密密钥所在的Local State文件

上面说的账号密码和Cookie的value都是加密数据,解密的密钥,存储在这个文件里:
C:\Users\youbl\AppData\Local\Google\Chrome\User Data\Local State
这是一个明文的Json格式文件,密钥是是base64后存储在json的os_crypt.encrypted_key属性里,你可以自行用记事本或json查看工具,打开这个文件查看内容:
在这里插入图片描述

数据读取和解密

这里只介绍账号密码和Cookie的读取,你可以直接读取上面介绍的文件路径,不过我在测试过程中,只是读取,居然也造成了Sqlite文件的破坏,导致我的Chrome所有账号密码都丢失了,估计是读取和Chrome写入冲突导致了 -_-
所以,建议你在实验时,可以先关闭Chrome,再把这3个文件拷贝出来,对拷贝出来的文件进行读取测试:

  • copy "%LocalAppData%\Google\Chrome\User Data\Default\Network\Cookies" d:\
  • copy "%LocalAppData%\Google\Chrome\User Data\Default\Login Data" d:\
  • copy "%LocalAppData%\Google\Chrome\User Data\Local State" d:\
    注:请以你电脑上的实际路径为准,其它Chromium浏览器(比如edge),请去chrome://version页面查看实际路径

拷贝出来的,明文数据直接读取和输出就好了,对于密码和Cookie-value,需要遵循下面的解密步骤进行解密

解密密钥读取

上面说了,解密密钥在Local State文件里的os_crypt.encrypted_key属性里,这个字符串的解密步骤:

  • 先base64解码,得到一个字节数组
  • 移除数组前5位无效字符:DPAPI
  • 调用Windows系统解密函数进行解密:Crypt32Util.cryptUnprotectData
    注:这个密钥是使用Windows系统函数Crypt32Util.cryptProtectData加密的,该函数依赖系统上下文信息,包括登录用户的会话信息和系统信息,因此不能在其它电脑上解密,也不能被同一电脑的其它用户解密。
    如果系统上下文不对(比如换登录用户或换电脑),解密时会抛出异常:-2146893813, 'CryptUnprotectData', '该项不适于在指定状态下使用。'
  • 密钥解密代码如下:
private byte[] decodePwd(String key) {
    byte[] arr = Base64.getDecoder().decode(key);
    // 移除前面的无用字符:DPAPI
    arr = Arrays.copyOfRange(arr, 5, arr.length);
    byte[] keys = Crypt32Util.cryptUnprotectData(arr);
    return keys;
}

密码和Cookie-value解密

密码和Cookie-value是加密数据,byte[]数组:

  • 上面的密钥是AES加密密钥
  • 加密数据的第3~14位,这12个byte是AES算法的iv数据
  • 加密数据的第15位到结束,是使用密钥和iv,进行AES加密的结果
  • 数据解密代码如下:
private String decryptPassword(byte[] password, byte[] key) {
    byte[] iv = Arrays.copyOfRange(password, 3, 15);
    byte[] payload = Arrays.copyOfRange(password, 15, password.length);
    byte[] result = getCipher(key, iv).doFinal(payload);
    return new String(result);
}

代码Demo

我已经把相关Java代码和Python代码上传到github了,可以参考:

Java版本

Python版本

Java版本的运行效果截图:

  • 账号密码读取:
    在这里插入图片描述

  • Cookie读取:
    在这里插入图片描述

延伸知识

Login Data文件和Cookie文件,在所有Chromium浏览器下是通用的

简单一点,不需要懂代码,把Edge的Login Data文件复制到Chrome下,Chrome自动拥有了全部Edge的密码,反之亦是有效的,当然只能在同一台电脑上复制。

Mac电脑的Local State里没有密钥,Mac是基于Keychain的,我没有深入研究

上面的代码在Win10和Win11,Chrome125和Chrome126、Edge上都测试通过。
Mac后面有机会再研究,不过 later == never,估计不会去研究了,哈哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/715184.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

KT-H6测距模块标品,测距范围1500m,demo报价1000RMB,批量报价500RMB

激光测距传感器是一种用于测量距离的模块,通常由传感器和相关电子设备组成,测距模块可以集成到各种设备和系统中,以实现准确的测距和定位功能。KT-H6系列激光测距模块,为自主研发,激光波长905nm的激光器,专为热成像、夜视仪、无人机、安防、瞄具等产品定身打造,其优点是…

算法与数据结构--决策树算法

欢迎来到 Papicatch的博客 文章目录 🍉决策树算法介绍 🍈原理 🍈核心思想包括 🍍递归分割 🍍选择标准 🍍剪枝 🍈解题过程 🍍数据准备 🍍选择最佳分割特征 &…

分类模型部署-ONNX

分类模型部署-ONNX 0 引入:1 模型部署实战测试:1 安装配置环境:2 Pytorch图像分类模型转ONNX-ImageNet1000类3 推理引擎ONNX Runtime部署-预测单张图像: 2 扩展阅读参考 0 引入: 在软件工程中,部署指把开发…

消息队列-RabbitMQ-延时队列实现

死信队列 DLX,全称为Dead-Letter-Exchange,死信交换机,死信邮箱。当消息在一个队列中变成死信之后,它能重新发送到另外一个交换器中,这个交换器就是DLX,绑定DLX的队列就称为死信队列。 导致死信的几种原因: ● 消息…

Swift开发——简单函数实例

函数是模块化编程的基本单位,将一组完成特定功能的代码“独立”地组成一个执行单位,称为函数。函数的基本结构如下所示: 其中,func为定义函数的关键字;“函数名”是调用函数的入口;每个函数可以有多个参数,即可以有多个“参数标签 参数名称:参数类型”,一般地,各个参…

边缘微型AI的宿主?—— RISC-V芯片

一、RISC-V技术 RISC-V(发音为 "risk-five")是一种基于精简指令集计算(RISC)原则的开放源代码指令集架构(ISA)。它由加州大学伯克利分校在2010年首次发布,并迅速获得了全球学术界和工…

跟着刘二大人学pytorch(第---13---节课之RNN高级篇)

文章目录 0 前言0.1 课程视频链接:0.2 课件下载地址: 1 本节课任务描述模型的处理过程训练循环初始化分类器是否使用GPU构造损失函数和优化器每个epoch所要花费的时间遍历每个epoch时进行训练和测试记录每次测试的准确率加入到列表中 具体实现&#xff0…

中国最著名的起名大师颜廷利:父亲节与之相关的真实含义

今天是2024年6月16日,这一天被广泛庆祝为“父亲节”。在汉语中,“父亲”这一角色常以“爸爸”、“大大”(da-da)或“爹爹”等词汇表达。有趣的是,“爸爸”在汉语拼音中表示为“ba-ba”,而当我们稍微改变“b…

DeepDriving | 经典的目标检测算法:CenterNet

本文来源公众号“DeepDriving”,仅用于学术分享,侵权删,干货满满。 原文链接:经典的目标检测算法:CenterNet 1 前言 CenterNet是2019年发表的一篇文章《Objects as Points》中提出的一个经典的目标检测算法&#xf…

MySQL-创建表~数据类型

070-创建表 create table t_user(no int,name varchar(20),gender char(1) default 男);071-插入数据 语法格式: insert into 表名(字段名1, 字段名2, 字段名3,......) values (值1,值2,值3,......);insert into t_user(no, name, gender) values(1, Cupid, 男);字…

监控异地组网的方法?

监控异地组网是一项关键的技术,能够实现远程连接和访问。在复杂的网络环境中,使用传统的方法可能会遭遇网络限制和访问速度较慢的问题。而采用新兴的监控异地组网方法,如【天联】组网技术,可以克服这些问题并提供更好的用户体验。…

计算机缺失d3dcompiler_43.dll怎么办,介绍5种靠谱的解决方法

在电脑使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到d3dcompiler43.dll”的错误。那么,d3dcompiler43.dll到底是什么?为什么会出现丢失的情况?它对计算机有什么具体影响?如何解决这个问题&a…

黄仁勋最新建议:找到一门技艺,用一生去完善、磨炼!

“你可能会找到你的英伟达。我希望你们将挫折视为新的机遇。” 黄仁勋职业生涯中最大的教诲并非来自导师或科技公司 CEO,而是来自他在国际旅行时遇到的一位园丁。 近日在加州理工学院毕业典礼上发表演讲时,黄仁勋向毕业生分享了自己在日本京都的小故事。…

跟着刘二大人学pytorch(第---12---节课之RNN基础篇)

文章目录 0 前言0.1 课程视频链接:0.2 课件下载地址: 1 Basic RNN1.1 复习DNN和CNN1.2 直观认识RNN1.3 RNN Cell的内部计算方式 2 具体什么是一个RNN?3 使用pytorch构造一个RNN3.1 手动构造一个RNN Cell来实现RNN3.2 直接使用torch中现有的RN…

赶紧转行大模型,预计风口就今年一年,明年市场就饱和了!不是开玩笑

恕我直言,就这几天,各大厂都在裁员,什么开发测试运维都裁,只有大模型是急招人。 你说你不知道大模型是什么?那可太对了,你不知道说明别人也不知道,就是要趁只有业内部分人知道的时候入局&#…

深度学习1 -- 开头

感觉用这玩意越来越多,所以想学学。不过没想好怎么学,也没有提纲,买了两本书,一本是深度学习入门,小日子写的。还有一本就是花书。还有就是回Gatech参加线上课程,提纲大概是这样的。 https://omscs.gatech…

生产中的 RAG:使你的生成式 AI 项目投入运营

作者:来自 Elastic Tim Brophy 检索增强生成 (RAG) 为组织提供了一个采用大型语言模型 (LLM) 的机会,即通过将生成式人工智能 (GenAI) 功能应用于其自己的专有数据。使用 RAG 可以降低固有风险,因为我们依赖受控数据集作为模型答案的基础&…

比利时海外媒体宣发,发稿促进媒体通稿发布新形势-大舍传媒

引言 随着全球化的推进,海外媒体的影响力也日益增强。在这一背景下,比利时海外媒体的宣发工作成为了媒体通稿发布的新形势。大舍传媒作为一家专注于宣传推广的公司,一直致力于与比利时博伊克邮报(boicpost)合作&#…

ModuleNotFoundError: No module named ‘distutils‘的解决办法

最近想试试odoo17,在windows环境下,想安装试验一下,结果老出现oduleNotFoundError: No module named ‘distutils‘错误。查了一下,以为是python版本导致的,结果试了很多版本如下: 试了几个,每个…

4-异常-log4j配置日志滚动覆盖出现日志丢失问题

4-异常-log4j配置日志打印滚动覆盖出现日志丢失问题(附源码分析) 更多内容欢迎关注我(持续更新中,欢迎Star✨) Github:CodeZeng1998/Java-Developer-Work-Note 技术公众号:CodeZeng1998(纯纯技术文&…