Обход TLS/Akamai Fingerprint Shield
Обход TLS/Akamai Fingerprint Shield

1. Предисловие

В предыдущих проектах я обнаружил, что некоторые веб-сайты будут получать разные результаты при использовании разных клиентов. Например, если вы используете браузер для доступа к ним, это будет нормально, но если вы используете Python для написания скрипта или запроса на завивку, это будет нормально. быть перехваченным. В то время я также попробовал восстановить пакет данных 1:1, но все еще не смог его решить.

Тестируйте сайты, блокирующие отпечатки пальцев:https://ascii2d.net

Недавно я прочитал статью Мастера《обойти Cloudflare Щит от отпечатков пальцев》,Очень трогательно,Я чувствую, что это проблема, с которой я сталкивался раньше; когда я писал рептилию, я столкнулся с чем-то вроде этого Щит отпечатков пальцев (механизм предотвращения восхождения),Еще они пытаются имитировать браузер через селен.,На этот раз я могу увидеть мир,Узнал что-то новое.

Этот контент в основном разделен на две части: 1 — для обхода распознавания отпечатков пальцев TLS, 2 — для обхода распознавания отпечатков пальцев Akamai (отпечатков HTTP/2).

2. Связанный с отпечатком TLS

2.1. Что такое отпечаток TLS?

Снятие отпечатков пальцев TLS — это технология, используемая для идентификации и аутентификации соединений TLS (Transport Layer Security).

Снятие отпечатков пальцев TLS позволяет определить характеристики связи TLS путем изучения такой информации, как наборы шифров, версии протоколов и алгоритмы шифрования, используемые во время установления связи TLS. Поскольку каждая реализация TLS использует разные наборы шифров, версии протоколов и алгоритмы шифрования, отпечатки TLS можно сравнить, чтобы определить, исходит ли сообщение от предполагаемого источника или пункта назначения.

Отпечатки TLS можно использовать для обнаружения угроз безопасности, таких как сетевой спуфинг, атаки «человек посередине» и шпионаж, а также для идентификации устройств и приложений и управления ими.

Отпечаток Принцип идентификации TLS (алгоритм ja3):https://github.com/salesforce/ja3

алгоритм ja3
алгоритм ja3

2.2. Проверка отпечатка TLS.

Проверьте различия отпечатков пальцев между разными клиентами (ja3_hash)

Для углубленного анализа вы можете использовать Wireshark для захвата пакетов TLS для сравнительного анализа.

Тестовый сайт:https://tls.browserleaks.com/json

  • CURL v7.79.1

curl v7.79.1
curl v7.79.1

  • CURL 7.68.0

CURL 7.68.0
CURL 7.68.0

  • Chrome 112.0.5615.137 (официальная версия) (x86_64)

Chrome 112.0.5615.137 (официальная версия) (x86_64)
Chrome 112.0.5615.137 (официальная версия) (x86_64)

  • Burp Chromium 103.0.5060.114 (официальная версия) (x86_64)

Burp Chromium
Burp Chromium

  • Python 2.11.1

Python 2.11.1
Python 2.11.1

Видно, что между разными клиентами существуют различия. Давайте кратко объясним последний файл ja3_text в Python.

  • первое значение 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 кривые, алгоритм эллиптической кривой.

2.3. Обход отпечатков пальцев TLS.

Теперь, когда мы все знаем принцип, обойти его — значит притвориться законным клиентом. Проще говоря, это значит замаскировать значение ja3_text так, чтобы его нельзя было перехватить, и, главным образом, изменить поддерживаемый алгоритм шифрования.

2.3.1. Нулевой метод: использовать встроенную urllib.

Язык кода:python
кодКоличество запусков:0
копировать
импортировать urllib.request
импортировать SSL

URL = 'https://tls.browserleaks.com/json'
req = urllib.request.Request(url)
соотв = urllib.request.urlopen(req)
печать (соответственно.read().декодирование())

# подделка Отпечаток TLS
контекст = 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)
печать(соответственно.read().декодирование())

urllib
urllib

2.3.2. Способ 1. Используйте другие зрелые библиотеки.

Можеткпытатьсяcurl\_cffiЭта библиотека,Главное – имитировать различные отпечатки пальцев.

Python binding for curl-impersonate via cffi. A http client that can impersonate browser tls/ja3/http2 fingerprints.

В дополнение к этому вы также можете попробовать pyhttpx, pycurl

Язык кода:shell
копировать
pip install --upgrade curl\_cffi

Тестовый код:

Язык кода:python
кодКоличество запусков:0
копировать
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="chrome101", proxies=proxies)
print(r.json().get("ja3\_hash"))

Эффект следующий:

curl_cffi
curl_cffi

Список браузеров, поддерживающих подделку, выглядит следующим образом:

Язык кода:python
кодКоличество запусков:0
копировать
# curl\_cffi.requests.session.BrowserType
class BrowserType(str, Enum):
    edge99 = "edge99"
    edge101 = "edge101"
    chrome99 = "chrome99"
    chrome100 = "chrome100"
    chrome101 = "chrome101"
    chrome104 = "chrome104"
    chrome107 = "chrome107"
    chrome110 = "chrome110"
    chrome99\_android = "chrome99\_android"
    safari15\_3 = "safari15\_3"
    safari15\_5 = "safari15\_5"

2.3.3 Способ 2: Подвесить слой клиентского прокси.

Здесь burp используется для завершения процесса аутентификации TLS при условии, что отпечаток TLS burp не будет перехвачен.

