Ботнадзор
Ботнадзор (Botnadzor, Блядонадзор, Ботодрочеры, Вахтёр-покажи-пропуск, Либеральный стукач 2.0) — эпическая, монументальная и совершенно охуительная в своей бесполезности попытка группы неизвестных либеральных интернет-воинов навести порядок в руинах соцсети Вконтактик. Позиционируется как высокотехнологичный экскаватор для выгребания кремлеботов, лахтоскота и прочей нечисти, мешающей светлоликим эльфам вести конструктивные диалоги в комментариях. На деле же представляет собой браузерное расширение и сопутствующую инфраструктуру, которая с умным видом подсвечивает неугодных и создает у своей паствы, хомячков, иллюзию причастности к великой борьбе Добра со Злом. Вся эта катавасия работает по принципу «мы тут составили списочек, а вы верьте», что само по себе доставляет неимоверно.
Проект примечателен в первую очередь своим феерическим ЧСВ и наивной верой в то, что маркировка пользователей ярлычками способна что-то изменить в глобальном противостоянии шизы и маразма. Является, по сути, современным цифровым аналогом доски позора, только вместо фотографий пьяниц и тунеядцев — аватарки и никнеймы тех, кто попал в черный список неведомых борцунов за всё хорошее.
Суть[править]
Если отбросить всю маркетинговую шелуху про защиту информационного пространства и противодействие пропаганде, то перед нами предстает донельзя примитивная система. Есть некий центральный сервер, на котором команда Ботнадзора, аки святая инквизиция, ведет свои расстрельные списки. В этих списках содержатся ID и никнеймы пользователей, которые, по их авторитетному мнению, являются ботами, троллями или просто людьми с неправильной гражданской позицией. Расширение, установленное в браузер доверчивого анонимуса, периодически скачивает эти списки и, при просмотре страниц ВКонтакте, начинает лихорадочно сверять каждого комментатора с этим черным списком. Если совпадение найдено — вуаля! — пользователь помечается специальным значком и цветом.
Я установил Ботнадзор и теперь точно знаю, кто из них проплачен! Теперь спорить стало гораздо легче, я просто говорю: «А, да ты же бот, у меня расширение показывает!», и оппонент слит!
— Пользователь Ботнадзора
Таким образом, главная функция сего чуда программистской мысли — не анализ поведения, не выявление аномальной активности с помощью нейросетей и прочих модных слов, а тупая сверка с базой данных. Базой данных, критерии попадания в которую туманны и непрозрачны, как намерения пьяного десантника в день ВДВ. Разработчики, конечно, могут сколько угодно бормотать про свои сложные алгоритмы и ручную модерацию, но по факту анонимус получает кота в мешке и предлагает ему верить на слово. А он и верит, ведь так проще жить в черно-белом мире, где все, кто с тобой не согласен — проплаченные враги. Это избавляет от необходимости думать, анализировать аргументы и вообще напрягать единственную извилину.
Вскрытие поциента[править]
В редакцию уютненького попал исходный код этого поделия. Простыня минифицированного и собранного вебпаком джаваскрипта, на первый взгляд, выглядит как китайская грамота. Но нам не привыкать. Вооружившись терпением, лупой и знанием матерных заклинаний, мы провели аутопсию этого цифрового организма. И то, что мы там обнаружили, оказалось куда интереснее, чем можно было предположить. Это не просто фонарик для подсветки, а целый пылесос с функциями обратной связи и амбициями Большого Брата.
Фундамент[править]
Начнем с основ. Расширение, как и подобает современному софту, не хранит всё в оперативной памяти, а активно использует локальное хранилище. Для этого в коде имеется класс IndexedDBWrapper.
IndexedDB — это, если по-простому, локальная база данных в браузере. Ботнадзор использует её для хранения главного — списка ботов. Чтобы каждый раз при открытии страницы не дергать сервер, расширение скачивает многомегабайтную портянку с IDшниками и кэширует её у тебя на диске. Называется это оптимизация. На деле же это означает, что у тебя в браузере лежит постоянно растущая база врагов народа, составленная хер пойми кем.
Далее мы видим webext-bridge. Это библиотека для общения между разными частями расширения. Например, между скриптом, который работает на странице ВК, и фоновым процессом. Звучит скучно, но именно через этот мост передаются все команды: подсвети этого, узнай дату регистрации того, а самое главное — отправь на сервер то, что натворил пользователь. Но об этом позже.
Магазин на диване[править]
Разработчики явно любят порядок. В коде разбросана куча сторов (хранилищ состояния): registrationDatesStore, userSettingsStore, configStore, tokenStateStore и так далее. Это, по сути, глобальные переменные, за изменениями которых можно следить.
Самое интересное для пользователя — userSettingsStore. В нем хранятся все настройки, которыми юзер может играться, создавая себе уютный манямирёк:
- isSettingsModalShown: Показано ли окошко настроек. Банально.
- disabledTypesIds: ID типов ботов, которые пользователь не хочет видеть. Например, можно отключить подсветку троллей, оставив только ботов-комментаторов. Это дает хомячку ощущение, что он сам управляет процессом сортировки говна.
- customTypesColors: Можно даже цвета для разных типов ботов настроить! Чтобы кремлеботы были кроваво-красными, а либеральные боты (если бы они их добавляли) — радужными.
- isRepliesCollectingEnabled: А вот это уже интересно. Сбор ответов включен. Галочка, которая по умолчанию, скорее всего, включена. О ней — в отдельной главе.
Всё это создаёт у пользователя ощущение полного контроля. Он может настраивать, переключать, раскрашивать. Он — хозяин положения! На самом деле он просто сортирует ярлычки на банках с консервами, не имея ни малейшего понятия, что внутри.
Пропускной режим[править]
А вот тут начинается самое мякотное. Мы-то, наивные, думали, что это просто общественный проект, этакий цифровой субботник. Но в коде черным по белому написано: tokenStateStore. А где токен — там и авторизация. А где авторизация — там и неравные права доступа.
Так-так-так, что тут у нас? Токен? Права доступа? А мы-то думали, это Робин Гуды, а это, оказывается, банальные вахтёры с пропускной системой.
— Анонимный исследователь кода
Функция applyToken отправляет на сервер (botnadzor.org/script/?code=ВАШ_ТОКЕН&t=getMe) запрос на проверку этого самого токена. И сервер возвращает не просто да/нет, а целый ворох данных о пользователе:
- tokenLevel: Уровень доступа. То есть, есть пользователи поровнее других.
- tokenPoints: Очки! У них там система очков, Карл! За что их дают? За доносы? За активное использование? За покупку премиум-аккаунта?
- expires: Срок действия токена. Да, твой пропуск в элитный клуб борцов с ботами не вечен.
- permissions: Права. То есть, разным пользователям могут быть доступны разные функции.
Это полностью меняет картину. Ботнадзор — это не просто расширение, это целая платформа со своей иерархией, с пользователями разного сорта, с потенциально платными или привилегированными функциями. Ты не просто анонимус, установивший скрипт, ты — винтик в их системе, со своим уровнем допуска и персональным токеном.
Досье на каждого[править]
Еще одна прелестная функция — getUserRegistrationDate. Её задача — узнать дату регистрации пользователя ВКонтакте. Зачем? Официальная версия, скорее всего, будет звучать как помощь в определении ботов, ведь новореги часто используются для спама.
На практике это еще один штрих к портрету. Система не просто сверяет с черным списком, она пытается собрать дополнительную информацию. Она парсит страницу пользователя, чтобы вытащить его ID, а потом отправляет запрос на свой сервер, чтобы тот, в свою очередь, через свои хитровыебанные механизмы (возможно, используя токены привилегированных пользователей) узнал заветную дату.
Результат кэшируется в registrationDatesStore. Создается локальное досье. Пользователь Х, ID Y, дата регистрации Z. Сегодня дата регистрации, завтра — список групп, послезавтра — анализ круга друзей. Аппетит приходит во время еды.
Святая святых[править]
Это сердце всей системы. Функция, которая ходит на api.botnadzor.org (или на зеркала на github.io, если основной сервер прилёг) и скачивает тот самый список — list. Это JSON-файл, в котором тысячи и тысячи записей вида: {i: «12345678», n: «ivan_petrov», m: «A», t: «1»} Где:
- i — ID пользователя.
- n — его никнейм.
- m — markId, метка (например, A — активный, B — заброшенный).
- t — typeId, тип (1 — кремлебот, 2 — спамер, и так далее, согласно их внутренней классификации).
Этот список и является абсолютной истиной для расширения. Никакого анализа на твоей стороне не происходит. Тебе просто спускают директиву: вот этих считать плохими. Ты либо соглашаешься и пользуешься, либо удаляешь расширение. Третьего не дано.
Большой Брат доволен[править]
А вот и вишенка на торте. Самая охуительная и показательная функция во всем этом коде. Называется она uploadReplies. И занимается она именно тем, о чем говорит её название — загрузкой твоих ответов на сервер.
Да-да, анон. Пока ты, преисполненный чувства собственной важности, тыкаешь в подсвеченного бота своим остроумным комментарием, расширение заботливо собирает информацию:
- ID поста (postId)
- Адрес стены (wallId, wallSlug)
- ID автора ответа (то есть твой ID, если ты не анонимус)
- ID самого ответа (replyId)
И весь этот массив данных упаковывается и отправляется на сервер Ботнадзора (/script/get.php?code=ВАШ_ТОКЕН). Зачем? А чтобы пополнять свои базы данных, конечно! Чтобы анализировать, кто, кому и как отвечает. Чтобы, возможно, на основе этих данных находить новых ботов.
Ты-то думал, что ты охотник. А на самом деле ты — гончая. Ты — бесплатный краудсорс-стукач, который бегает по лесу и лает, а настоящие охотники сидят у себя в штабе, пьют смузи, смотрят на карту и двигают флажки, которые ты для них расставляешь. И всё это под соусом борьбы за свободу слова. Ирония 80-го уровня.
Так кто же эти герои?[править]
Создатели проекта долгое время пытались сохранять анонимность, видимо, чтобы придать своему детищу ауру таинственности и всенародности. Мол, мы не какие-то конкретные личности, мы — легион. Однако, как и у любой уважающей себя анонимной организации, у Ботнадзора со временем прорезалось вполне конкретное человеческое ебало. Знакомьтесь, Денис Попов (@clockblocker_).
Сей персонаж, классический релокант-берлинец, не стесняясь, разместил в шапке своего профиля в X прямую и неприкрытую рекламу-призыв:
Если сидишь ВК, поставь подсветку ботов: http://botnadzor.org
Анализ содержимого его микроблога позволяет составить исчерпывающий портрет типичного адепта и, с высокой долей вероятности, одного из ключевых лиц проекта. Тут есть всё, за что мы так любим светлоликую оппозицию в изгнании:
- Основной контент — яростные политические баталии, защита Гуриева, рассуждения о санкциях и репосты CIT. Всё это, разумеется, из безопасного далёка.
- Между праведными боями с ветряными мельницами Кремля, Денис жалуется на трудности изучения немецкого, забывает английские слова и размышляет о будущем электрических поездов-грузовиков. Это придает образу трагикомичности: человек, пытающийся перестроить Россию, с трудом строит предложения на новом для себя языке.
- В спорах с оппонентами наш герой не брезгует и оскорблениями в духе «Я буду называть тебя недочеловеческой свинособакой». Это не просто высер в споре. Это квинтэссенция идеологии, заложенной в Ботнадзор: есть люди, а есть недочеловеческие свинособаки, и наше расширение поможет вам их отличить. Черно-белая картина мира во всей красе.
Так кем же является данный Попов для проекта? Разработчиком? Спонсором из своих IT-шных зарплат? Просто главным евангелистом? Учитывая прямолинейность рекламы и полное идеологическое слияние личности с продуктом, можно смело утверждать, что это не просто рядовой пользователь. По совокупности признаков, перед нами как минимум идейный вдохновитель, лицо, голос и, возможно, кошелек этого блядского цирка.
Целевая аудитория[править]
Кто же ставит себе это чудо? Портрет типичного пользователя довольно прост:
- Политически активный хомячок. Человек, который проводит много времени в политических пабликах, свято верит в свою правоту и ищет любое подтверждение ей. Для него Ботнадзор — это манна небесная, волшебный меч-кладенец, который отсекает головы врагам.
- Технически неграмотный юзер. Он слышал про ботов, но как они работают, не понимает. Для него расширение — это как антивирус. Он не знает, как антивирус ловит вирусы, но верит, что компьютер защищен. Так и здесь: он не знает, как Ботнадзор ловит ботов, но верит, что его информационное поле чисто.
- Тролль-оппозиционер. Человек, которому нужен простой и быстрый способ закончить любой спор. Вместо аргументов он теперь может просто ткнуть оппонента носом в метку от Ботнадзора. Дешево, сердито, эффективно (в его манямирке).
Итоги[править]
Под красивой оберткой борьбы с кремлевской пропагандой скрывается весьма мутная система с признаками тоталитарной секты. Она не учит пользователей критическому мышлению, а наоборот, отучает от него, предлагая готовые ответы и простые решения. Вместо анализа и сомнений — слепая вера в авторитет неведомых админов.
Вскрытие исходного кода показывает, что проект куда амбициознее, чем кажется. Это не просто подсветка, а платформа для сбора данных, с внутренней иерархией пользователей, системой токенов и активным вовлечением юзеров в процесс стукачества под видом борьбы с ботами.
Является ли Ботнадзор полезным инструментом? В той же мере, в какой полезен костыль для здорового человека. Он создает видимость опоры, но в долгосрочной перспективе приводит лишь к атрофии мышц, в данном случае — мозговых.
См. также[править]
Ссылки[править]
- botnadzor.org — Официальное логово. Заходить с осторожностью, могут покусать.
- t.me/botnadzor_org — Телеграм-канал где паства обсуждает свои великие победы.