Как работают антидетект-браузеры: полное техническое объяснение

Поверхности отпечатка, генерация согласованной идентичности, изоляция хранилища на диске, маршрутизация для каждого профиля и честные пределы всего подхода.
Антидетект-браузер выполняет четыре задачи. Он хранит данные просмотра каждого профиля отдельно, управляет идентичностью устройства, о которой сообщает каждый профиль, направляет трафик каждого профиля независимо и поддерживает согласованность всех трёх со временем. В этой статье разбирается, как выполняется каждая из задач, на уровне механизма, а в конце говорится о том, чего этот подход не может.
Поверхности отпечатка
Начнём с того, что может прочитать страница, потому что всё остальное — ответ на это. Скрипт на любом сайте может задавать браузеру вопросы, и ответы описывают компьютер. Поверхности естественно складываются в группы.
| Поверхность | Что читает страница |
|---|---|
| Navigator | Название и версия браузера, платформа, список языков, заявленное число процессоров и объём памяти, поддержка касаний |
| Экран | Ширина, высота, доступная рабочая область, глубина цвета, соотношение пикселей устройства |
| Canvas | Точные пиксели, полученные при отрисовке текста и фигур вне экрана, преобразованные в стабильное хеш-значение |
| WebGL | Строки производителя и модели графики, а также хеши отрисованных сцен |
| Аудио | Выход осциллятора, пропущенный через граф обработки звука, который различается в зависимости от стека |
| Шрифты | Какие гарнитуры установлены, определяется по измерениям текста |
| Часовой пояс и часы | Заявленный пояс и смещение, сравниваемые с тем, откуда приходит трафик |
| Сеть | Сам адрес, взгляд WebRTC на кандидатов соединения и форма TLS-рукопожатия |
Ни одна строка по отдельности не идентифицирует компьютер. Идентифицирует их совокупность, и именно в ней же ловят ложь: значения, которые не могли принадлежать одной реальной машине, выдают сильнее любого отдельного значения.
Сбор дёшев и бесшумен. Каждое значение из таблицы доступно любой странице через документированные API без запроса разрешения, и большая часть поступает в первую секунду визита. Какой бы позиции вы ни придерживались в отношении этой практики, это постоянный факт современного веба и та база, против которой проектируется антидетект-браузер.
Как генерируется согласованная идентичность
Наивный подход — перехватывать каждый вопрос и случайно подменять ответ. Он не работает по структурной причине. Ответы описывают одну машину, поэтому они коррелированы, а независимо случайные ответы эти корреляции ломают. User-Agent Windows рядом со шрифтами, которые есть только в macOS, размер экрана, с которым не выпускали ни один ноутбук, строка графики, которая никогда не сочеталась с заявленной платформой: каждое из этих противоречий проверяется дёшево.
Поэтому рабочий антидетект-браузер генерирует идентичность как набор. Он начинает с реального распространённого класса машин и выводит из этого выбора каждое значение. Платформа определяет правдоподобный список шрифтов, строки графики и поддержку касаний. Экран берётся из размеров, с которыми такой класс машин действительно выпускается. Язык и часовой пояс берутся из предполагаемого региона профиля. Значения согласованы друг с другом, потому что выбирались вместе, из одного описания одной машины.
Второе свойство не менее важно: набор сохраняется. Он записывается в профиль при его создании, и каждая сессия сообщает одни и те же значения, потому что устройство, меняющееся от визита к визиту, описывает оборудование, которого ни у кого нет. Стабильность — это большая часть правдоподобия.
Изоляция хранилища на диске
Задача хранилища — наименее эффектная и наиболее абсолютная. У каждого профиля свой каталог, и всё, что браузер сохраняет, лежит внутри него: база cookie, Local Storage, IndexedDB, HTTP-кэш, регистрации service worker, состояние расширений, история и сохранённые учётные данные. Два профиля — это два непересекающихся каталога, и каждый запущенный браузер указывает на свой.
Проверять нужно полную непересекаемость, потому что частичная изоляция даёт сбой незаметно. Cookie разделить легко. Кэш может опознать вернувшийся браузер по сохранённым им ресурсам. Service worker могут хранить идентификаторы и продолжать работать между визитами. IndexedDB — это место, где современные приложения держат записи, которым они действительно доверяют. Изоляция, которая охватывает известные хранилища и делит любые другие, изолировала лишь видимую часть проблемы.
Вторая половина — постоянство. Сессии накапливают ценность: пройденные проверки безопасности, установленная история входов, облик вернувшегося посетителя. Профиль сохраняет свой каталог между сессиями, и именно это вообще делает возможной работу с аккаунтами. Запись при закрытии делает каталог долговечным, и поэтому принудительное завершение процесса профиля посреди сессии может стоить только что установленной сессии.
Сетевая маршрутизация
У каждого профиля свой маршрут, применяемый при запуске его браузера, так что трафик выходит через прокси этого профиля, не затрагивая системные настройки или маршруты других профилей.
- Прокси привязывается к профилю, а не к компьютеру. Обычные браузеры берут системный прокси. Здесь каждый запущенный профиль подключается через собственную точку выхода.
- Разрешение имён тоже идёт через маршрут, потому что запрос, пришедший из одной страны, а DNS-запросы из другой, — это противоречие на сетевом уровне.
- WebRTC ограничивается так, чтобы согласоваться с маршрутом. Если оставить его как есть, он может показать кандидатов соединения, которых прокси не касался.
- Часовой пояс и язык подгоняются под страну маршрута, потому что адрес — единственное значение, которое нельзя сгенерировать, и остальной рассказ должен с ним согласоваться.
Маршрут — ещё и тот компонент, который стоит проверять независимо, потому что его покупают у третьей стороны. Проверка точки выхода до назначения и чтение наблюдаемого адреса, а не заявленного, ловит сбой, пока он остаётся проблемой настройки, а не проблемой аккаунта.
Что меняет сам браузер
Есть два места, где инструмент может изменить ответы, получаемые страницей, и различие между ними — самая техническая развилка в этой теме.
| Подход | Как работает | Слабое место |
|---|---|---|
| Внедрение скрипта | Расширение или внедрённый скрипт переопределяет функции, которые вызывает страница, так что чтение canvas и запросы к navigator возвращают подставленные значения | Сами переопределения видны. Подменённые функции можно распознать как подменённые, а любая поверхность, о которой инжектор забыл, по-прежнему отвечает настоящим значением |
| Внутри собственного кода браузера | Реализация браузера отвечает сохранёнными значениями профиля в тех участках кода, где получаются настоящие значения | Значительно больше работы по созданию и поддержке, и именно это отличает специализированные инструменты от расширений |
Подход с внедрением — то, с чего началась эта категория, и его потолок хорошо известен: страница может проверить, выглядят ли нативные функции по-прежнему нативными, и может добраться до той же поверхности путём, который внедрение не покрыло. Поэтому специализированные антидетект-браузеры вносят изменения внутри самого браузера, так что сохранённая идентичность — это то, о чём сообщает реализация по любому пути, который её читает.
Что на самом деле делает открытие профиля
- Загружается сохранённая идентичность: один согласованный набор значений устройства, тот же, что и в прошлый раз.
- Браузер запускается на собственном каталоге профиля, так что каждое постоянное хранилище — собственное хранилище профиля.
- Применяется маршрут: прокси, разрешение имён через него, WebRTC, ограниченный им.
- Сессия идёт, накапливая состояние внутри каталога.
- При закрытии состояние записывается, так что при следующем открытии продолжаются то же устройство, то же хранилище и тот же маршрут.
Каждый пункт этого списка можно проверить снаружи. Откройте страницу проверки отпечатка дважды и сравните значения между запусками. Посмотрите на каталог профиля на диске. Прочитайте наблюдаемый адрес. Инструмент этой категории должен приглашать к такой проверке, потому что механизм и есть продукт.
Честные пределы
У подхода есть границы, и знание их — часть умелого использования.
- Он не может сделать браузер невозможным для идентификации, и никто всё равно не может измерить такое утверждение. Реалистичная цель — профиль, который выглядит как обычная, внутренне согласованная машина и остаётся стабильным.
- Он не исправит противоречия, которые вносите вы. Маршрут в одной стране с часовым поясом другой — это ошибка конфигурации, и инструмент может лишь сделать правильную конфигурацию лёгкой.
- Он не охватывает поведение. Тайминг, объём и ритм читаются вместе со средой, и группа аккаунтов, действующих синхронно, выдаёт себя, как бы чиста ни была каждая среда.
- Он не охватывает заявленную идентичность. Общие данные для восстановления, общие платёжные средства и повторяющийся текст связывают аккаунты через собственные записи платформы, гораздо выше уровня браузера.
- Он не меняет правила платформ. Изоляция разделяет законные среды. Что платформа разрешает — решает платформа, и здесь не обещается никакой результат на платформе, которую мы не контролируем.
Читайте пределы как определение, а не как разочарование. Антидетект-браузер — это инструмент согласованности: раздельное хранилище, стабильная и правдоподобная идентичность, подходящий маршрут, удерживаемые вместе для каждого профиля и одинаково воспроизводимые при каждом открытии. Это и есть весь механизм, а всё остальное, что пишут об этой категории, — вариации на эту тему.

