声明
以下只是搬运下我公众号的东西。很早就发过了。原帖地址:
tls指纹之到底怎么判断是否有tls、到底怎么对抗tls (qq.com)
已经发公众号的为什么还发csdn
有的圈内朋友,不经过我的允许,删减摘录我公众号的内容,这里就不提谁了,心里清楚,还能获得一些关注和流量。很无语,所以我还不如自己也发发。【猛男落泪】
一、前言
其实自从大概一年前,发了tls/ja3那篇文章之后开始 ,就时不时有朋友找我私聊,让我帮忙看看某某平台,“怎么回事啊?”,“怎么python请求不到?”,“到底是不是tls?”,“怎么过tls?”,等等...
真的还挺多的
所以,这篇文章,我把我想的写出来,还不太懂的,请仔细看,一个字一个字的看,因为有的朋友问的问题,之前的文章其实都有的,所以我希望各位朋友,这篇文章请认真看
如果看完我这篇文章,还是无法确定是否是tls的话,也可以继续问我,但我希望你是经过自己思考还是没搞定的情况下再来的。
对tls还很陌生的朋友,可以看下猿人学的题,外部题19题,内部题22、29题,5s盾,阿什么迈
以及下面这几篇文章(请按顺序从上到下看)
https://mp.weixin.qq.com/s/Qx7PjnBgrTR30oCurU6CGw
https://www.cnblogs.com/Eeyhan/p/15662849.html
深度剖析ja3指纹及突破
ja3指纹补充说明
python完美突破tls/ja3
python突破tls后续:pip install
能过tls检测的curl-impersonate win版,搞起来啊
二、怎么判断有没有tls
这个话题我其实之前也说过了
你先排除以下情况:
1.验证了请求头顺序
比如猿人学的一道题,就验证了请求参数
我以前写过的博客:
2.强制HTTP2.0协议
还是猿人学的一道题
我以前写的博客
3.请求参数保证和抓包工具完全一致
比如,你的cookies,还有请求参数json.dumps的时候,是否要去掉空格
separators=(',', ':')
1.某车xx
群友给的,就不好说全名了,postman可以:
用python就是不行:
加下这个separators就可以了
2.某姓平台
访问进去的会有个验证,主要他还提示有个ssl安全加密
让你不得不联想到可能有tls,但是其实并没有,requests就可以访问的
3.某家平台
浏览器访问:
python下复制过来啥都不改就能访问的:
4.请求编码问题
某量引擎的请求参数 ,需要这样编码,才能正常请求
data="""{"keyword_list":["xxx"],"start_date":"20230115","end_date":"20230215","app_name":"aweme","region":[]}""".encode("utf-8")
某音也有类似的问题
更多的就得你自己具体问题具体分析
5.补充
补充一点就是,新版的requests 和 urllib3库,对ssl有校验,导致你开了抓包工具后,就无法请求数据,即使设置了verify=False,
解决办法就是安装低版本的requests和urllib3库即可
ip uninstall requests urllib3 # 先卸载pip install requests==2.27 urllib3==1.25.8 -i https://pypi.doubanio.com/simple # 指定版本安装,不然默认会装最新版
4.其他语言或者工具可以请求,就python不行
你到这里,那确实可能有tls校验,注意我说的词,【可能有】,因为也不一定
5.web平台,除了浏览器可以,其他语言都不行,app平台,除了app,其他语言都不行
你到这里,那有tls校验概率就很高很高了。
为啥还是没法100%确定有?别急,下面有解释
三、怎么判断有没有强校验的tls
请先用上面的流程判断是否有tls之后,再来看这里
1.弱校验
就是postman可以 ,javascript也可以(js也可能不行),curl也可以,就python不行,那大概率是很弱的校验,只需要照着我下面的方案即可解决:
以猿人学的题为例:
2.中校验
按照我上面的改tls套件的方法不行,但是curl或者postman就是可以
毕竟方案已经公开,可能针对性的改了下,所以你针对性的分析,
可以用以下方案过可以过
- go库:ja3transport,不支持HTTP2.0
- go库:cycletls,支持HTTP2.0
- requests go版:https://github.com/wangluozhe/requests
- 志远大佬的方案,魔改openssl
3.强校验
python、postman、curl、js请求都不行,只有浏览器可以
用以下方案可以过:
- 魔改的pycurl,具体见我之前的文章:python完美突破tls/ja3,python突破tls后续:pip install
- pyhttpx
- curl_impersonate
四、误区:抓包工具没法判断是否有tls
很多人用抓包工具(wireshark,charles)看是否有tls,这个也是我之前对tls还不了解犯的错:
抓包工具看到的是tls的套件算法,能不能验证是否有tls,这个是服务端判断的,只要有ssl,都会有tls套件的,比如,我用抓包工具看百度
比如上面,这里面能看到一堆tls算法,他就一定是tls吗,python也能直接请求百度啊。****
tls真正的验证实际在服务端,所以我上面说判断是否有tls,我都没用肯定的语气词,都说的可能,大概率,这东西只有靠排除和猜的,在服务端的东西,前端是看不到的
五、哪些网站、平台确定有tls检测
有某迈、5s防护盾的网站
国外的电商平台基本都有tls(某逊等)
六、怎么过tls校验
请先用上面的流程判断是否有tls之后,再来看这里
上面解释怎么判断tls强弱的时候,已经总结了点,之前的文章【ja3补充说明】也总结了点,这里我重新做一个比较全面、完整的总结:
根据tls校验程度从小到大排序:
1.原生python层面修改tls套件
参考:
2.用go的库ja3transport
3.用go的库requests
4.用go的库cycletls
5.魔改openssl
志远大佬的方案,我就不好贴地址了
6.用python的库 pyhttpx
这个是我群里的大佬自己实现了底层socket搞出来的:
7.用杆总魔改的pycurl
我之前的文章里有详细配置步骤:
python完美突破tls/ja3
8.用python的库
其实就是魔改的pycurl的简易安装版,群里一个大佬编译好的,
里面有详细的步骤:
https://github.com/synodriver/pycurl/blob/master/special.markdown
9.pycurl 的docker版
我的docker镜像:
docker pull geekbyte1/pyantitls:v1.0docker run -it -d geekbyte1/pyantitls:v1.0
Q佬的docker file:
https://mp.weixin.qq.com/s/UZlLuzlQZrI7w82HI7zGuw
10.直接调用curl_impersonnate
就是魔改版的pycurl,用的核心的东西,直接操作终端然后调用curl_impersonnate
现在curl_impersonnate已经出windows版
能过tls检测的curl-impersonate win版,搞起来啊
11.cycletls的python版
cycletls的作者已经在开发python版的cycletls了,刺不刺激
不过别高兴太早,目前还没pip install ,作者自己也说了,在积极开发中
去年12月我跟他发过邮件,想让他帮忙搞个python版出来,他到现在没回我,也不知道是不是因为我发的邮件让他想搞个python版出来,总之是有了,且快了
结语
这次应该算是够完整了吧,如果你还遇到问题,也乐意交流的
工作避坑&内推(仅成都)、技术交流、商务合作、报课优惠、技术交流群
扫码或者搜ID:geekbyte
版权归原作者 I am geekbyte 所有, 如有侵权,请联系我们删除。