最新要闻
- 17.88万起圆你跑车梦 哪吒GT开售:双门四座零百三秒
- 环球焦点!鸿蒙5G新机来了!WIKO Hi畅享60官宣:4800万金环双摄
- 全品牌销冠!魅族20系列成3000元档周线上销量第一
- 内外双2K E6旗舰屏!vivo X Fold2配置详解:九大全球领先科技
- 环球微速讯:农业农村部:今年全国农作物种子市场总体上供大于求,合格率稳定保持在98%以上
- 世界看热讯:在史上“最热闹”的上海车展 特斯拉竟然缺席了 维权有阴影?
- 漫威面临征服者康难题
- 世界微头条丨爆款狂促!玫瑰精油洗发水47.8元买1000ml:解决软塌油头
- 焦点观察:王一博主演!《长空之王》领跑五一档预售票房榜
- 72岁王石出手创立私募基金:曾表态市场一定会惩罚暴利
- 方萍萍:2023年04月18日原油交易策略
- 秦昊结了几次婚?秦昊的老婆叫什么名字?
- 罗云熙真实身高体重是多少?罗云熙为什么那么瘦?
- 粉红法拉利是谁唱的?粉红法拉利完整版歌词
- 化骨绵掌是什么意思?化骨绵掌是谁的绝招?
- 车俊焕多大了?车俊焕个人资料介绍
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【聚看点】用C#破解Chrome浏览器cookie值
背景
最近小编接到一个获取网站请求数据的需求,要求抓取网站某个页面请求的数据。我使用Google Chrome浏览器查看了一下请求链接的传入参数,发现需要传入一个Token值才能获取数据。于是我在Chrome中登录后,通过Postman请求成功,并将Token存储到了Cookie中。然而问题又来了,在代码层面如何获取这个Token呢?
(相关资料图)
解决方案
小编在网上查了一圈,发现Chrome浏览器的Cookie存储在本地的sqlite数据库中。在Chrome的安装目录中找到了sqlite的文件,通过读取sqlite数据库即可获得了Cookie值。如下图:
其中name是cookie的名称, encrypted_value字段是加密的cookie值,host_key就是站点域名了。但是这个Cookie值是加密的。
存储cookie目录:
C:\Users\用户名\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies
各个版本的目录可能不同,有的在Local State文件夹下。
小编继续搜索,发现Chrome浏览器是开源的,算法是公开的,用到的加密算法是aes加密算法。我们不需要知道这个算法,只需要知道此算法需要一个秘钥,通过这个秘钥就可以进行加密和解密,代码如下。
实现代码
关键代码如下:
using (SqliteConnection connection = new SqliteConnection()) { //1、获取google Chrome浏览器目录varuserprofilePath=Environment.GetEnvironmentVariable("USERPROFILE"); var sourceFile= $@"{userprofilePath}\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies"; //var sourceFile = $@"{userprofilePath}\Desktop\11111111.txt"; var targetFile = $@"{Directory.GetCurrentDirectory()}\GoogleFile\Cookies"; //2、拷贝文件到本地目录,防止文件被占用 FileInfo file = new FileInfo(sourceFile); if(!Directory.Exists($@"{Directory.GetCurrentDirectory()}\GoogleFile")) Directory.CreateDirectory($@"{Directory.GetCurrentDirectory()}\GoogleFile"); if (file.Exists) { file.CopyTo(targetFile, true); } //3、链接sqlite数据库 connection.ConnectionString = $@"DataSource="+ targetFile; connection.Open(); //4、通过select查询相关的语句 SqliteCommand command = new SqliteCommand("select host_key,name,encrypted_value from cookies where name="public-token" and host_key=".cponline.cnipa.gov.cn"", connection); SqliteDataReader dataReader = command.ExecuteReader(); dataReader.Read(); byte[] encryptedValue = (byte[])dataReader["encrypted_value"]; //5、解密数据 int keyLength = 256 / 8; int nonceLength = 96 / 8; String kEncryptionVersionPrefix = "v10"; int GCM_TAG_LENGTH = 16; //字符串内容取自C:\Users\用户名\AppData\Local\Google\Chrome\User Data\Local State文件的encrypted_key byte[] encryptedKeyBytes = Convert.FromBase64String("RFBBUEkBAAAA0Iyd3wEV0RGMegDAT8KX6wEAAACVAmSA/y7+TLs+3WWdDv1ZAAAAAAIAAAAAABBmAAAAAQAAIAAAABV7dDMB8p+vKnLEjnrhnWB4DAbB/k5XAtjWGFnci/3qAAAAAA6AAAAAAgAAIAAAAH/pnc+fF6dhG8Fpw6yQezIXtMw48xNvuyRub/cZ62XaMAAAAP1pl5QqRJmd1J4V++dhE63MEA9F4NzCHb1aOMgTnFCo1+xSHYovSTzCoYFvoDfIFUAAAAAZzDzWwwpUm6yZG9tpYu/ioRSO8V16MetQy2s7L9HHO03Q6bO8Nr05Erl1QbjCVoSgSOU4krcerUsngMwIYFyb"); encryptedKeyBytes = encryptedKeyBytes.Skip("DPAPI".Length).Take(encryptedKeyBytes.Length - "DPAPI".Length).ToArray(); var keyBytes = System.Security.Cryptography.ProtectedData.Unprotect(encryptedKeyBytes, null, System.Security.Cryptography.DataProtectionScope.CurrentUser); var nonce = encryptedValue.Skip(kEncryptionVersionPrefix.Length).Take(nonceLength).ToArray();encryptedValue=encryptedValue.Skip(kEncryptionVersionPrefix.Length+nonceLength).Take(encryptedValue.Length-(kEncryptionVersionPrefix.Length+nonceLength)).ToArray(); var str = System.Web.HttpUtility.UrlDecode(AesGcmDecrypt(keyBytes, nonce, encryptedValue)); //6、获得值 Console.WriteLine($"{dataReader["host_key"]}-{dataReader["name"]}-{str}"); //7、关闭数据 connection.Close(); }
以上代码列出了解密步骤,大家可以根据自己的项目情况调整。
AesGcmDecrypt解密的方法:
public static string AesGcmDecrypt(byte[] keyBytes, byte[] nonce, byte[] encryptedValue){ GcmBlockCipher gcmBlockCipher = new GcmBlockCipher(new AesEngine()); AeadParameters aeadParameters = new AeadParameters( new KeyParameter(keyBytes), 128, nonce); gcmBlockCipher.Init(false, aeadParameters); byte[] plaintext = new byte[gcmBlockCipher.GetOutputSize(encryptedValue.Length)]; int length = gcmBlockCipher.ProcessBytes(encryptedValue, 0, encryptedValue.Length, plaintext, 0); gcmBlockCipher.DoFinal(plaintext, length);returnEncoding.UTF8.GetString(plaintext); }
注:本案例.NET项目使用的是.NET6,Chrome浏览器版本是v110。
Chrome开源地址:chromium.googlesource.com/chromium/src
解密加密地址:
https://cs.chromium.org/chromium/src/components/os_crypt/os_crypt_win.cc?q=OSCrypt&dr=CSs
输出str效果:
结语
本文介绍了用C#读取Chrome浏览器cookie值的方法,并用代码实现了功能,大家可以根据自己项目的情况使用。本案例涉及到隐私问题,建议不要用本案例做违规的操作。希望本文对你有所帮助,同时欢迎留言或吐槽。
来源公众号:DotNet开发跳槽
关键词:
-
【世界时快讯】3D轻量化引擎推出新技术,模型渲染更逼真!
HOOPSCommunicator在2021版本中,推出了基于PBR(PhysicallyBasedRendering)的渲染特性以提供更高质量...
来源: 环球热议:若依前后端分离 代码生成修改(2)
【聚看点】用C#破解Chrome浏览器cookie值
【世界时快讯】3D轻量化引擎推出新技术,模型渲染更逼真!
17.88万起圆你跑车梦 哪吒GT开售:双门四座零百三秒
环球焦点!鸿蒙5G新机来了!WIKO Hi畅享60官宣:4800万金环双摄
全品牌销冠!魅族20系列成3000元档周线上销量第一
内外双2K E6旗舰屏!vivo X Fold2配置详解:九大全球领先科技
环球微速讯:农业农村部:今年全国农作物种子市场总体上供大于求,合格率稳定保持在98%以上
报道:【Git代码仓库托管】上海道宁为您提供构建、扩展和交付安全软件的完整开发人员平台
世界今日讯!windows系统git使用ssh方式和gitee/github进行同步
【天天时快讯】springboot统一响应实体封装+统一异常类管理
当前观察:Redis---哨兵服务
全球即时:python的matplotlib绘制动态图形(用animation中的FuncAnimation)
财政部:将专项债务限额及时下达各地 推动尽快形成实物工作量
世界看热讯:在史上“最热闹”的上海车展 特斯拉竟然缺席了 维权有阴影?
漫威面临征服者康难题
世界微头条丨爆款狂促!玫瑰精油洗发水47.8元买1000ml:解决软塌油头
焦点观察:王一博主演!《长空之王》领跑五一档预售票房榜
72岁王石出手创立私募基金:曾表态市场一定会惩罚暴利
方萍萍:2023年04月18日原油交易策略
秦昊结了几次婚?秦昊的老婆叫什么名字?
罗云熙真实身高体重是多少?罗云熙为什么那么瘦?
粉红法拉利是谁唱的?粉红法拉利完整版歌词
化骨绵掌是什么意思?化骨绵掌是谁的绝招?
车俊焕多大了?车俊焕个人资料介绍
【世界报资讯】Go 单表头结构体导入导出
世界看点:nginx服务在高并发场景下的优化方案及具体配置
今日观点!兔子产子问题
关注:大连积极扩大有效投资加速迈向“万亿GDP城市”
【财经分析】紧缩预期压制买需 2月超六成海外“债主”抛售美债
视讯!新华社重庆分社社长李勇:将从三方面助力重庆数字政府建设
首批扩募REITs将召开持有人大会
每日热议!生产力起飞!金山官宣WPS AI:聊天帮忙做好Word文档
环球今日报丨发布三个月跳水超1000!苹果M2版Mac mini降到3478元了
全球快资讯:上海一物流网点起火:快递员怀疑液体可燃 用打火机尝试发现真的可燃
今晚发布!小米13 Ultra配置带你提前看 就差价格了
全球快看:AI绘制90年代“复仇者联盟” 阿汤哥来演钢铁侠
世界速看:uniapp ios app离线打包
如何假装你懂Meta Segment Anything?
前沿资讯!基础电子元器件产业发展专项协调机制年度工作会议在深圳召开
【全球时快讯】游戏掉帧电脑卡顿?这锅CPU不背
四电机原地掉头 奔驰EQG概念车亮相上海车展:全新电池装车
理想汽车累计交付破32万辆 30万元以上新能源品牌销量第一
全球短讯!像人一样开 理想发布理想AD Max 3.0:连路上的狗都能识别
世界新资讯:iPhone 15 Pro新变化:用音量键组合关机重启成过去式
福建省厦门市发布雷雨大风黄色预警
【全球聚看点】如何在 Linux 上录制你的终端操作
dbatools demo
当前速递!一段话理解正向代理和反向代理的区别
热头条丨大数据开发相关技术汇总
环球热消息:6月6日全平台发售!《暗黑破坏神4》已完成开发:送厂压盘
蒙古国发布强沙尘暴预警:今日起席卷全境 影响我国部分地区
天天观热点:抢先看!迪士尼送真人版《小美人鱼》新预告:黑小美人鱼水中甩发画面动情
环球微资讯!蒙古国发布强沙尘暴预警 18日起将席卷全境
债务违约担忧加剧 美国3个月期国库券中标收益率超5%
天天热点!探营2023上海车展:一场新能源和智能化技术的盛宴
【环球报资讯】293份一季报预告逾七成预喜 机械设备等赛道业绩亮眼
【天天聚看点】坐地铁被收15元“超时费”?网友吵翻
环球聚焦:长荣航空两飞机发生碰撞:空客A321把波音777“割喉”了
女子骑摩托车遇沉降路段摔倒遭碾压身亡 竟担主责引争议:网友吵翻
比亚迪汽车APP升级7.0版本:界面全新改版 美观太多了
焦点热议:饲养员用竹竿打大熊猫“暖暖” 园方回应:永不允许此人养熊猫
当前快看:【长测】小米蒸烤箱维修记录:不到一年半就坏了
【天天聚看点】大批“学生特种兵”留宿淄博海底捞:出示车票即可
2023年农牧行业6大CRM系统、5大场景盘点
React 组件进入和退出动画实现
又一家果链代工巨头被苹果拖累 歌尔业绩暴雷:利润暴跌近90%
焦点热议:华为首发L2.9999 新势力们开始卷技术了?
【全球速看料】提前泄密上海车展:没想到 全是黑幕!
世界微动态丨SNK正版授权!腾讯《合金弹头:觉醒》今日上线:iPhone 5S也能玩
歼20看个爽!《长空之王》4月28日上映:影片时长128分钟
环球快资讯丨意外的幸运签资源 意外的幸运签百度云
每日热议!【商会】秘书长陈晓虹走访优秀在粤浙商企业东阳光集团——科技兴企 创新发展
【世界聚看点】面试题百日百刷-kafka篇(四)
天天速看:docker部署gitlab CI/CD (一)第一篇:部署gitlab及汉化
【世界独家】SpaceX星舰发射计划推迟:马斯克公布原因!下次时间待定
马斯克回应SpaceX星舰发射计划推迟:今天学到了很多
今日热议:欧体化度寺碑(关于欧体化度寺碑介绍)
当前热议!《复仇者联盟:无限战争》剪掉45分钟灭霸剧情 团灭山达尔星
全球热消息:网剧《长月烬明》豆瓣开分6.2分 官方曾辟谣抄袭《仙剑三》
气温大跳水!新一股强冷空气将带来俯冲式降温:局地累计降温超25度
超越土星5号登月火箭 人类最强火箭星舰又跳票了:最后40秒多取消
ChatGPT如何助力IT从业者?如何让ChatGPT帮助我们变现赚钱?
package.json 备忘清单_开发速查表分享
天天百事通!Redis---数据持久化之RDB与AOF
当得知身边同事好几个千万富翁……
观热点:一图看懂一加Ace 2原神定制礼盒:3699元限量 手慢无
今日聚焦!自动驾驶是忽悠?余承东反击王传福:可能这方面没做好
世界微头条丨60岁老汉吃半个杨桃休克抢救1周 医生提醒这类人要少吃
Intel Arc显卡驱动势头迅猛:更新比友商还勤快 性价比绝尘
11号色靓丽吸睛!华为nova 11 Ultra图赏
第十四届蓝桥杯赛前准备资料存档
在SSMS中连接到Dynamics 365 online需要进行以下步骤
每日热点: 1盒不到3元!特仑苏全脂牛奶大促:高蛋白 易吸收
天天快看:载孕妇Model 3方向盘突然抱死!特斯拉回应:组件故障 可退车
破天荒!苹果迫于欧盟法规:将在iOS 17上首次允许第三方应用商店
视频火了!吃面崩溃女生回应:生气因对象觉得丢人
全球今日报丨女主播车祸致面部伤残7级:保险公司被判赔部分整容费用
世界观速讯丨洛阳市老旧小区改造标准进一步细化
每日速讯:ASP.NET Core MVC 从入门到精通之布局