Python 爬虫进阶必备 | 某壁纸网站请求头参数与用户指纹 sign 加密逻辑分析
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python 爬虫进阶必备 | 某壁纸网站请求头参数与用户指纹 sign 加密逻辑分析,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3551字,纯文字阅读大概需要6分钟。
内容图文
![Python 爬虫进阶必备 | 某壁纸网站请求头参数与用户指纹 sign 加密逻辑分析](/upload/InfoBanner/zyjiaocheng/595/4e678d7c48a74a17b6a2b2a6162d7841.jpg)
今日网站
aHR0cHM6Ly9iei56enptaC5jbi8=
这个网站来自东哥读者群的读者提问(截图为转发消息)
抓包分析
打开目标网站,需要采集的是网站中的图片
开发者工具中抓到的包是这样的
页面上加载的图片名字是没有规律的,且网页上不点击图片是没有办法显示高清图片的,所以需要找到这些图片名称是哪里返回的。
通过查找,可以看到图片名称是经过getJson
这个包返回的,并且返回的包中还标识了分辨率
所以只要构建这个请求,拿到返回值再拼接出壁纸的链接就可以下载高清的壁纸了。
参数没有什么要看的,见名知意
{"target":"index","pageNum":1}
主要是请求的 header 中有两个未知参数sign
和access
加密定位与分析
这类比较纯粹的 XHR 请求,直接使用xhr断点
分析比较轻松
在source
面板添加xhr
请求断点
完成之后重新刷新页面,就断上了
断点断住的位置是ajax
请求发出的位置,在这个位置可以看到我们需要分析的access
参数已经找到了
?var?access?=?sha256(contentType?+?location?+?sign?+?timestamp);
这个表达式对应的参数在上面的截图里都有(除了 sign),直接拼接在一起使用 sha256 加密即可。
这里的 sign 需要在堆栈中向上翻,可以看到一个 sign
请求
断点的位置如下
可以看到 sign 是sessionStorage
中取出的,可以在当前的文件中检索sessionStorage
,可以看到下面setItem
的逻辑
sign 的实际生成逻辑其实就是我们当前浏览器指纹
sign?=?Fingerprint2.x64hash128(components.map(function(component)?{return?component.value}).join(''),?31);
//?将当前浏览器的属性值拼接在一起,使用?x64hash128?生成指纹
这个指纹算法是有漏洞的,因为算法取的是当前的设备信息,而x64hash128
算法是固定的,这就导致了传入x64hash128
中的 key 相同的话,生成的指纹也是相同的,一个常见的规避手段是在设备信息中添加获取当前设备的ip
这样可以减少一部分的指纹重复,不过这个网站的sign
没有添加这个属性
如果这里你想调试sign
的生成需要清除当前浏览器的缓存,断点才会进入生成的逻辑
userAgent:?navigator.userAgent
language?:?语言
colorDepth:?返回目标设备或缓冲器上的调色板的比特深度?screen.colorDepth
deviceMemory:?以千兆字节为单位返回设备内存量。该值是通过舍入到最接近的2的幂并将该数除以1024而给出的近似值。?
pixelRatio:?像素比?devicePixelRatio??
hardwareConcurrency:navigator.hardwareConcurrency返回可用于运行在用户的计算机上的线程的逻辑处理器的数量?
screenResolution:?检测屏幕宽高,并根据屏幕方向矫正返回值[width,height]
availableScreenResolution:返回屏幕分辨率[width,height],无头浏览器无法获取。
timezoneOffset:?返回从当前区域设置(主机系统设置)到UTC的时区差异(以分钟为单位)链接
timezone:时区
sessionStorage:?是否支持sessionStorage,不支持时返回错误?
localStorage:?是否支持localStorage?
indexedDb:是否支持indexedDb?
addBehavior:此时可能未定义body或以编程方式删除
openDatabase:?返回是否支持Web?SQL
cpuClass:返回浏览器系统的?CPU?等级,一般无法获取?*
platform:?返回表示浏览器平台的字符串,该规范允许浏览器始终返回空字符串,因此不要依赖此属性来获得可靠的答案.链接?*
doNotTrack:?返回用户的“不跟踪”设置。如果用户请求不被网站,内容或广告跟踪,则为“1”。一般结果为*?。
plugins:返回浏览器安装的插件列表。
canvas:?如果浏览器支持canvas则返回生成baes64数据。
webgl:返回浏览器对webgl绘图协议的支持情况汇总?
webglVendorAndRenderer:?返会显卡型号相关信息?
adBlock:返回是否安装去广告插件。
hasLiedLanguages:?返回用户是否改变了首选语言
hasLiedResolution:返回用户是否改变了分辨率
hasLiedOs:返回用户是否改变了操作系统
hasLiedBrowser:返回用户是否改变了浏览器
touchSupport:?返回最大触摸点数,是否支持touch,是否支持ontouchstart事件]
fonts:返回从64种字体种筛选出的可用字体
fontsFlash:Flash字体枚举,如果没有swfobject,不会触发。
audio:?返回音频指纹
enumerateDevices:navigator.mediaDevices?请求可用媒体输入和输出设备的列表,例如麦克风,相机,耳机等
//?参考链接:https://juejin.cn/post/6844903773211459597
所以这里的sign
是可以设置成固定值,因为指纹是可以重复的
到这里上面access
生成逻辑的所有变量均已获得,通过python
复写加密即可获取网站的图片名称并拼接链接下载高清图片。
内容总结
以上是互联网集市为您收集整理的Python 爬虫进阶必备 | 某壁纸网站请求头参数与用户指纹 sign 加密逻辑分析全部内容,希望文章能够帮你解决Python 爬虫进阶必备 | 某壁纸网站请求头参数与用户指纹 sign 加密逻辑分析所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。