Pull to refresh

Comments 3

PinnedPinned comments

Хорошо разложено по слоям, особенно часть про L4 - её часто опускают.
Один момент, который хотелось бы дополнить: автор пишет, что stealth-плагины «латают симптомы, а не причину» - но не объясняет, почему это принципиальная проблема на архитектурном уровне.

Дело в том, что JS-патчи (тот же puppeteer-extra-plugin-stealth) работают поверх уже запущенного движка. Это значит: между стартом процесса Chromium и моментом, когда патч успевает перехватить управление, есть окно. Агрессивные антифрод-системы (DataDome, некоторые имплементации Akamai) делают fingerprint-замер именно в этом окне - до того как ваш JS вообще загружается.

Единственный способ закрыть это окно - патчить сам движок на уровне C++, до компиляции. Тогда «нечеловеческие» значения просто не попадают в runtime никогда, а не перезаписываются постфактум.

BaaS-решения закрывают эту проблему по-разному: одни через runtime-патчи (быстро, но детектируемо при правильном замере), другие через модифицированный бинарник. Снаружи выглядит одинаково, а уровень защиты принципиально разный.

Хорошо разложено по слоям, особенно часть про L4 - её часто опускают.
Один момент, который хотелось бы дополнить: автор пишет, что stealth-плагины «латают симптомы, а не причину» - но не объясняет, почему это принципиальная проблема на архитектурном уровне.

Дело в том, что JS-патчи (тот же puppeteer-extra-plugin-stealth) работают поверх уже запущенного движка. Это значит: между стартом процесса Chromium и моментом, когда патч успевает перехватить управление, есть окно. Агрессивные антифрод-системы (DataDome, некоторые имплементации Akamai) делают fingerprint-замер именно в этом окне - до того как ваш JS вообще загружается.

Единственный способ закрыть это окно - патчить сам движок на уровне C++, до компиляции. Тогда «нечеловеческие» значения просто не попадают в runtime никогда, а не перезаписываются постфактум.

BaaS-решения закрывают эту проблему по-разному: одни через runtime-патчи (быстро, но детектируемо при правильном замере), другие через модифицированный бинарник. Снаружи выглядит одинаково, а уровень защиты принципиально разный.

Мне вот интересно откуда такие глубокие знания как у автора, так и у вас вообще берутся. Просто я довольно долгое время в парсинге, но о таком слышу впервые, оно как бы и понятно, потому что я использую только готовые библиотеки и не копаю так глубоко, но мне стало даже интересно как вы изучали это всё.

Мы разрабатываем CloakBrowser, так что как раз наша тема :)
Загляните к нам на github.

Sign up to leave a comment.

Articles