Возможность
Блокировка трекеров и чистка ссылок
- 40
- Вырезаемых параметров
- 4
- Списков трекеров в программе
- 3
- Наборов правил в расширении профиля
- Только на этом компьютере
- Где живут счётчики
Блокировка работает в сетевом слое, а не внутри страницы
У каждого профиля две задачи. Отказывать в запросах к трекерам и вырезать отслеживающие параметры из адресов, по которым вы переходите. Как именно это делается, зависит от движка, на котором профиль запущен.
На ARMANOS Browser программа при запуске пишет в папку профиля небольшое расширение и подаёт его через --load-extension. Его правила это правила declarativeNetRequest, поэтому совпадение решается внутри сетевого слоя. В странице не появляется ничего, что сайт мог бы заметить, и ни один запрос не ходит к программе за приговором.
У встроенного движка Electron такой дороги нет, поэтому работу делает сама программа в своём процессе. Совпавший запрос отменяется в session.webRequest.onBeforeRequest, а адрес, который можно почистить, перенаправляется на чистый.
Обе дороги собираются из одной функции, buildBlocker в tracker-rules.js. Это сделано нарочно. Защита писалась под Electron, и когда ARMANOS Browser стал движком по умолчанию, он выдавал отпечаток и больше ничего, а экран «Защита» вечно показывал ноль.
Профиль, который нельзя защитить, не открывается
В программе четыре списка, и нужные выбирает сценарий профиля
Общий список содержит 31 запись и достаётся любому сценарию. Это аналитика, замеры продукта, отчёты о падениях и запись сеансов: google-analytics.com, googletagmanager.com, doubleclick.net, app-measurement.com, sentry.io, hotjar.com, fullstory.com, appsflyer.com и соседи.
Три остальных списка сценарные и складываются с общим. У профиля «Приватность» выходит 31 запись, у «Соцсетей» 74, у «Рекламных кабинетов» 56. Лишнего не грузится: незнакомое имя списка отвергается и попадает в журнал, а не подгружает молча пустоту.
Рекламный список самый сдержанный, и это осознанно. Из него убраны все узлы, без которых кабинет не пускает внутрь, не грузится, не принимает макеты, не выставляет счета и не отвечает на свой же API. Правило, срабатывающее внутри кабинета, которым вы зарабатываете, это риск для дела, а не защита.
Одна запись может совпадать тремя способами. Голое имя узла ловит сам узел и его поддомены. Запись с косой чертой ищется как кусок всего адреса. Запись с двумя косыми привязана к началу имени, поэтому log.pinterest.com блокируется, а настоящий blog.pinterest.com остаётся нетронутым.
| Список | Записей | Кому достаётся | Что в нём |
|---|---|---|---|
| general | 31 | любому сценарию | аналитика, отчёты о падениях, запись сеансов, мобильная атрибуция |
| 23 | Работа, Соцсети | рекламные и аналитические узлы LinkedIn, insight tag, tr.lnkd.in | |
| social | 33 | Соцсети | пиксели Meta, TikTok, X, Pinterest, Snapchat и Reddit |
| ads | 25 | Рекламные кабинеты | точки приёма конверсий и аудиторий, брокеры данных |
Свою слежку площадка ведёт со своего адреса, и её ловят правила по путям
Список доменов ловит чужие счётчики. Саму площадку он не поймает никак: её запросы идут на тот самый сайт, куда вы пришли, и с его же адреса. Для этого есть отдельные наборы правил, которые сверяются с путём.
Набор LinkedIn закрывает /li/track, /px/, /li/fta, /csp/fta и обращение за просмотром профиля. Два правила в нём привязаны к содержимому запроса: обращение к переписке отбрасывается, только если несёт seen или typing, а поиск, только если несёт track, analytics или impression.
Набор соцсетей закрывает Meta, X и Pinterest. Две записи Meta стоят дороже остальных: facebook.com/ig_xsite_user_ и instagram.com/accounts/xuserid это обмен опознавателями между приложениями, который связывает аккаунт Facebook с аккаунтом Instagram, и он срабатывает на обычной загрузке любой из этих страниц.
Каждый набор заперт на своих узлах, и это не аккуратность ради вида. В наборе LinkedIn есть голые слова beacon, telemetry и /px/. Пока они применялись везде, у профиля LinkedIn на постороннем магазине перекрывался файл /assets/beacon.js, а на новостном сайте картинка /px/, без единого объяснения. Теперь сценарий получает только те правила, которые на нём проверяли.
Набор LinkedIn
/li/track, /px/, /li/fta, /csp/fta, /voyager/api/identity/profileView, viewedEntity. Срабатывает только на linkedin.com и licdn.com.
Набор соцсетей
/ajax/bz, /logging_client_events, /cavalry_endpoint.php, instagram.com/logging/, /i/jot, /1.1/attribution, pinterest.com/_/_/trace/. Срабатывает только на собственных узлах этих площадок.
Рекламные кабинеты
Голых правил по путям нет вовсе. Только пары «узел плюс признак», например ads.google.com вместе с /gen_204, /jserror или /csi_204.
Чистка ссылок убирает 40 параметров до того, как их увидит страница
Чистка включена у всех шести сценариев. Имена параметров лежат в одном общем списке, поэтому оба движка вырезают ровно одно и то же и разойтись не могут.
На встроенном движке запрос главного кадра проходит через cleanUrl. Если что-то удалено, запрос перенаправляется на чистый адрес, а счётчик очищенных ссылок растёт. На ARMANOS Browser это одно правило declarativeNetRequest с преобразованием запроса, которое убирает эти имена из переходов в главном кадре и во вложенных.
Работа в сетевом слое, а не через круг перенаправлений, меняет и то, что вы видите: в адресной строке стоит чистый адрес, а параметр не доходит до страницы вовсе.
Ради меток кликов всё и затевалось. В списке одно время был fbclid без родни, поэтому метка клика TikTok или X переживала чистку и уносила с собой ровно ту связку, которую чистка и должна разрывать. Для площадок из сценариев соцсетей и рекламы добавили ещё одиннадцать.
- Метки рекламных кликов
- fbclid, gclid, msclkid, dclid, ttclid, twclid, wbraid, gbraid, yclid, rdt_cid, ScCid, epik
- Метки кампаний
- utm_source, utm_medium, utm_campaign, utm_content, utm_term, mc_cid, mc_eid
- Опознаватели сеанса и профиля
- _ga, _gl, igshid, mibextid, li_fat_id
- След LinkedIn
- trk, trkInfo, lipi, lici, trackingId, refId, midToken, midSig, trkEmail
Чистка идёт на переходах, а не на каждом ресурсе, который страница подтянет потом.
Два вида слежки не видит ни один сетевой перехват
Две вещи для правил по адресу недостижимы по устройству. navigator.sendBeacon срабатывает при уходе со страницы, и содержимое отправки это и есть слежка. Кадры WebSocket непрозрачны для любого правила, которое читает только адрес.
Там, где сценарий об этом просит, скрипт в мире самой страницы подменяет оба. sendBeacon сообщает о событии и возвращает true, поэтому страница считает отправку удавшейся. WebSocket.send отбрасывает короткие отправки до 500 знаков со словами TYPING, READ_RECEIPT или SEEN, и отметки «печатает» и «прочитано» перестают уходить, а остальной обмен идёт как шёл.
Подмена обязана выглядеть как то, что она заменила. Имя и длина берутся у настоящей функции, а один общий toString прячет их все, включая себя. На собранном движке замерено: у sendBeacon длина 1, а не 2, как следует из описания, поэтому число копируется, а не пишется от руки.
Две половины переговариваются через CustomEvent со случайным именем, выбранным на этот запуск. Раньше это был window.postMessage, и всякая страница с обычным слушателем сообщений получала содержимое с названием продукта, а заодно могла подделать чужие числа.
Маяки
sendBeacon подавляется в сценариях со скрытностью и считается отдельно от сетевых блокировок.
Отметки прочтения и набора
сценарии с приватностью переписки отбрасывают именно эти кадры, остального обмена не касаются.
Продукт себя не называет
половина в странице и половина в расширении делят случайное имя события, которое сайт угадать не может.
Счётчики собираются на вашем компьютере и остаются на нём
На ARMANOS Browser служебный работник расширения слушает срабатывания правил, переводит сработавший набор (блокировка, слежка или параметры) в свою колонку, копит 500 миллисекунд и отправляет пачку на петлю 127.0.0.1 со случайной меткой профиля. Наружу не уходит ничего.
Держать этого работника живым важнее, чем кажется. Работник MV3 выгружается между событиями, а срабатывания видны, только пока он жив. Замерено: час работы давал нули по всем колонкам, при том что блокировка исполнялась безупречно. Открытая связь из верхнего кадра держит работника, пока открыта хоть одна страница.
Программа считает эти сообщения местным вводом, а не истиной. Каждая пачка обрезается сверху, и принимаются только пять колонок. Числа ложатся в stats.json в папке данных программы, по дням и по профилям, с историей за 14 дней, а файл пишется не чаще раза в секунду, чтобы тяжёлая страница не превратила подсчёт в тормоза.
Экран «Защита» показывает сегодняшнее число, последние 7 дней, всего, разбивку по видам и по профилям и столбик на каждый день. Кнопка сброса стирает файл на месте, и синхронизировать нечего, потому что никуда ничего и не отправлялось.
- Трекеры
- запросы к узлам из объединённого списка
- Телеметрия LinkedIn
- пути собственной слежки площадок, какой бы набор ни сработал
- Очищено ссылок
- переходы, из которых вырезали параметр
- Маяки
- подавленные вызовы sendBeacon
- WebSocket-слежка
- отброшенные отметки прочтения и набора
Считается только на этом компьютере и сохраняется, когда вы закрываете ARMANOS.

На встроенном движке установленный блокировщик сам по себе не блокирует
Electron не исполняет declarativeNetRequest. Замерено одним и тем же расширением на обоих движках: на встроенном запрос, который блокировщик обязан был остановить, дошёл до сервера, а ARMANOS Browser его отсёк. Блокировщик там загружается, показывает значок и сам по себе не останавливает ничего.
Часть этой ямы программа закрывает сама. Она читает файлы правил, названные в манифесте расширения, только внутри его же папки, и исполняет их перехватом запросов вместе с обстановкой, которая правилам нужна: с какой страницы спрашивают, какой это вид ресурса и каким способом.
Чего она не делает, так это не притворяется. Правило со своим регулярным выражением, с условиями по вкладкам, по заголовкам ответа или по узлам запроса считается непонятым и не применяется. Правило без своего условия блокирует больше просимого и оставляет вас с белым экраном вместо сайта, поэтому два числа, исполняемых и непонятых, держатся врозь и уходят в журнал.
Раз яма настоящая, в разделе расширений стоит предупреждение всякий раз, когда запустится именно встроенный движок. Выбранный, но не установленный ARMANOS Browser считается встроенным, потому что запуск придётся именно на него.

Что вы с этим делаете
Отдельного выключателя здесь нет. Сценарий, выбранный для профиля, определяет списки, набор правил слежки и скрипты страницы, а остальное происходит при запуске.
- 1
Выберите сценарий при создании профиля
«Приватность» получает только общий список. «Соцсети» получают общий, LinkedIn и социальный списки плюс оба набора правил слежки. «Рекламные кабинеты» получают общий и рекламный списки с правилами, запертыми на узлах кабинетов.
- 2
Включите ARMANOS Browser в разделе движка
Блокировка и чистка работают на обоих движках, но собственные правила установленного блокировщика исполняются полностью только там. Сегодня в поставке 153.0.7978.0.
- 3
Работайте как обычно и загляните в «Защиту»
Сегодня, последние 7 дней и всего, с разбивкой по видам и по профилям. Профиль с нулём после настоящей работы говорит вам, что его движок или сценарий не те, о которых вы думали.
- 4
Сбросьте счётчики перед замером
Сброс местный и мгновенный, поэтому чистый счёт на одной машине начинается, не задевая ничего на сервере.
Чего это не делает
- Это не блокировщик рекламы. Списки описывают связывающую инфраструктуру, от 31 до 74 записей на сценарий, поэтому баннеры и рекламные посты продолжают показываться.
- Сайты, куда вы вошли, всё равно вас знают. Вход это личность, которую вы отдали сами, и отсечение чужих счётчиков её не возвращает.
- Рекламный список нарочно щадит кабинеты. Всё, что кабинету нужно для входа, загрузки, счетов и своего API, исключено, поэтому работа внутри кабинета остаётся видимой площадке.
- На экране «Защита» строка слежки по-прежнему подписана как телеметрия LinkedIn, даже когда число пришло от набора соцсетей или рекламных кабинетов.
- Четыре списка едут внутри программы и меняются вместе с её обновлением. Подписки на список, который сам обновляется по расписанию, здесь нет.
Как проверить
Откройте файл, затем стенд, который его сторожит.
- Правила для обоих движков собирает одна функция, и каждый набор слежки заперт на своих узлах
- apps/desktop/src/lib/tracker-rules.js · apps/desktop/test/слежка-по-хостам.js
- На ARMANOS Browser те же правила становятся расширением профиля, и это замерено живьём через прокси на петле
- apps/desktop/src/lib/forkExtension.js · apps/desktop/test/блокировка-живьём.js
- 40 вырезаемых параметров лежат в одном общем списке, которым пользуются оба движка
- packages/shared/src/index.js · apps/desktop/test/блокировка-живьём.js
- На встроенном движке правила установленного расширения исполняет сама программа, а непонятые правила считаются отдельно
- apps/desktop/src/lib/dnrBlock.js · apps/desktop/test/builtin-blocking.js
- Раздел расширений предупреждает всякий раз, когда запустится встроенный движок
- apps/desktop/src/manager/store.js · apps/desktop/test/extension-limits-honest.js
Читать дальше
Движок ARMANOS
Где действительно исполняются правила declarativeNetRequest и что вместо них делает встроенный запасной движок.
Расширения
Витрина, выбор по профилям и честное предупреждение о встроенном движке.
Профили
Где для профиля выбираются сценарий, списки и скрипты страницы.
Безопасность
Что остаётся на вашем компьютере, включая эти счётчики, и что доходит до сервера.
Посмотрите на своих профилях
Блокировка, чистка и счётчики работают с первого созданного профиля.