TLS指纹和HTTP/2 指纹
查看指纹网址:
各种指纹: https://tls.peet.ws/api/all
ja3和http/2: https://tls.browserleaks.com/json
- 什么是tls指纹
TLS 及其前身 SSL(为简单起见,我将两者称为“SSL”)用于加密常见应用程序和恶意软件的通信,以确保您的数据安全,因此它可以隐藏在噪音中。要启动 SSL 会话,客户端将在 TCP 3 次握手后发送 SSL 客户端 Hello 数据包。此数据包及其生成方式取决于构建客户端应用程序时使用的包和方法。如果接受 SSL 连接,服务器将使用基于服务器端库和配置以及客户端 Hello 中的详细信息制定的 SSL Server Hello 数据包进行响应。由于 SSL 协商以明文形式传输,因此可以使用 SSL 客户端 Hello 数据包中的详细信息对客户端应用程序进行指纹识别和识别。
JA3 是一种 TLS 指纹识别方法;JA3 收集 Client Hello 数据包中以下字段的字节十进制值;SSL 版本、接受的密码、扩展列表、椭圆曲线和椭圆曲线格式。然后,它按顺序将这些值连接在一起,使用“,”分隔每个字段,使用“-”分隔每个字段中的每个值。
字段顺序如下:
SSLVersion,Cipher,SSLExtension,EllipticCurve,EllipticCurvePointFormat
例:
然后对这些字符串进行 MD5 哈希处理,以生成易于使用和可共享的 32 个字符指纹。这是 JA3 SSL 客户端指纹。
769,47-53-5-10-49161-49162-49171-49172-50-56-19-4,0-10-11,23-24-25,0 --> ada70206e40642a3e4461f35503241d5
769,4-5-10-9-100-98-3-6-19-18-99,,, --> de350869b8c85de67a350c8d186f11e6
例如,访问 https://tls.browserleaks.com/json 可以获取客户端的 TLS 指纹(ja3_hash)
- 什么是http/2指纹
对 HTTP/2 中的 4 种 frame 采样,分别是:SETTINGS、WINDOW_UPDATE、PRIORITY、HEADERS,它们间使用“|”隔开,即:
SETTINGS|WINDOW_UPDATE|PRIORITY|HEADERS
SETTINGS 部分:对发送的 settings 编码,格式 KEY:VALUE,多个逗号隔开。其中 HEADER_TABLE_SIZE 的 KEY=1、ENABLE_PUSH 的 KEY=2、MAX_CONCURRENT_STREAMS、INITIAL_WINDOW_SIZE、MAX_FRAME_SIZE、MAX_HEADER_LIST_SIZE 以此类推。
如同时发送 ENABLE_PUSH=0、INITIAL_WINDOW_SIZE=4194304,则编码为 2:0,4:4194304
WINDOW_UPDATE 部分:若存在该 frame,则编码为 increment 值,否则 00
PRIORITY 部分:若存在该 frame,则编码为 stream:exclusive:dependsOn:weight,否则 0
HEADERS 部分:以 : 开头的 header 的第一个字符参与编码,多个逗号隔开。如 :method、:scheme 编码为 m,s
"akamai_fingerprint": "1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p",
akamai_fingerprint伪造其实非常简单,只需要修改其中某个参数,让生成的 Hash 不在 Cloudflare 数据库中
from curl_cffi import requests
url = "https://ascii2d.net/"
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0"
}
# tls指纹
ja3="771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,23-0-17613-5-65037-18-45-11-43-35-51-13-65281-10-16-27,4588-29-23-24,0"
# http/2指纹也称akamai指纹
akamai="1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p"
response = requests.get(url,ja3=ja3,akamai=akamai,headers=headers)
print(response.text)
print(response)
参考文章:
绕过 Cloudflare 指纹护盾 | Sxyazi’s blog
更多推荐

所有评论(0)