Перейти к содержимому

Сравнение

Страница, расширение или движок

Всякий способ изменить то, что читает сайт, работает на своей глубине. Глубина решает, что стоит на месте до появления первого ответа, что видит второй мир и чего стоит исправить одно неверное значение.

Три глубины одной правки

Значение, которое читает сайт, правят в трёх местах. В странице поверх готового ответа, в расширении, которое приходит к странице раньше, или в движке, который этот ответ и выдаёт.

Это не три степени одного и того же. Они отличаются тем, со сколькими вещами правке придётся сойтись.

  • В странице

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

  • В расширении

    Та же подмена, доставленная до того, как страница исполнит свой первый скрипт.

  • В движке

    Значение таким и выдаётся, поэтому подменять уже нечего.

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

Что приходит поверх готового ответа

Страничный слой приходит рано: скрипт кладут в собственный мир страницы на самом её начале, и он правда успевает раньше первого вопроса.

И всё равно это поправка поверх значения, которое браузер уже выдал. Подлинник никуда не девается: он остаётся доступен всюду, куда поправка не дотянулась.

Что отвечает второй мир

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

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

  • Документ

    Мир, который читает любая простая проверка, и первое, что закрывает страничный слой.

  • Невидимый кадр

    Дочерний мир со своей копией тех же объектов.

  • Фоновый поток

    Мир без документа, куда поправка, написанная для документа, не достаёт.

Восемь способов по своей глубине

Таблица читается как границы работы, а не как оценка. Пустая клетка значит, что вопрос к этому способу не относится.

Последняя строка наша, и любую клетку в ней вы можете проверить сами: за каждой стоит код, который открывается, или замер на собранном движке.

Где идёт правкаКогда она успеваетЧто читает поток или кадрЧего стоит ошибка
Обычный браузер как естьПравки нетТо же, что и документОшибаться нечем
Режим инкогнитоВ хранилище, а не в устройствеКогда открывается окноСобственные ответы машиныОшибаться нечем
Отдельные профили того же браузераВ каталоге данных на дискеПри запускеСобственные ответы машиныОшибаться нечем
Расширение, подменяющее значения в страницеВ странице, поверх настоящего ответаДо первого скрипта самой страницыКуда слой дотянулся, а в остальном машинуПерезапуск на починку и подменённое свойство на виду
VPNНа дороге, вне браузераДо первого ушедшего запросаПоказания устройства не тронутыПереподключиться через другой выход
Виртуальная машина на аккаунтВ гостевой системе, ниже браузераДо запуска браузераОтветы гостя, во всех мирахПересобрать образ и загрузиться заново
Отдельное железо на аккаунтНигде: отвечает сама машинаОтветы машины, во всех мирахОшибаться нечем
Браузер с правкой самого движкаВнутри движка, на C++До того, как появится первый ответТо же, что и документПересборка на часы, а объявленное и не собранное показание отдаст хозяйское значение

Чем оплачен ответ изнутри

Глубина стоит времени. Правка внутри движка это сборка браузера под каждую систему, то есть часы, а не перезапуск.

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

  • Страница отходит по одному показанию

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

Где выигрывает мелкий слой

Глубина нужна не всегда. Чтобы перекрыть запрос, страница не нужна вовсе: правило в сетевом слое срезает его раньше, чем страница что-нибудь заметит.

Браузер, который у вас уже есть, это настоящее преимущество, когда аккаунт один. Глубокий слой окупается там, где многим аккаунтам надо оставаться врозь на одной машине.

Чего это сравнение не утверждает

  • Не утверждает, что глубина решает исход. Аккаунт читают ещё по поведению и по истории, и их не трогает ни один слой.
  • Не описывает ни одного названного изделия. Здесь сравниваются способы работы, а мерить чужую сборку мы не берёмся.
  • Не каждое показание отвечает сегодня изнутри движка.
  • Не изолирует так глубоко, как гостевая система. Профили это процессы на вашем собственном ядре, и это ядро они делят друг с другом и с вами.
  • Замеры сняты на ARMANOS Browser и одной машине. Другая машина даст другие строки.

Как это проверить

За каждым утверждением выше стоит файл, а за большинством ещё и стенд, который исполняет код, а не пересказывает его.

Список того, что закрывает сборка, читается рядом с двоичным файлом, а его отсутствие читается как пустота
apps/desktop/src/lib/forkEngine.js
Один файл решает, что ещё закрывает страница, и стенд исполняет это решение
apps/desktop/src/lib/дыры-страницы.js · apps/desktop/test/страница-отходит-когда-движок-умеет.js
Каждое показание, объявленное сборкой, доказано признаком в дереве исходников
engine/scripts/опись-умений.js · packages/shared/src/index.js · apps/desktop/test/engine-patches-real.js
Документ, кадр и поток читаются порознь и сверяются между собой
apps/desktop/src/lib/fpAudit.js · apps/desktop/test/fingerprint-realms.js · engine/приёмка-отчёт.json

Вопросы

Расширение приходит раньше первого скрипта страницы. Почему этого мало?
Потому что ответ, который оно правит, уже есть. Всюду, куда поправка не дотянулась, подлинник остался на месте, и два ответа на один вопрос говорят больше, чем один странный ответ.
Почему не перенести все показания в движок разом?
Сборка занимает часы на каждую систему, поэтому показания приходят порциями.
Откуда программа знает, что закрывает сборка?
Список лежит рядом с самим движком, в той же скачанной папке. Если его нет или он испорчен, программа считает, что движок не закрывает ничего, и закрывает всё из страницы: ошибаться безопаснее в эту сторону.
Могут ли две поправки лечь на одно показание?
Нет. Показание, которое взял на себя движок, страница больше не правит, поэтому две поправки на одном значении не встретятся.
Видно ли подменённое свойство?
Подменённая в странице функция по-прежнему читается как встроенная, но подмена там всё-таки есть. Значению, которое выдал сам движок, прятать нечего.

Узнайте, на каком слое ваш браузер

Проверка снимает 12 показаний в вашем браузере и никуда их не отправляет.