burp
burp

Отпечаток TLS Burp можно изменить следующими способами.

Изменить отпечаток TLS отрыжки
Изменить отпечаток TLS отрыжки

2.3.4 Способ 3: Изменить базовый код запросов.

SSL/TLS-аутентификация библиотеки запросов реализована на основе библиотеки urllib3, поэтому изменение нижнего уровня означает изменение кода urllib3.

Проверятьurllib3Место установки

Язык кода:shell
копировать
python3 -c "import urllib3; print(urllib3.\_\_file\_\_)"

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/urllib3/\_\_init\_\_.py

Изменить связанный SSL-код,Адрес файла обычноsite-packages/urllib3/util/ssl\_.py

Язык кода:python
кодКоличество запусков:0
копировать
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",
    ]
)

Существует много возможностей для манипуляций, такие как я, обычно сосредотачиваются на удалении и изменении позиций. Сравнение следующее:

vs
vs

3. Связанный с отпечатком пальца Akamai (отпечаток HTTP/2)

3.1. Что такое отпечаток пальца Акамай?

Akamai Fingerprint — это технология, разработанная Akamai Technologies для предотвращения вредоносных роботов и автоматических атак. Она основана на технологии снятия отпечатков пальцев браузера.

Снятие отпечатков пальцев браузера — это технология, используемая для идентификации веб-браузеров. Она идентифицирует браузеры путем сбора и анализа различных атрибутов и поведения браузера, таких как строки пользовательского агента, плагины, шрифты, языки, разрешения экрана и другая информация. Снятие отпечатков пальцев браузера широко используется в сфере интернет-безопасности и может использоваться для обнаружения и идентификации вредоносных ботов, мошенничества, фишинга и т. д.

Akamai Fingerprint использует технологию снятия отпечатков пальцев браузера, сочетая ее с другими технологиями безопасности для выявления и блокирования автоматических атак. Он может идентифицировать и проверять браузер, обращающийся к веб-сайту, не влияя на работу пользователя, а также предотвращать проблемы безопасности, такие как автоматические атаки, злоупотребление учетной записью и утечку данных.


Можно найти в https://tls.peet.ws/api/all Глядя на подробные отпечатки пальцев, основное содержание выглядит следующим образом.

HTTP2
HTTP2

Отпечаток пальца:1:65536,2:0,3:1000,4:6291456,6:262144|15663105|0|m,a,s,p

  1. 1:65536: HEADER\_TABLE\_SIZE,То есть размер таблицы заголовков составляет 64 КБ.,Относится к размеру, используемому для хранения заголовков запросов и ответов.,它是Можеткскорректированный。В этом поле указывается использование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
Язык кода:txt
копировать
: квертикальная полоса“|”отдельный。Конкретный смысл заключается в следующем:
Язык кода:txt
копировать
- `6:262144`: `max header list size`, который представляет собой размер динамической таблицы, относится к максимальному размеру HTTP-заголовка, который может получить получатель. Это поле указывает, что размер динамической таблицы составляет 256 КБ (т. е. 262 144 байта).
- `15663105`: `WINDOW\_UPDATE`, указывающий, что был получен кадр `WINDOW\_UPDATE` и размер окна увеличился на 15663105 байт.
- `0`: `no compress`, указывая, что сжатие заголовка не включено.
- к `:` начало header В кодировании участвует первый символ, разделенный несколькими запятыми. нравиться `:method`、`:authority`、`:scheme`、`:path` закодировано как `m,a,s,p`

Может在Passive Fingerprinting of HTTP/2 Clients中Проверять详细细节

3.2. Тест отпечатка пальца Акамай.

Тестовый сайт:https://tls.browserleaks.com/json

  • CURL

curl
curl

  • Chrome

chrome
chrome

  • Python

python
python

Вы можете видеть, что запросы Python прямо пусты, и мальчик-сканер напрямую перехватывается.

3.3. Обход отпечатка пальца Akamai.

Просто подделайте определенные поля в отпечатке пальца.

3.3.1. Способ 1. Используйте другие зрелые библиотеки.

Прямо сейчасcurl\_cffiЭта библиотека,因为Эта библиотека Главное – имитировать различные отпечатки пальцев.

Python binding for curl-impersonate via cffi. A http client that can impersonate browser tls/ja3/http2 fingerprints.

Язык кода:shell
копировать
pip install --upgrade curl\_cffi

Тестовый код:

Язык кода:python
кодКоличество запусков:0
копировать
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"))

Эффект следующий:

akamai
akamai

Список браузеров, поддерживающих подделку, выглядит следующим образом:

Язык кода:python
кодКоличество запусков:0
копировать
# curl\_cffi.requests.session.BrowserType
class BrowserType(str, Enum):
    edge99 = "edge99"
    edge101 = "edge101"
    chrome99 = "chrome99"
    chrome100 = "chrome100"
    chrome101 = "chrome101"
    chrome104 = "chrome104"
    chrome107 = "chrome107"
    chrome110 = "chrome110"
    chrome99\_android = "chrome99\_android"
    safari15\_3 = "safari15\_3"
    safari15\_5 = "safari15\_5"

4. Конечный эффект

https://ascii2d.net Существует защита от отпечатков пальцев CloudFlare, которая отклоняет сканеры, поэтому проверьте ее.

Прямой CURL, перехваченный

banned
banned

обойти

Язык кода:python
кодКоличество запусков:0
копировать
from curl\_cffi import requests

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

Страницу можно получить обычным способом

normal
normal

5. Справочник

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода