绕过TLS/akamai指纹护盾

news2024/11/17 16:29:01

文章目录

  • 前言
  • TLS指纹
    • 什么是TLS指纹
    • 测试TLS指纹
    • 绕过TLS指纹
      • 使用原生urllib
      • 使用其他成熟库!!
      • 修改requests底层代码
  • Akamai指纹相关(HTTP/2指纹)
    • 什么是Akamai指纹
    • 测试Akamai指纹
    • 绕过Akamai指纹
      • 使用其他成熟库
  • 实操
  • 参考


前言

有道是有反爬虫就有反反爬虫,这篇就从TLS指纹识别说起。


TLS指纹

什么是TLS指纹

TLS指纹是一种用于识别和验证TLS(传输层安全)通信的技术。

TLS指纹可以通过检查TLS握手过程中使用的密码套件、协议版本和加密算法等信息来确定TLS通信的特征。由于每个TLS实现使用的密码套件、协议版本和加密算法不同,因此可以通过比较TLS指纹来判断通信是否来自预期的源或目标。

TLS指纹可以用于检测网络欺骗、中间人攻击、间谍活动等安全威胁,也可以用于识别和管理设备和应用程序。

TLS指纹识别原理(ja3算法): https://github.com/salesforce/ja3
在这里插入图片描述

测试TLS指纹

