В предыдущих проектах я обнаружил, что некоторые веб-сайты будут получать разные результаты при использовании разных клиентов. Например, если вы используете браузер для доступа к ним, это будет нормально, но если вы используете Python для написания скрипта или запроса на завивку, это будет нормально. быть перехваченным. В то время я также попробовал восстановить пакет данных 1:1, но все еще не смог его решить.
Тестируйте сайты, блокирующие отпечатки пальцев:https://ascii2d.net
Недавно я прочитал статью Мастера《обойти Cloudflare Щит от отпечатков пальцев》,Очень трогательно,Я чувствую, что это проблема, с которой я сталкивался раньше; когда я писал рептилию, я столкнулся с чем-то вроде этого Щит отпечатков пальцев (механизм предотвращения восхождения),Еще они пытаются имитировать браузер через селен.,На этот раз я могу увидеть мир,Узнал что-то новое.
Этот контент в основном разделен на две части: 1 — для обхода распознавания отпечатков пальцев TLS, 2 — для обхода распознавания отпечатков пальцев Akamai (отпечатков HTTP/2).
Снятие отпечатков пальцев TLS — это технология, используемая для идентификации и аутентификации соединений TLS (Transport Layer Security).
Снятие отпечатков пальцев TLS позволяет определить характеристики связи TLS путем изучения такой информации, как наборы шифров, версии протоколов и алгоритмы шифрования, используемые во время установления связи TLS. Поскольку каждая реализация TLS использует разные наборы шифров, версии протоколов и алгоритмы шифрования, отпечатки TLS можно сравнить, чтобы определить, исходит ли сообщение от предполагаемого источника или пункта назначения.
Отпечатки TLS можно использовать для обнаружения угроз безопасности, таких как сетевой спуфинг, атаки «человек посередине» и шпионаж, а также для идентификации устройств и приложений и управления ими.
Отпечаток Принцип идентификации TLS (алгоритм ja3):https://github.com/salesforce/ja3
Проверьте различия отпечатков пальцев между разными клиентами (ja3_hash)
Для углубленного анализа вы можете использовать Wireshark для захвата пакетов TLS для сравнительного анализа.
Тестовый сайт:https://tls.browserleaks.com/json
Видно, что между разными клиентами существуют различия. Давайте кратко объясним последний файл 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 кривые, алгоритм эллиптической кривой.Теперь, когда мы все знаем принцип, обойти его — значит притвориться законным клиентом. Проще говоря, это значит замаскировать значение ja3_text так, чтобы его нельзя было перехватить, и, главным образом, изменить поддерживаемый алгоритм шифрования.
импортировать 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().декодирование())
Можеткпытатьсяcurl\_cffi
Эта библиотека,Главное – имитировать различные отпечатки пальцев.
Python binding for curl-impersonate via cffi. A http client that can impersonate browser tls/ja3/http2 fingerprints.
В дополнение к этому вы также можете попробовать pyhttpx, pycurl
pip install --upgrade curl\_cffi
Тестовый код:
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.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"
Здесь burp используется для завершения процесса аутентификации TLS при условии, что отпечаток TLS burp не будет перехвачен.
Отпечаток TLS Burp можно изменить следующими способами.
SSL/TLS-аутентификация библиотеки запросов реализована на основе библиотеки urllib3, поэтому изменение нижнего уровня означает изменение кода urllib3.
Проверятьurllib3
Место установки
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
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 Fingerprint — это технология, разработанная Akamai Technologies для предотвращения вредоносных роботов и автоматических атак. Она основана на технологии снятия отпечатков пальцев браузера.
Снятие отпечатков пальцев браузера — это технология, используемая для идентификации веб-браузеров. Она идентифицирует браузеры путем сбора и анализа различных атрибутов и поведения браузера, таких как строки пользовательского агента, плагины, шрифты, языки, разрешения экрана и другая информация. Снятие отпечатков пальцев браузера широко используется в сфере интернет-безопасности и может использоваться для обнаружения и идентификации вредоносных ботов, мошенничества, фишинга и т. д.
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:65536
: HEADER\_TABLE\_SIZE
,То есть размер таблицы заголовков составляет 64 КБ.,Относится к размеру, используемому для хранения заголовков запросов и ответов.,它是Можеткскорректированный。В этом поле указывается использование64KBРазмер таблицы заголовков。2:0
: HTTP2\_VERSION
,Указывает версию HTTP/2, используемую этим запросом. 0 означает H2,Указывает, что протокол HTTP/2 включен.3:1000
: MAX\_CONCURRENT\_STREAMS
,То есть максимальное количество одновременных потоков,означает, что в любой момент времени,客户端和服务器端Можетк Максимальное количество запросов, отправляемых параллельно。В этом поле указывается максимальное количество одновременных потоков, как1000。4:6291456
: INITIAL\_WINDOW\_SIZE
,То есть начальный размер окна потока,Относится к начальному размеру окна управления потоком.,То есть клиент можетк Максимальное количество отправленных байтов。В этом поле указывается начальный размер окна потока:6MB(Прямо сейчас6291456байт)。: квертикальная полосаâ|âотдельный。Конкретный смысл заключается в следующем:
- `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中Проверять详细细节
Тестовый сайт:https://tls.browserleaks.com/json
Вы можете видеть, что запросы Python прямо пусты, и мальчик-сканер напрямую перехватывается.
Просто подделайте определенные поля в отпечатке пальца.
Прямо сейчасcurl\_cffi
Эта библиотека,因为Эта библиотека Главное – имитировать различные отпечатки пальцев.
Python binding for curl-impersonate via cffi. A http client that can impersonate browser tls/ja3/http2 fingerprints.
pip install --upgrade 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"))
Эффект следующий:
Список браузеров, поддерживающих подделку, выглядит следующим образом:
# 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"
https://ascii2d.net Существует защита от отпечатков пальцев CloudFlare, которая отклоняет сканеры, поэтому проверьте ее.
Прямой CURL, перехваченный
обойти
from curl\_cffi import requests
req = requests.get("https://ascii2d.net", impersonate="chrome110")
print(req.text)
Страницу можно получить обычным способом