以下只是搬运下我公众号的东西。很早就发过了。原帖地址:
tls指纹之chrome新版功能/近期问题汇总/目前能直接使用的tls对抗库 (qq.com)
有的圈内朋友,不经过我的允许,删减摘录我公众号的内容,这里就不提谁了,心里清楚,还能获得一些关注和流量。很无语,所以我还不如自己也发发。【猛男落泪】
今天在找某个东西的时候,无意间,想看看ja3相关的东西,有没有啥值得研究的,然后就突然想起chrome随机指纹那个事,这个其实在2023年开年上班那几天的时候,就我群里看到群友说,chrome新版,自带随机ja3指纹,卧槽?
我当时是不信的,结果试了半天,确实是不一样了????
我用的以下网站测试,ja3官网现在经常无法访问了
https://ja3.zone/check
https://browserleaks.com/ssl
https://tls.peet.ws/api/all
这是什么个情况?
我反复确认,确实是不一样了,具体哪里不一样了呢?
颠覆了啊,卧槽,为啥,ja3官网之前不是说一个浏览器客户端ja3指纹基本是固定的吗?
打开sublime text,把上面的4个标签的ja3 指纹复制出来:仔细看,发现就是第三组不一样了,这一组是Extensions
我们知道,这5个组合,实际就是下面的5个
TLSVersion,Ciphers,Extensions,EllipticCurves,EllipticCurvePointFormats
有关第三个数Extensions扩展列表,感兴趣的可以看看更详细的解释:
https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml
而现在,谷歌搞这个操作,直接通过随机第三个数组,让ja3指纹随机了?
查阅资料,果然:
原文链接:
https://chromestatus.com/feature/5124606246518784
https://docs.google.com/document/d/13hbMJDFU8kZ_qtLukNYoWZOEnr0wRKeP6XBmY_TQ0B4/edit#
卧槽了,刺激啊,他为啥要改成随机啊?
谷歌官方说:
使用固定的扩展顺序可能会鼓励服务器开发者对 Chrome 进行指纹识别,然后进行特定的实现行为。当 Chrome 将来对 TLS 进行修改时,如果服务器实现没有为 Chrome 更改其 ClientHello 做好准备,这可能会限制生态系统的敏捷性
https://docs.google.com/document/d/13hbMJDFU8kZ_qtLukNYoWZOEnr0wRKeP6XBmY_TQ0B4/edit#
反正通俗的说,就是防止因为固定的指纹,导致限制后续发展。
举个例子,假如我用爬虫,或者浏览器,超频请求某个带有tls检测的网站,然后这个网站通过我的ja3指纹,把我封了,那我以后都无法正常请求这个网站,而指纹跟我一样的其他人,也访问不了,有朋友会说,为啥会有一样,同一台电脑,相同的配置,用的同一个版本的浏览器,有很大可能ja3指纹是一致的,毕竟不像canvas指纹,借助了硬件参数生成的指纹。
还有点我个人觉得,谷歌官方不希望只通过ja3指纹来轻松识别爬虫和非爬虫,那这样下去,只会绝对依赖ja3指纹,后续的技术不再进步,换句话,只能拦住一部分人,只要能突破你的指纹检测,后续的操作简直无任何压力。
那既然都可以随机了,可以起飞了吗?肆无忌惮?
其实并不会,你想想哈,我如果是做防护的,我对这个新版的chrome有了一定研究之后,我就发现,其实,只是第三组在变,那么我直接不把第三组作为依据记入,我就检测前两组加最后两组(如果有最后两组)
如果没有最后两组,那我就只检测前两组不就完了,你前两组始终是固定的,且第一组是tls版本,我们通过资料查询,可以知道,不同的tls版本,可能支持的tls算法不一样,那么通过这些一系列的操作,也可以一定概率的做指纹识别。
而最后一组,浏览器是【0】,根据前面的文章,我们知道,python最后一组并不是【0】,这不直接绝杀?
那么,我大胆推测,既然我都能想到,那么谷歌官方肯定也能想到这个问题,所以他这么搞的意义,并不是为了帮助爬虫一方逃逸检测,而是告诉完全依赖ja3指纹的后端开发者,你别绝对依赖固定的ja3指纹,万一后续有升级,可能会导致所有客户端浏览器都无法访问你的平台,导致丢失流量。
其实在ja3作者自己的博客里就说过了,回到最开始那篇 深度剖析ja3指纹及突破
我之前只是没有把这一部分单独提取出来
根据之前的文章说过,其实Extensions、EllipticCurves、EllipticCurvePointFormats 都是可以省略的,根据客户端的支持的算法提交给服务端,服务端根据支持的算法来计算ja3指纹,所以,也就是说,只要我client hello 传的部分算法,就可以一定程度的修改客户端的ja3指纹(有点像请求头里的content-type)
看上面的,其实就可以合理解释随机的情况了,能不能直接用来绕过ja3指纹检测,也不言而喻了。
原文依据:
https://engineering.salesforce.com/tls-fingerprinting-with-ja3-and-ja3s-247362855967/
最近还是有很多老哥私聊问我问题,其实问的很多问题,文章里都有的
请根据我发tls/ja3相关文章的时间先后顺序来看,因为里面有些东西已经无法用或者过时了的,把相关的全都看了,你想问的问题,可能已经有了答案
tls是单独的体系,不属于web,也不属于app,换句话,可以在web上,也可以在app上。
而我前面发的文章,JS逆向之猿人学第十九题突破ja3指纹验证
这里也纠正下,跟js根本没关系。为什么会这样,因为这是我之前在博客园写文章的时候,对猿人学的题的解析,标题是直接把之前的文章复制过来改改的,所以,并没有在意前面的js逆向(博客园已经不咋更新,因为文章被盗版严重,后续有质量的还是在微信公众号)
cycletls只是hook修改发出去的ja3指纹,只要是稍微严格点的校验,不检测指纹,而是检测客户端本来的那五组(TLSVersion,Ciphers,Extensions,EllipticCurves,EllipticCurvePointFormats)然后自己生成,都不看你给的指纹,你说他可以检测到不
这个问题,作者肝总说过,需要更新,说实话我其实不是太了解,因为那些库,我其实用的不多,毕竟对我来说没有什么使用场景,不咋搞国外的东西。
这个问题,有极个别做安全的朋友,加上我就一顿问,说白了就是想白嫖,有个老哥还用我文章说过的话:【故事要留给过去,但成长要用于分享】来阴阳我,意思是我不给他白嫖,他就觉得我说的这句话,前后矛盾。
这种白嫖怪,就有多远离我多远吧,不想跟这种人浪费时间。
以下库,直接pip 安装就能使用
tls-client
curl-cffi(据群友说,这个用着不太顺手)
打一波广告,肉师傅新课,ios逆向已开,感兴趣扫码,找我会有优惠的哦
js逆向+小程序逆向、云函数抓包等课程,同样的,找我有优惠哟
工作避坑&内推(仅成都)、技术交流、商务合作、技术交流群
扫码或者搜ID:geekbyte