测试一下不同客户端之间的指纹差异(ja3_hash
测试网站: https://tls.browserleaks.com/json

  • ubuntu 20.04
    在这里插入图片描述

  • centos
    在这里插入图片描述

  • window10
    在这里插入图片描述

  • chrome
    在这里插入图片描述

  • python3.9
    在这里插入图片描述

可见不同的客户端都存在区别,针对最后一个python的ja3_text做一个简单的说明

  • 第一个值 771 :表示 JA3 版本,即用于生成指纹的 JA3 脚本的版本。
  • 第二个值 4866-4867-4865-49196-49200-49195-49199-163-159-162-158-49327-49325-49188-- 49192-49162-49172-49315-49311-107-106-57-56-49326-49324-49187-49191-49161-49171-49314-49310-103-64-51-50-52393-52392-49245-49249-49244-49248-49267-49271-49266-49270-52394-49239-49235-49238-49234-196-195-190-189-136-135-69-68-157-156-49313-49309-49312-49308-61-60-53-47-49233-49232-192-186-132-65-255:表示加密套件,即客户端可以支持的加密算法。
  • 第三个值 0-11-10-35-22-23-13-43-45-51-21:表示支持的压缩算法。
  • 第四个值 29-23-30-25-24:表示支持的 TLS 扩展,如 SNI
  • 第五个值 0-1-2:表示支持的 elliptic curves,即椭圆曲线算法。

绕过TLS指纹

绕过就是伪造成合法客户端就行,简单来说,就是伪装ja3_text值,让其不被拦截即可,以修改支持的加密算法为主。

使用原生urllib

实现

import urllib.request
import ssl

url = 'https://tls.browserleaks.com/json'
req = urllib.request.Request(url)
resp = urllib.request.urlopen(req)
print(resp.read().decode())

# 伪造TLS指纹
context = ssl.create_default_context()
context.set_ciphers("ECDHE-RSA-AES128-GCM-SHA256+ECDHE+AESGCM")

url = 'https://tls.browserleaks.com/json'
req = urllib.request.Request(url)
resp = urllib.request.urlopen(req, context=context)
print(resp.read().decode())

效果
在这里插入图片描述

使用其他成熟库!!

可以试试curl_cffi这个库,他是基于requests,所以语法基本一样

Unlike other pure python http clients like httpx or requests, curl_cffi can impersonate browsers’ TLS signatures or JA3 fingerprints. If you are blocked by some website for no obvious reason, you can give this package a try.

也可以试试pyhttpx、pycurl这两个库
安装

pip install curl_cffi --upgrade

实现

from curl_cffi import requests

print("edge99:", requests.get("https://tls.browserleaks.com/json", impersonate="edge99").json().get("ja3_hash"))
print("chrome110:", requests.get("https://tls.browserleaks.com/json", impersonate="chrome110").json().get("ja3_hash"))
print("safari15_3:", requests.get("https://tls.browserleaks.com/json", impersonate="safari15_3").json().get("ja3_hash"))

# 支持代理
proxies = {"https": "http://localhost:7890"}
r = requests.get("https://tls.browserleaks.com/json", impersonate="safari15_3", proxies=proxies)
print(r.json().get("ja3_hash"))

效果
在这里插入图片描述

**支持伪造的浏览器列表如下:**随便挑一个就行了
在这里插入图片描述

修改requests底层代码

requests 库的 SSL/TLS 认证是基于 urllib3 库实现的,所以改底层就是改urllib3的代码

修改相关SSL代码,文件地址一般为site-packages/urllib3/util/ssl_.py
在这里插入图片描述

# A secure default.
# Sources for more information on TLS ciphers:
#
# - https://wiki.mozilla.org/Security/Server_Side_TLS
# - https://www.ssllabs.com/projects/best-practices/index.html
# - https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
#
# The general intent is:
# - prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE),
# - prefer ECDHE over DHE for better performance,
# - prefer any AES-GCM and ChaCha20 over any AES-CBC for better performance and
#   security,
# - prefer AES-GCM over ChaCha20 because hardware-accelerated AES is common,
# - disable NULL authentication, MD5 MACs, DSS, and other
#   insecure ciphers for security reasons.
# - NOTE: TLS 1.3 cipher suites are managed through a different interface
#   not exposed by CPython (yet!) and are enabled by default if they're available.

修改这里的加密算法为你想要的,不嫌麻烦也可以去继承重写就不用改代码了

DEFAULT_CIPHERS = ":".join(
    [
        "ECDHE+AESGCM",
        "ECDHE+CHACHA20",
        "DHE+AESGCM",
        "DHE+CHACHA20",
        "ECDH+AESGCM",
        "DH+AESGCM",
        "ECDH+AES",
        "DH+AES",
        "RSA+AESGCM",
        "RSA+AES",
        "!aNULL",
        "!eNULL",
        "!MD5",
        "!DSS",
    ]
)

修改前
在这里插入图片描述
修改后
在这里插入图片描述

Akamai指纹相关(HTTP/2指纹)

什么是Akamai指纹

Akamai FingerprintAkamai Technologies公司提供的一种防止恶意机器人和自动化攻击的技术,它基于浏览器指纹识别技术

浏览器指纹是一种用于识别Web浏览器的技术,它通过收集并分析浏览器的各种属性和行为,如用户代理字符串、插件、字体、语言、屏幕分辨率等信息来识别浏览器。浏览器指纹在互联网安全领域得到了广泛应用,可以用于检测和识别恶意机器人、欺诈行为、网络钓鱼等。

Akamai Fingerprint利用了浏览器指纹技术,将其与其他安全技术结合起来,以识别和拦截自动化攻击。它可以在不影响用户体验的情况下,对访问网站的浏览器进行识别和验证,防止自动化攻击、账户滥用和数据泄露等安全问题。


可以在 https://tls.peet.ws/api/all 看到详细的指纹,主要有如下内容

在这里插入图片描述

指纹为:1:65536,2:0,3:1000,4:6291456,6:262144|15663105|0|m,a,s,p

  1. 1:65536: HEADER_TABLE_SIZE,即头部表大小为64KB,指的是用于存储请求头和响应头的大小,它是可以调整的。这个字段指明了使用64KB的头部表大小。

  2. 2:0: HTTP2_VERSION,指示此请求使用的HTTP/2版本。0表示H2,表示启用了HTTP/2协议。

  3. 3:1000:== MAX_CONCURRENT_STREAMS==,即最大并发流数,指的是在任何给定时间内,客户端和服务器端可以并行发送的最大请求数量。这个字段指明了最大并发流数为1000

  4. 4:6291456: INITIAL_WINDOW_SIZE,即初始流窗口大小,指的是初始的流控窗口大小,即客户端可以发送的最大字节数量。这个字段指明了初始流窗口大小为6MB(即6291456字节)。

  5. 6:262144|15663105|0|m,a,s,p
    : 以竖杠“|”分隔。具体含义如下:

    • 6:262144: MAX_HEADER_LIST_SIZE,即动态表大小,指的是接收方可以接收的最大HTTP头部大小。这个字段指明了动态表大小为256KB(即262144字节)。
    • 15663105: WINDOW_UPDATE,表示收到了WINDOW_UPDATE帧,并且窗口大小增加了15663105个字节。
    • 0: no compression,表示不启用头部压缩。
    • :开头的 header 的第一个字符参与编码,多个逗号隔开。如 :method:authority:scheme:path 编码为 m,a,s,p

可在 Passive Fingerprinting of HTTP/2 Clients中查看详细细节

测试Akamai指纹

测试网站: https://tls.browserleaks.com/json

  • window 10(不知道是不是curl版本问题导致不行, 参考上面的Ubuntu的curl是可以的)
    在这里插入图片描述

  • centos(不知道是不是curl版本问题导致不行, 参考上面的Ubuntu的curl是可以的)
    在这里插入图片描述

  • chrome
    在这里插入图片描述

  • python
    在这里插入图片描述
    可以看到用python requests直接为空被拦截在外了

绕过Akamai指纹

伪造指纹中特定的字段即可。

使用其他成熟库

还是刚才的 curl_cffi这个库,因为这个库主打的就是模拟各种指纹

from curl_cffi import requests

print("edge99:", requests.get("https://tls.browserleaks.com/json", impersonate="edge99").json().get("akamai_hash"))
print("chrome110:", requests.get("https://tls.browserleaks.com/json", impersonate="chrome110").json().get("akamai_hash"))
print("safari15_3:", requests.get("https://tls.browserleaks.com/json", impersonate="safari15_3").json().get("akamai_hash"))

效果
可以看到已经获取到
在这里插入图片描述

实操

https://ascii2d.net 存在CloudFlare的指纹护盾,拒绝爬虫,测试一下。

在这里插入图片描述
直接请求title显示这个Just a moment…,这个明显是五秒盾了

尝试绕过一下

from curl_cffi import requests

print(requests.get("https://ascii2d.net", impersonate="chrome110").text)

效果,可以看得出正确获取到了
在这里插入图片描述

参考

绕过 Cloudflare 指纹护盾
SSL 指纹识别和绕过
HTTP2指纹识别(一种相对不为人知的网络指纹识别方法)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/809821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Eureka 学习笔记3:EurekaHttpClient

版本 awsVersion ‘1.11.277’ EurekaTransport 用于客户端和服务端之间进行通信,封装了以下接口的实现: ClosableResolver 接口实现TransportClientFactory 接口实现EurekaHttpClient 接口实现及其对应的 EurekaHttpClientFactory 接口实现 private …

【雕爷学编程】MicroPython动手做(16)——掌控板之图片图像显示2

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

第120天:免杀对抗-防朔源防流量防特征CDN节点SSL证书OSS存储上线

知识点 #知识点: 1、CS-CDN节点-防拉黑 2、CS-SSL证书-防特征 3、CS-OSS存储-防流量#章节点: 编译代码面-ShellCode-混淆 编译代码面-编辑执行器-编写 编译代码面-分离加载器-编写 程序文件面-特征码定位-修改 程序文件面-加壳花指令-资源 代码加载面-D…

springCloud Eureka注册中心配置详解

1、创建一个springBoot项目 2、在springBoot项目中添加SpringCloud依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.3</version><type>…

IDEA 使用 maven 搭建 spring mvc

1. 创建项目 1.1 创建成功之后配置 Spring MVC 1.2 勾选 Spring MVC 2.更改配置文件 2.1 更改web.xml配置 更改为 <servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>2.2 dispat…

CF1833 A-E

A题 题目链接&#xff1a;https://codeforces.com/problemset/problem/1833/A 基本思路&#xff1a;for循环遍历字符串s&#xff0c;依次截取字符串s的子串str&#xff0c;并保存到集合中&#xff0c;最后输出集合内元素的数目即可 AC代码&#xff1a; #include <iostrea…

Michael.W基于Foundry精读Openzeppelin第15期——SignedMath.sol

Michael.W基于Foundry精读Openzeppelin第15期——SignedMath.sol 0. 版本0.1 SignedMath.sol 1. 目标合约2. 代码精读2.1 max(int256 a, int256 b) && min(int256 a, int256 b)2.2 average(int256 a, int256 b)2.3 abs(int256 n) 0. 版本 [openzeppelin]&#xff1a;v…

final的使用以及权限修饰符

final表示最终的、不可改变的 final跟abstract不可以同时使用&#xff0c;因为二者是冲突的。final表示不可变&#xff0c;abstrac表示必须要重写、必须要变。 常见的四种用法 修饰一个类 格式&#xff1a; public final class 类名称{ }final修饰之后&#xff0c;这个类不能…

杂谈项——关于我在bw上的见闻,以及个人对二次元游戏行业方面的前瞻

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;今天为大家带来一点不一样的&#xff0c;首先先光速叠一下甲&#xff1a; 在此说明博主并不是一个什么都知道的大佬&#xff0c;只是一个普通的老二次元以及期望以后能…

大数据-Spark批处理实用广播Broadcast构建一个全局缓存Cache

1、broadcast广播 在Spark中&#xff0c;broadcast是一种优化技术&#xff0c;它可以将一个只读变量缓存到每个节点上&#xff0c;以便在执行任务时使用。这样可以避免在每个任务中重复传输数据。 2、构建缓存 import org.apache.spark.sql.SparkSession import org.apache.s…

Xshell配置ssh免密码登录-公钥与私钥登录linux服务器

目录 简介 提示 方法步骤 步骤1&#xff1a;生成密钥公钥&#xff08;Public key&#xff09;与私钥(Private Key) 方法1&#xff1a;使用xshell工具 方法2&#xff1a;使用命令行 步骤2&#xff1a;放置公钥(Public Key)到服务器 方法1&#xff1a;&#xff08;我使用的是…

LeetCode551.Student-Attendance-Record-i<学生出勤记录 I>

题目&#xff1a; 思路&#xff1a; 遍历就完事了.连续三天不来return false; 超过两次缺勤 fasle; 代码是&#xff1a; //codeclass Solution { public:bool checkRecord(string s) {int n s.length();int abtimes0,latimes0;for(int i0;i<n;i){switch(s[i]){case(A):l…

总结942

5:40起床 6:00~7:00单词复习300个&#xff0c;记100个 7:15~8:00早读&#xff0c;《love is as strong as death》第一第二段 8:10~9:10三大计算回顾 9:15~10:06 习题880第一章基础选择纠错 10:10~10&#xff1a;30单词默写 10:30~11:40强化第一讲习题 11:40~12:30继续…

【雕爷学编程】MicroPython动手做(16)——掌控板之图片图像显示3

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

Android 设备兼容性使用详解

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、设备兼容性分类二、硬件设备兼容三、软件 APP 兼容四、兼容不同语言五、兼容不同分辨率六、兼容不同屏幕方向布局七、兼容不同硬件 Feature八、兼容…

TortoiseGit安装与配置

注&#xff1a;在安装TortoiseGit之前我已经安装了git工具。 二、Git的诞生及环境配置_tortoisegit安装包_朱嘉鼎的博客-CSDN博客 1、TortoiseGit简介 TortoiseGit是基于TortoiseSVN的Git版本的Windows Shell界面。它是开源的&#xff0c;可以完全免费使用。 TortoiseGit 支持…

redis突然变慢问题定位

CPU 相关&#xff1a;使用复杂度过高命令、数据的持久化&#xff0c;都与耗费过多的 CPU 资源有关 内存相关&#xff1a;bigkey 内存的申请和释放、数据过期、数据淘汰、碎片整理、内存大页、内存写时复制都与内存息息相关 磁盘相关&#xff1a;数据持久化、AOF 刷盘策略&…

v.sqlflow.cn 上线试用

马哈鱼数据血缘工具从2023年8月开始开通国内云版本的服务&#xff0c;相比国外版本&#xff0c;访问速度有很大的提升&#xff0c;访问域名为 https://v.sqlflow.cn. 2023年8月和9月注册的用户可免费获得价值 3000 元的一年高级帐户&#xff0c;可以使用马哈鱼数据血缘工具全部…

DCGAN对抗网络用于生成动漫卡通人物(Python代码)

DCGAN全称Deep Convolutional Generative Adversarial Networks&#xff0c;中文名深度卷积对抗网络。 1.1 DCGAN的特点 DCGAN除了G网络与CNN不同之外&#xff0c;它还有以下的不同&#xff1a; 1.取消所有pooling层。G网络中使用转置卷积&#xff08;transposed convolutiona…

集合中的数据结构

栈 先进后出入口跟出口在同一侧 队列 先进先出入口跟出口在不同的一层 数组 查询快、增删慢查询快是因为数组的地址是连续的&#xff0c;我们通过数组的首地址就可以找到数组&#xff0c;之后通过数组的下标就可以访问数组的每一个元素。增删慢是因为数组的长度是固定的&…