Система сильна на столько, на сколько сильна ее самая слабая часть
И снова здравствуйте.
Все мы задавались вопросом "какой антидетект-браузер выбрать?", и, что главное, "как выбирать?". Проблема в том, что в виду высокой сложности эмуляции чужой системы все антидетект-браузеры палятся.
В этом посте я расскажу и на примерах, аргументированно, без домыслов и теорий покажу, как они палятся, как минимизировать запал, и дам вам минимальное представление об устройстве каждого из них, чтобы вы могли выбрать сами.
Итак, у нас на операционном столе сегодня все четыре топовых браузера:
Linken Sphere, AntBrowser, Aezakmi и Indigo (он же "multilogin").
Все разработчики браузеров - классные ребята и любезно согласились предоставить мне демо, а зря.
1) Каждый антидетект-браузер сделан на базе движка обычного браузера. Как правило это Chromium или Firefox. Фундаментальные различия во внутреннем устройстве движков столь велики, что с помощью javascript на странице сайт всегда может определить, в каком на самом деле движке загружена страница сайта, которую мы просматриваем. Это значит, что антифрод знает, сделан ли ваш браузер на основе IE, хрома или фф.
Примеры:
И этот список можно продолжать бесконечно. Различий на столько много, что для разработчиков появился отдельный сайт http://caniuse.com/, позволяющий проверить, поддерживается ли тот или иной функционал в разных браузерах.
Отсюда первое правило работы с антидетект-браузером:
Используйте UserAgent, соответствующий движку вашего антидетекта.
Например, если ваш антидетект сделан на Хромиуме, и ваша ось - это мак, то используйте самый обычный UserAgent хрома на маке, например Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36
2) Железо не должно быть уникальным. Оно должно быть "таким же, как у всех".
Характеристики железа вашего пк отражаются в следующих отпечатках:
Других способов опознать ваше железо через браузер на десктопе, например узнать серийник жесткого диска или процессора или цветовой профиль монитора не существует. На мобильных к списку добавляется акселерометр (и данные по его калибровке), но это тема отдельной статьи.
Желающие углубиться в теорию могут посмотреть презентацию разработчика гугла https://elie.net/publication/picasso-lightweight-device-class-fingerprinting-for-web-clients/ (eng) про фингерпринт на основе WebGL, используемый в том числе и в ReCaptcha.
Чем более не уникальный каждый из этих отпечатков, тем меньше к вашему устройству вопросов, т.к. оно "такое же, как и все". Ни один из этих отпечатков не позволяет уникально идентифицировать ваше устройство, но позволяет условно определить его "класс" (например "ПК с дискретным видео", или "телефон, вероятно айфон"). И лучший способ держать эти отпечатки правдоподобными - не трогать их. Без шуток.
Второе правило работы с антидетект-браузером:
Не трогай свои железные отпечатки
3) Когда мы используем прокси другой страны, неизбежно встает вопрос о смене отображаемого языка, часового пояса, и возможно набора шрифтов, соответствующего вашей локали (в случае работы с азиатскими рынками)
Есть три основных способа подменить в браузере возвращаемые через javascript значения языков, часового пояса, разрешения экрана и тд:
Третье правило антидетект-браузера:
Не трогай и не модифицируй через javascript ничего на странице/сайте
Снова обратимся к теории, чтобы понять, как сайт/антифрод может определить, что параметры браузера подменены через javascript.
Чаще всего нам нужно подменять язык ос, чтобы он соответсововал локации пользователя. Кроме того, что он передается на сайт в заголовке Accept-Language, он доступен для js через переменную navigator.language.
Свойства объекта navigator нельзя просто перезаписать, т.к. они доступны только для чтения. Read-only-объекты в javascript традиционно реализуются через создание у объекта пустого setter-a и не пустого getter-a, возвращающего нужное значение. По-этому у нас всегда остается возможность перезаписать такие объекты через вызов Object.defineProperty:
Мы можем присвоить изменяемому объекту value, а можем навесить на него свой getter, перезаписав его родной, и сохранив таким образом "нативное" read-only поведение этого объекта:
Вуа-ля, мы подменили нужное нам значение. Но что же могло пойти не так? Все пошло не так, Наташ.
Изначально такие объекты как navigator, screen и некоторые другие не имеют собственных свойств, а наследуют все свойства от конструктора старшего брата (объектов Navigator и Screen соответственно). А вызов Object.defineProperty на любом из этих объектов создает у них собственные свойства:
Таким образом любой сайт/антифрод просто вызвав одну строчку кода if( Object.getOwnPropertyNames(navigator)[0] ) alert('fake parameters detected');
может определить, что параметры нашего браузера - фальшивка. И в этот момент все навороченные защиты и эмуляции становятся бесполезны.
Теперь, когда мы определились, куда будем смотреть, перейдем к нашим котятам. Для создания профилей я выбирал дефалтные настройки, без прокси, с минимально-возможными подменами отпечатков и переменных окружения (экран, цветность, х*е-мое)
Вариант, собранный на базе Хромиума, с кодовым названием "Mimic".
Самый крепко сбитый браузер из всех, а так же единственный браузер, в котором подмена параметров реализована в исходниках, а не через js.
Ничего нигде не торчит, ничего не палится, кроме...
1) Выключен http3 протокол, который по-умолчанию доступен в хроме с 2013 года. Каждый сайт видит тип соединения и протокол (http1.1, h2 или http/2+quic, он же http3), по которому к нему обращаются. И в случае, если к сайту, поддерживающему http3 идет обращение от хрома, но по http2, то или это обращение идет через прокси, или это не настоящий хром. И первый и второй выводы, сделанные анти-фрод системой - плохи для нас.
2) При отрисовке текста в качестве моноширинного шрифта используется шрифт Times, который не является моноширинным. В дикой природе это невозможно и это очевидный признак подмены шрифтов. Моноширинный шрифт - тот, у которого ширина всех символов (например w и i) одинаковая, например Courier new. Согласно спецификации при указании в стилях элемента font-family: monospace; браузер должен взять один из доступных моноширинных шрифтов (в системе хотя бы один такой шрифт обязательно доступен).
Несоответствие шрифта сайт может определить отрисовав его на канвасе, и померив, совпадает ли ширина символа ' и w, например. Разницу вы можете заметить сами на скриншоте выше. В случае с Indigo любой сайт (и антифрод) может увидеть, что используется фальшивый шрифт, а не родной системный.
На этом с Indigo все.
Антидетект на базе хромиума. Самый дорогой из всех, и самый рекламируемый. В его толстовках приходят на интервью в "Люди-Pro", и его пиарят в журнале "Хакер". Последний раз он обновлялся 13/09/2019 (пол года тому назад) и вот тут начинается безобразие.
1) На самом деле он собран на базе хромиума от ~2018 года:
а значит мы не только лишены не самых нужных вещей, типа поддержки apng, VP9 и AV1 кодеков, но и открыты к множеству уязвимостей, которые были исправлены в хроме за эти годы.
2) Так же, как и в Indigo не работает поддержка http3.
3) Все параметры подделываются после инициализации страницы с помощью javascript, и любой сайт может это видеть (с помощью метода, который я описал выше):
Паршиво. Но можно ли сдедать хуже? Посмотрим
Антидетект на базе ФФ, позиционарующий себя как инструмент для работы с ру-сервисами типа Авито и Юлы.
1) По скольку браузер на базе ФФ, все попытки представиться хромом будут провалены, из-за разницы в устройстве движков. Наличие переменной window.chrome - как раз такая неудачная попытка. На странице одновременно присутствует объект window.chrome и объекты sidebar, screen.mozLockOrientation, navigator.oscpu, которые однозначно указывают, что движок браузера - ФФ
2) Так же как и в Indigo используется фарш из шрифтов. И используется обыкновенный шрифт вместо моноширинного:
3) Все переменные на странице подменяются через javascript:
Разработчик пытался исправить ситуацию, и подменял не свойства самого объекта navigator, а свойства у прототипа его конструктора navigator.constructor.prototype. И это бы сработало, если бы их геттеры не содержали десятки килобайт обфусцированного кода, который доступен каждому сайту/антифроду.
4) На каждой странице в dom-дереве к тегу <html> добавляется параметр data-acxscriptallow="true", который указывает, что на странице запущено расширение для браузера AudioContext Fingerprint Defender. То есть код этого расширения был содран и добавлен в антидетект "как есть".
Можно ли сделать еще хуже?
Антидетект на основе хромиума. Позиционируется как "Cheat Code for Your Anonimity".
На старте при создании профиля разработчики пытаются удержать нас от возможности слить реальные webGL-отпечатки, разрешая только создание профиля с отключенной поддержкой 3d-ускорения:
*"ANGLE" в названии указывает на отсутствие поддержки 3d-ускорения в браузере
Но на этом хорошие новости заканчиваются.
1) Браузер из коробки запускается с флагом --disable-web-security. Это на столько плохо, на сколько вообще может быть.
Запущенный таким образом хром отключает CORS и любой сайт может обратиться, например, к facebook.com и получить все наши данные профиля.
2) так же, как и в случае с AntBrowser, на каждой странице к тегу <html> добавляются параметры data-cbscriptallow="true" и data-acxscriptallow="true", которые указывают на присутствие кода от расширений для спуфинга canvas и audio отпечатков.
3) Массив плагинов подделывается криво и не имеет поля собственной длинны:
Это однозначно указывает на то, что список плагинов фальшивый.
4) На каждой странице в глобальную переменную webglResponseStr помещается весь текущий конфиг профиля браузера целиком:
В этих данных содержатся в том числе:
И к этим данным имеет доступ любой сайт, который вы откроете в этом антидетекте.
Резюмируя, AEZAKMI - это будка самоубийцы, ценой в 70$ в месяц.
Действительно ли все на столько плохо на рынке антидетектов? Да, на данный момент, безусловно все паршиво.
Столь безответственное отношение большинства разработчиков антидетектов к своим клиентам и их материалу - это не то, что нужно индустрии. Рынку нужно знание, прозрачность и конкуренция. В душе я жду, что появится больше игроков, руководствующихся принципом "нормально делай - нормально будет", а не "и так сойдет".
"Так каким антидетектом пользоваться-то?". Мой ответ - "никаким", Но...
...удобство, которое приносит управление десятками профилей из одной программы подкупает, и если вам все же нужен именно антидетект-браузер, на данный момент берите Indigo - за него с некоторыми допущениями не стыдно.
В следующей статье я расскажу про антифрод-систему фейсбука и покажу на примере "Как собрать свой антидетект для работы с ФБ бесплатно без регистрации без смс", который гарантированно будет работать так, как вы от него ждете.
С вами был Bad Advertiser. Я открыт к сотрудничеству и интересной движухе)
Оригинал статьи у меня на канале: https://t.me/oxbadad
До встреч.
Есть только один момент, касаемо аргумента --disable-web-security.
из-за этого можно получить доступ к локальным файлам компьютера.
Это не совсем верно.
Так можно было сделать с хромиумом версии ниже 53.
Эта опция НЕ ДАЕТ САЙТАМ ДОСТУПА К ВАШИМ ЛОКАЛЬНЫМ ФАЙЛАМ!
Метод работает только при запуске самого JS скрипта, запрашивающего файл, прямо с диска.
Через http это не сработает и область видимости может быть максимум внутри директории с браузерной сессией.
Область доступа ограничивается папкой в которой лежит текущая сессия браузера. Под каждый профиль браузера на компьютере создается отдельная, изолированная от других сессий папка, дальше нее сайт доступа не имеет.
Обратите внимание, сайты загруженные в aezakmi не имеют доступа к локальным файлам.
Приношу свои извинения.