上一期大致了解了一下TLS指纹,那么这期就来攻克一下指纹这边的代表,akamai系列反爬
一.简介
1. Akamai
-
Akamai是一家提供内容传递网络(CDN)和云服务的公司。CDN通过将内容分发到全球各地的服务器,以减少网络延迟并提高用户访问网站的速度和性能。在其服务中,Akamai使用一种称为Akamai Cookie加密的技术来增强安全性和保护用户的隐私。
-
Akamai常见的时1.75和2的版本,传递的数据是明文的数据就是1.75,2版本的数据是进行编码的
2. 执行流程
Akamai也是对cookie进加密处理的过程,但是和瑞数有区别,Akamai请求过程:
-
请求网页地址,网页地址会返回一个外链的js代码
-
对外链地址发送get请求,获取到对应的js代码
-
在对当前外链js地址发送post请求,带上参数
sensor_data
-
带上参数请求之后,会响应一个正确的
_abck
-
逆向参数时需要注意Akamai,每周会有一小改,一个月会大改一次
-
最重要的就是第二次的post请求,逆向的参数是
sensor_data
二.逆向分析
1. 逆向目标
-
逆向目标:
sensor_data
2.逆向分析
-
找到数据生成的位置,可以直接通过xhr,或者通过启动器来定位
-
断点之后可以看到数据是bwt生成数据的,是由RST来的数据
-
可以找一下RST的生成位置
-
-
把他需要的代码都拿下来执行生成代码
3.逆向结果
-
JavaScript代码
import execjs
import requests
import re
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
}
url = "https://www.dhl.com/cn-zh/home/tracking/tracking-ecommerce.html"
params = {
"submit": "1",
"tracking-id": "1232343"
}
response = requests.get(url, headers=headers, params=params)
js_url = 'https://www.dhl.com' + re.findall('/noscript><script type="text/javascript" src="(.*?)"></sc', response.text)[0]
cookies = {
'_abck': response.cookies.get('_abck'),
'bm_sz': response.cookies.get('bm_sz'),
'ak_bmsc': response.cookies.get('ak_bmsc')
}
headers = {
"referer": "https://www.dhl.com/cn-zh/home/tracking/tracking-ecommerce.html?submit=1&tracking-id=1232343",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
}
res = requests.get(js_url, headers=headers, cookies=cookies)
dd = execjs.compile(open('aka.js', encoding='utf-8').read()).call('U1T', cookies['bm_sz'], res.cookies.get('_abck'), url)
# print(dd)
cookies['_abck'] = res.cookies.get('_abck')
data = {'sensor_data':dd}
headers1 = {
"origin": "https://www.dhl.com",
"referer": "https://www.dhl.com/cn-zh/home/tracking/tracking-ecommerce.html?submit=1&tracking-id=1232343",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
}
print(data)
res1 = requests.post(js_url, headers=headers1, cookies=cookies, json=data)
print(res1.cookies)
print(res1.text)
三.TLS指纹
1. 简介
-
TLS(传输层安全性)指纹是指一种用于标识和识别TLS协议连接的技术。TLS是一种加密通信协议,用于在计算机网络上保护数据的传输安全。TLS指纹可用于唯一标识特定TLS连接的加密参数和协商结果。
-
指纹的携带一般都是在https当中的, ssl/tls都是在安全套接字层,可以把ssl/tls 当做是两个步骤,先会去验证ssl/tls,通过之后再去发送http请求
2. 导致的后果
-
通过浏览器能正常获取到数据,但是通过代码哪怕带上全部的请求头的信息也是请求失败,返回的数据不对
-
那这种网站多半检测浏览器指纹,每个浏览器都会有指纹,通过requests发送请求时,底层用的是urllib3的库,库也会生成对应的指纹,服务器会检测这些指纹是不是属于这些库的,要是指纹不对,就不会返回数据
3. 测试指纹
-
测试tsl指纹网址:https://tls.browserleaks.com/json
-
练习网址:二次元画像詳細検索
print("edge99:", requests.get("https://tls.browserleaks.com/json", impersonate="edge99").json())
print("chrome110:", requests.get("https://tls.browserleaks.com/json", impersonate="chrome110").json())
print("safari15_3:", requests.get("https://tls.browserleaks.com/json", impersonate="safari15_3").json())
需要源码或者交流联系 : aHVhcXUwNzI3
本期源码已放在星球中,有需要自取