Как в школе заставляли ставить "браузер хам", и что я там нашёл

Вступление для тех, кто меня не помнит

Хэй, дтф! Давно не писал лонгриды — где-то полтора года. Всё это время я, как и многие, смотрел видосы и учился в школе. Но сегодня хочу поделиться историей, которая заставила меня вернуться к клавиатуре.

Всё началось с того, что наш учитель информатики объявил: "С понедельника всё общение только через 'соцсеть Нах — браузер хам'!". Это был якобы "образовательный коммуникатор", который должен был заменить все остальные способы связи.

Часть 1: Паранойя как образ жизни

Сразу скажу — я не параноик. Ну, почти. Но когда мне говорят "поставь это приложение, потому что надо", а оно просит:

  • Доступ к камере
  • Доступ к микрофону

...у меня начинают чесаться руки. Не чтобы ставить, а чтобы разобрать.

Мой гениальный план: запустить это в WayDroid на Ubuntu. Типа "да, я установил", но на самом деле — в цифровой клетке. Даже если приложение сбежит, максимум что оно увидит — чистую виртуалку.

Здесь должен быть скриншот WayDroid, но я не стал его делать, чтобы не светить свой десктоп.
Здесь должен быть скриншот WayDroid, но я не стал его делать, чтобы не светить свой десктоп.

Часть 2: Разборка "Браузера Нах" — как чёрный ящик для реверс-инженера

Распаковал APK через APKTool. Сразу фейл — в ресурсах куча файлов с названиями типа $avd_hide_password__0.xml. Символ $ в имени файла! Это как назвать переменную с пробелом — можно, но зачем?

Дальше — два манифеста. Один в корне, другой в original/. Зачем? Может, как в фильмах про шпионов — один для показа, другой для реальной работы?

Что я нашёл внутри:

1. Трекеры на трекерах

  • Свой фреймворк "Tracer" (сбор крашей, метрик, дампов памяти)
  • OneLog — ещё один сборщик логов (видимо, для разнообразия)
  • Google Firebase и book* (*эээ, организация) Activity (а ведь реально, привет, "импортозамещение"!)
  • Сервисы, которые могут блокировать доступ к другим приложениям
Манифест обычного, другого приложения
Манифест обычного, другого приложения

2. Разрешения как у суперпользователя

<!-- Это реальные разрешения из манифеста: --> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION"/>

То есть приложение может:

  • Рисовать поверх других окон
  • Устанавливать программы без твоего ведома
  • Записывать экран

Для коммуникатора. Ну да, ну да.

Часть 3: Мой крестовый поход за чистый код

Решил я почистить этот манифест. Удалил:

  • Все трекеры (Tracer, OneLog, Firebase)
  • Доступ к геолокации
  • Разрешение на запись экрана
  • Возможность устанавливать другие приложения
  • Интеграции со сторонними сервисами (да, они там тоже были)

Оставил только интернет (авторизацию-регистрацию), текст мессаджес и доступ к микрофону для звонков. Получилось 80 строк вместо 400.

Часть 4: Почему APKTool кинул меня

Попробовал собрать обратно. Апктул сказал "нет". Причём очень жёстко:

W: error: resource 'drawable/$avd_hide_password__0' has invalid entry name W: First type is not attr! brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 134)

Перепробовал всё:

  • apktool b . — фейл
  • apktool b --use-aapt2 . — фейл
  • Замена aapt на другую версию — фейл
  • Молитвы всем богам цифрового мира — фейл
Так падает каждое приложение на Linux
Так падает каждое приложение на Linux

Перешёл к плану Б: ручная сборка через ZIP

  1. Распаковал APK как обычный ZIP-архив
  2. Заменил AndroidManifest.xml на очищенный
  3. Перепаковал обратно
  4. Попытался установить — «Не удалось проанализировать пакет»

Проблема: APK нужно подписывать. Без подписи Android отказывается устанавливать.

План В: APK Editor на телефоне

Установил APK Editor, открыл исходный APK:

  1. Выбрал «Common Edit»
  2. Заменил манифест через текстовый редактор
  3. Сохранил — APK Editor переподписал APK
  4. Пытаюсь установить — «Не удалось обработать пакет»

Покопался в логах — оказалось, APK Editor не справляется с:

  • Файлами, имена которых начинаются с $
  • Кастомными атрибутами в ресурсах
  • Нативными библиотеками, которые ожидают определённую структуру манифеста
* Не советую так делать
* Не советую так делать

Что в итоге: разработчики «Браузера Хам» настолько не хотели, чтобы кто-то копался в их коде, что:

  1. Использовали нестандартные имена файлов
  2. Добавили кастомные атрибуты в ресурсы
  3. Сделали так, что стандартные инструменты падают
  4. Использовали метед обфускации/полиморфизма

Это уровень защиты как у банковских приложений. Только вот это же коммуникатор для школы, Карл!

Получается замкнутый круг:

  • Нельзя изменить манифест → не удаётся собрать APK
  • Можно изменить манифест через APK Editor → APK не устанавливается
  • Можно собрать без изменений → оставляем все трекеры и слежку

Мораль: если разработчики так сильно защищают приложение от модификаций, возможно, им действительно есть что скрывать.

Часть 5: Диалог с начальником, или "Ты просто параноик"

Я: Юрий Семёнович, а вы знаете, что это приложение может устанавливать другие программы без спроса?

Учитель: Вам же нечего скрывать! Это для образовательного процесса!

Я: Но там Google Firebase, а мы же за импортозамещение...

Учитель: Это техническая необходимость! (далее 10 минут про цифровой суверенитет)

Самое смешное, что когда я показал ему манифест с кучей разрешений, он сказал: "Ну и что? В android же есть песочница, ничего страшного".

Часть 6: Сообщество в шоке

Одноклассники разделились на три лагеря:

  1. "Я лучше умру"/ «да ять, я знаю, что учителя сами ставят на телефон, которым не будут пользоваться»/»можно ссылку на закон» — отказались ставить принципиально
  2. "Мне нечего скрывать" — поставили и забыли
  3. "А что такого?" — поставили, но начали задавать вопросы

Ирония в том, что те, кто раньше смеялся над "параноиками", теперь сами нервно проверяли, какие разрешения дали.

Часть 7: Почему это важно даже для геймеров

Вы же помните скандалы:

  • Когда Riot Games встроили античит на уровень ядра в Valorant?
  • Когда Blizzard добавили то же самое в WoW Classic?
  • Когда Genshin Impact начал сканировать процессы на ПК?

Тут та же история, только в образовании. Когда софт просит слишком много прав — это повод задуматься. Даже если это "просто коммуникатор для школы".

Что я вынес из этого адского квеста:

  1. Технические скиллы прокачались до небес.
  2. Теперь я умею: Работать с APKTool (когда он не падает)
  3. Анализировать манифесты
  4. Использовать контейнеризацию (ВМ) для безопасности
  5. Дипломатия — иногда лучше сохранить отношения с учителем, чем доказывать свою правоту.
  6. Цифровая грамотность — это не про то, чтобы скрывать преступления. Это про то, чтобы понимать, что ты устанавливаешь.

Финал, или "Чему меня научил Браузер Нах"

Если вам в школе/универе/на работе навязывают софт:

  1. Спросите — зачем ему столько разрешений?
  2. Проверьте — что говорят о нём в интернете?
  3. Защищайтесь — используйте песочницы, виртуалки, отдельные устройства.

И помните: технологии должны служить людям, а не наоборот.

P.S. Всё описанное — исключительно в образовательных целях. Я не взламывал приложения, а только изучал, что они запрашивают. Все названия изменены, совпадения случайны. В статье проводится статический анализ публично доступного APK-файла (реверс-инжиниринг). Не производилось изменение кода, взлом серверов или обход лицензионных ограничений. Цель — анализ запрашиваемых разрешений в духе цифровой грамотности

P.P.S. Если вы узнали в этом описании какое-то конкретное приложение — это ваши фантазии. Я говорю об абстрактной «Соцсети хам», который может существовать только в моём воображении.

Что думаете, дтф? Сталкивались с подобным? Или я действительно параноик? 🥲

* Плохая лексика, юридическое кощунство или упоминание "сами знаете чего"

P.P.P.S. (от меня, автора этого лонгрида): Я понимаю, что некоторые моменты могут показаться преувеличенными, но это реальный опыт. Если кто-то из сообщества знает, как обойти защиту с файлами типа $avd_* — делитесь в комментах, буду благодарен!

7
1
8 комментариев