<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Скучный бложик тестировщика</title>
    <link>https://text.tchncs.de/umnik/</link>
    <description>Может быть очень скучно и столь же полезно</description>
    <pubDate>Thu, 09 Apr 2026 03:38:13 +0000</pubDate>
    <item>
      <title>Средство связи MAX: моё мнение</title>
      <link>https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie-3ty8</link>
      <description>&lt;![CDATA[В предыдущих сериях:&#xA;Часть 1: зачем вообще национальный мессенджер&#xA;Часть 2: про шпионов и людей&#xA;   Часть 2.1: про анализ приложения&#xA;&#xA;Видимо, последняя часть. Но кто его знает?&#xA;&#xA;Часть 3: почему он мне не нравится&#xA;&#xA;Да, я решил сразу сказать итог. Макс, как выбор для национального средства общения, мне не нравится. Я объясню почему, разумеется. Но хорошо, что ничего не поправимого не случилось и Макс можно вытянуть в решение, которое будет совершенно съедобным. Главное, чтобы безопасность и качество были ПЕРЕД желанием заработка денег.&#xA;!--more--&#xA;Это VK (Мейлу Груп)&#xA;&#xA;Я начну с предвзятого. К сожалению, при всей своей технической мощи и при такой концентрации умных инженеров, конечные продукты Мейла и выглядят, и работают и, в конечном счёте, воспринимаются весьма посредственно. Нет, они опережают в качестве работы тонны конкурентов и вообще по качеству продукты Мейла на мировом уровне сильно выше среднего, прям сильно-сильно выше.&#xA;&#xA;Но это потому что мы здесь, в России, привыкли, что наши разработки прям вообще лучше из лучших. Мировые конкуренты только потому конкуренты, что имеют изначально сильно больше денег, чем любая российская компания и могут убить кого угодно прежде чем тот станет слишком опасным. Это может быть и прямое убийство, как это было с Яндекс.Кит, и насаживание своих решений с блокированием альтернатив (как это было с Виндовс Фон), и совсем умный подход с «мягким» подсаживанием на иглу в течение долгого времени (как это происходило с Windows и MS Office).&#xA;&#xA;detailssummaryЗдесь подробнее про Я.Кит и других/summary&#xA;&#xA;История с Яндекс.Кит&#xA;&#xA;Это была оболочка от Яндекса над AOSP, которая включая их приложение контактов, клавиатуру, вроде звонилку ещё и лаунчер (SPB Shell это был, вроде). Он выглядел нормально и имел фичи, которых до сих пор нет нигде. К примеру, при поиске контакта вы могли допускать опечатки, но приложение вас вполне понимало. А клавиатурой Яндекса я пользуюсь давно. Она хороша и как клавиатура, и как система для преобразования голоса в речь, и как система обнаружения и исправления ошибок.&#xA;&#xA;Если у вас тоже есть Я.Клавиатура, убедитесь, что в настройках Android включено использование словаря от Яндекса. К сожалению, у неё проблемы с поддержкой аппаратной клавиатуры, но что уж тут. Кроме меня, видимо, никто особо и не пытался её использовать так.&#xA;&#xA;Про карты, навигатор, браузер, почту можно даже не говорить. &#xA;&#xA;Думаю, никто не будет спорить, что Яндекс смог сделать всё перечисленное выше очень хорошо и точно лучше, чем это сделал Google, хотя бы потому что для Гугла мы были просто ещё одной страной, а для Яндекса - целевой.&#xA;&#xA;Яндекс.Кит можно было найти лишь на нескольких смартфонах китайских, которые согласились заключить с Яндексом партнёрское соглашение.&#xA;&#xA;И знаете, как всё закончилось? Google пришёл к этим производителям и сказал, что если ещё будет хоть одно обновление с Яндексом и вы навсегда будете заблокированы для лицензирования Google Play Services. Ну и всё, для них это бы означало, что мобильное направление можно закрывать. Разумеется они отказались от Яндекса и сам Яндекс не смог найти никого, кто отказался бы от Google Play Services.&#xA;&#xA;Это же требование ударило позже и по тем производителям, которые делали загрузчик с выбором ОСей на планшетах. Можно было грузиться в Андроид, а можно было в Виндовс. Гугл и им прихлопнул лавочку. Ибо как это так, у пользователя будет выбор в ОСях, вы офигели там, что ли?! Никакого выбора — вот девиз свободной ОС от корпорации добра!&#xA;&#xA;История с Windows Phone&#xA;&#xA;Microsoft пыталась запрыгнуть в смартфоны. У них была, объективно, хорошая мобильная Windows когда-то, потом они приняли ряд ошибочных решений. Но с новым WinPhone они сделали перезапуск.&#xA;&#xA;Опуская детали скажем, что WinPhone была хоть и другой мобильной ОС, но она была хорошей мобильной ОС. Скорость отклика и время работы не снились никаким Андроидам. А бОльший контроль над производителями давал фишечки, которых у Андроидов на тот момент не было. Например, управление телефоном в перчатках или вообще камерофоны.&#xA;&#xA;Проблема была только в ПО. И Майкрософт стимулировал разработчиков на создание ПО. И оно появлялось, было почти всё необходимое. Но всё, да не всё. Google начал блокировать доступ к своим сервисам для WinPhone. Если ты с WinPhone, тебе нельзя, например, смотреть видосы на Ютубе.&#xA;&#xA;Какое-то время Майкрософт пытался с этим бороться. В итоге к Гуглу они стали обращаться через браузер, а не из приложений. Но и это не помогло — Google блокировал Microsoft раз за разом.&#xA;&#xA;Итог — пользователи не могли использовать сервисы, к которым привыкли и уходили с WinPhone.&#xA;&#xA;Мягкая сила Мелкомягких&#xA;&#xA;Наверное примерно во всём мире было устроено так, что для студентов и учебных заведений Microsoft предоставлял свои продукты за сущие копейки. Конечно, можно подумать, что корпорация, умеющая считать деньги, делает это просто из-за невероятной доброты. Но давайте будем честны сами с собой. Это происходит, чтобы люди привыкали в «правильной» операционной системе с «правильным» ПО на ней. А чтобы усложнить жизнь возможным конкурентам, форматы того же Office мы сделаем такими сумасшедшими, чтобы ни один из них (конкурентов) не смог реализовать его в полной мере. А когда MS обязали добавить поддержку открытых форматов, то поддержку они добавили, но никогда в ней не сохраняли по умолчанию. И даже уже созданный файл всё равно настоятельно рекомендовали перевести в несовместимый, но их формат.&#xA;&#xA;Нужно ведь понимать. Это не Windows такой дружелюбный, что на нём сидит весь мир. Новичку ведь одинаково непонятна любая ОС, за которую бы он не взялся. И в любой из них он быстро научится открывать фоточки и браузер. Только потом, когда он в этой ОС немного освоится, когда привыкнет к её подходу, люблю другую он будет считать неудобной и неправильной.&#xA;&#xA;В смысле Энтер для переименования файла? Все нормальные люди по энтеру открывают файл или запускают программу!&#xA;В смысле программы удаляются не просто перетаскиванием одного файла в Корзину? Кому вообще в голову придёт иметь какой-то там денисталлятор? Где его вообще искать?&#xA;В смысле нет пакетного менеджера? Я что, программы в Инете буду искать, что ли? А как я пойму, что сайт настоящий и программа не поддельная?&#xA;&#xA;В итоге вырастают люди, которые приносят свои привычки на работу и платят уже совсем другие деньги, во много раз больше, чем во времена студенчества. А куда деваться, если ломать привычки — это очень трудно и нужно прям этого пожелать. В итоге получаем, что огромная масса пользуется тем же самым, что и раньше, а значит конкуренты не могут развиваться, т.к. базы нет.&#xA;/details&#xA;&#xA;В общем, у нас у самих очень серьёзные требования к приложениям. И мейлу.ру, к сожалению, уже давно перестал отвечать им в полной мере. Нет, он вовсе не упал до уровня международного стандарта (читай - днища, пример тому Фейсбук), он упал именно для нас. Лично я виню в этом тех, кто продавливает в продукты:&#xA;&#xA;рекламу&#xA;неправильный (для платформы) UX&#xA;&#xA;Опишу это на примере RuStore. Потому что он уже не в статусе беты, как Макс.&#xA;&#xA;Реклама&#xA;&#xA;Посмотрите на RuStore. Он просто напичкан рекламой. Ровно как и GPlay. Только если к Google тут вопросов поменьше, т.к. это чисто частная лавочка, то к Рустору у меня очень серьёзная претензия. У вас прямо на сайте написано, что всё это создано при поддержке Минцифры. Вы не скрываете, что государство приложило сюда руку. То есть и я тоже, через свои налоги.&#xA;Так вот вы мне, на мои же налоги, пихаете рекламу и игры. И у меня выключены настройки ваших рекомендаций, но мне всё равно во все щели лепят &#xA;&#xA;ДАЖЕ СУКА ТОТАЛИЗАТОРЫ!!!! МЕЙЛ ВАШУ ЗА НОГУ ВК, ВЫ ОХРЕНЕЛИ ТАМ СУКА ЧТО ЛИ?!?! КАКИЕ СУКА СТАВКИ?! ВООБЩЕ БЕРЕГА ПОПУТАЛИ?! МНЕ ВЕДЬ НЕ ХВАТАЕТ УДОВОЛЬСТВИЯ УДАЛЯТЬ ОШИБОЧНО УСТАНАВЛИВАЕМЫЕ ПАРАШНЫЕ ПРИЛАГИ, АВТОРЫ КОТОРЫХ ВАМ ПРОПЛАТИЛИ И ВЫ СТАЛИ ИХ ПОДСОВЫВАТЬ В РАЗДЕЛЕ ОБНОВЛЕНИЙ. НАДО ЕЩЁ ТУДА СТАВКИ ПИХАТЬ! А ЧЕГО НЕ СЛОТ МАШИНЫ, А, СУКА?! МНЕ УЖЕ ЖДАТЬ ОФИЦИАЛЬНЫЕ ПРИЛАГИ ДЛЯ ГИДРЫ?&#xA;&#xA;Я поставил эту претензию на первое место, т.к. боюсь этого больше всего. Я практически уверен, что у Мылору не хватит совести и они будут пихать рекламу и в национальный мессенджер.&#xA;&#xA;Неправильный дизайн&#xA;&#xA;Если вы на Android, то вам крайне неудобно работать в Максе. Вы не понимаете, почему сейчас попали на какой-то экран и как быстро вернуться обратно. Вы не отличаете описание от реальной настройки и не понимаете, а какая настройка сейчас выбрана в показываемом диалоге. Это не потому что вы тупой, а потому что дизайнерам запретили делать дизайн под Андроид. Или же дизайнеры никогда не работали с Андроид. Какой бы вариант ни был, результат всё равно один. Макс неудобен, потому что он неправильно свёрстан и использует неправильные вьюхи.&#xA;&#xA;На самом деле проблема может быть и из-за BDUI, конечно, но это всё же решаемо, хоть и требует больше сил. Не считая того, что сам BDUI не нужен, это просто дно, это неуважение к пользователю. Но, к сожалению, это более-менее оправданный подход, когда вы на волоске от удаления из всяких аппсторов. Но ведь BDUI не обязывает вам ещё и свои вьюхи пихать, ужасные, противные. Будьте добры сделать разные лаяуты для разных платформ и использовать нативные вьюхи, а не из вашего упоротого UI Kit.&#xA;&#xA;Это VK (Мейлу Груп) в худшем проявлении&#xA;&#xA;Смотрите какая штука. В предыдущих статьях, а также у себя в бложике в Федивёрсе я поддерживал идею национального мессенджера и постарался объяснить свою позицию. Но я, как пользователь и как человек, который чуть-чуть трогает инфобез, хотел бы национальное средство коммуникации не от конкретно Мейл.ру, а от группы компаний. Где во главе угла была бы безопасность, лишь потом удобство. И вообще бы не участвовал коммерческий выхлоп.&#xA;&#xA;Правильное национальное средство общения&#xA;&#xA;Объявляется конкурс, можно даже среди своих, а не общенациональный (потому что уровень не тот, где Вася может участвовать), где описывается ТЗ.&#xA;&#xA;ТЗ включает в себя тонну требований, включая аудиты безопасности, требования по доступности, нагрузке, поддерживаемым платформам (все из Реестра ОБЯЗАНЫ быть), срокам сопровождения и др.&#xA;&#xA;Отдельно определяется круг тех организаций, которые проверяют выполнение требований. Разумеется, сюда могут попасть только кристально русские, безо всяких «часть бизнеста тут, часть - там».&#xA;&#xA;Победитель получает лычку, что он — папа главного мессенджера страны, а также такие налоговые послабления, что у каждого участника бы слюна свисала до пола и желания быть лучшим было хоть отбавляй. Государству не нужно платить победителю, достаточно просто забирать сильно меньше денег. А ещё можно броней всякий навешать для всех участников критических проектов.&#xA;&#xA;И вот в гонку бы впряглись и Мылору, и Касперские, и Бизон, и Позитивы, и Яндекс и бог знает кто ещё. И чтобы выбрано было бы то решение, которое бы и отвечало ТЗ, и было бы поддержано большинством голосов тайным голосованием. При чём не нужно было бы предоставлять готовое решение. Достаточно было бы выйти с подробным описанием этого продукта и объяснением подходов. Потому что нечего тратить время на то, что потом будет переписано нормально.&#xA;&#xA;И вот мне кажется, что в этом соревновании победил бы не Мейл.ру.&#xA;&#xA;Но не было никакого соревнования ведь. Просто вот решилось внезапно, что национальным средством общения будет приложение от той же фирмы, которая мне только что казино ещё не подсовывает. И я не могу отделаться от мысли (конечно же, я неправ и мысль эта ошибочная), что выбор может быть связан с тем, что фамилии у владельца VK и у человека из администрации Президента очень похожи.&#xA;&#xA;Всё ли так плохо&#xA;&#xA;На самом деле нет. Это самый обычный мессенджер, просто неудобный. Но он работает. Разработчики внутри Мылору - это, всё-таки, нормальные такие инженеры. Своё дело они знают и делают его хорошо. Они ведь не взяли какое-то готовое решение, не перекрасили и не выдали за своё. И работали они, я уверен, сверхурочно и с усердием. У меня нет никаких претензий к R&amp;D. И также уверен, что они и дальше продолжат улучшать продукт. К примеру, я жду, когда ширину облачков сообщений сделают правильную, а не как сейчас.&#xA;&#xA;И у нас никуда не делись ни Бизоны, ни Касперские, ни Инфовоч, ни Яндекс, ни Позитивы, ни кто-либо ещё. Взамен на налоговые послабления наши слоняры должны проводить аудиты важных систем, включая средство общения. Вот чтобы это была как работа, а налоговые послабления — это вид оплаты за эти работы.&#xA;&#xA;И в ВК тоже не дураки. Они и сами партнёрятся с безопасниками. К примеру, Макс использует WhoCalls от Лаборатории Касперского для проверки телефонных номеров. В прошлой статье я писал, что классно было бы проверять ещё файлы и ссылки.&#xA;&#xA;Плюс ВК реагируют на то, что мошенники стали рассматривать Макс. Было разослано сообщение, что нужно включить безопасный режим. В этом режиме никто не сможет позвонить в Макс, кроме контактов из записной книги. Ведь мелочь, но сделали. Но я бы такой, чтобы это было включено по умолчанию.&#xA;&#xA;MAX lib&#xA;&#xA;Было бы интересно, если бы Макс был опубликован как библиотека. Чтобы правильные участники (те, кого перечислял выше) могли бы сделать свою обёртку над библиотекой. То есть обязаны сохранить все фичи, но вправе добавлять своё, что не будет ломать обратную совместимость. А народ бы просто выбирал, какой дизайн им нравится больше. Зачем это тем же Касперским? Потому что в заголовке будет написано, что это Касперы, в инфо. Вот ссылочки на сайт, на другие продукты ЛК.&#xA;&#xA;Но чтобы этим не баловались, нужно обязать всех, кто собирается получить библиотеку, сопровождать своё решение 5 лет с момента первого релиза. Сопровождение включает подключение актуальной версии библитеки не позднее, скажем, 2 недель после выпуска для тех версий, которые не ломают обратную совместимость и 6 недель для тех, которые ломают.&#xA;&#xA;Почему он не нравится другим&#xA;&#xA;Я рассказал, почему Макс не нравится мне. Точнее не нравится, как он стартанул. Очень надеюсь, что будет объявлено о партнёрстве с монстрами ИБ нашей страны и тогда я буду крепче засыпать.&#xA;&#xA;Глобально претензии такие:&#xA;&#xA;нечестная конкуренция&#xA;читают переписку&#xA;посадят&#xA;&#xA;Нечестная конкуренция&#xA;&#xA;Да, мошенники активно используют Телегу и Вотсап. Это прям факт. Но они ведь используют их не потому что это страшные приложения чисто для мошенников, а потому что это популярные приложения. В Signal не потому мошенников мало, что приложение от них защищено, а потому что там кроме меня и ещё пары инвалидов в стране нашей никто и не сидит.&#xA;&#xA;Макс объективно тут безопаснее. И дело не только во WhoCalls, который не встроен в конкурентов. Про блокировки SIM я рассказывал в одной из прошлых статей и повторяться не буду.&#xA;&#xA;А вот что действительно плохо — так это то, как были преподнесены блокирования звонков у конкрентов. Бан, а потом отмазки про мошенников. Государство (снова отсылаю к прошлым статьям, где я пояснял, что понимаю под государством) наше совершенно не умеет в правильные формулировки и правильно преподносить новости.&#xA;&#xA;Во всём мире все государства рубят узлы, делают мрак и вообще творят дичь. Но те, государства, которые представляют как &#34;развитые страны&#34;, умеют обернуть говно в правильный фантик и скормить народу. Пара инвалидов чёт там побухтит и на этом всё. Ну а если будут сильно бухтеть, то получат нелетальную гранату в грудину и из водомёта польют их и на этом разойдутся каждый при своём. Решение всё равно примут, понятное дело.&#xA;&#xA;Нашему государству, раз уж иногда надо творить что-то, что не нравится людям, нужно нормально это преподносить. Когда тема совсем уж щекотливая, то могут напрячься и как-то припудрить какаху. Но обычно просто подают на лопате — жрите.&#xA;&#xA;Чтобы было понятнее. Понадобилось одной стране заткнуть того, кто много говорит — этот кто-то вдруг стал насильником. И одно дело поддерживать правдоруба, а другое дело (для народа, имею в виду) — поддерживать сраного насильника.&#xA;&#xA;В общем, что хочу сказать. Это не Макс ведь блокирует звонки. Вы можете представить, чтобы разраб, который пилит фичу звонков, думал: &#34;Так, надо блокнуть Телегу&#34;? Тут государство делает дичь, а прилетает Максу. Это Государству следует научиться правильно распространять НУЖНОЕ и ВАЖНОЕ программное решение. Макс то при чём?&#xA;Но дичь уже совершена и отменять её — это ещё более тупо будет. Со временем, разумеется, отменят. Скажут, что всех победили и отменят. Но Макс уже в говне за действия не его повозили и возят до сих пор.&#xA;&#xA;Читают переписку&#xA;&#xA;Нет, не читают, в общем смысле. Но обязаны хранить. Как, собственно, обязаны хранить переписки вообще все во всех цивилизованных странах. Законы такие вот. Как только к Протону пришли правильные люди, тот сразу всё сдал.&#xA;&#xA;Что значит &#34;в общем смысле&#34;. Переписку вашу не читают люди в GMail, скажем, но её вполне читают всякие скрипты Гугла, чтобы знать о вас вообще всё. Аналогично её не читают в общем смысле в Телеге, но её читают скрипты, чтобы продавать нас всех как товар рекламодателям.&#xA;&#xA;Я очень надеюсь, что к национальному средству общения выдвинуто требование, запрещающее использовать переписки пользователей для своих, мылорушных целей. Просто видя, что делают с РуСтором, я опасаюсь, что через несколько лет (сейчас побоятся, но подождите лет 5) будут продавать личности рекламодателям, как это делает Телега.&#xA;&#xA;Посадят&#xA;&#xA;А ты не воруй. Практически в любом популярном средстве общения обсуждать что-то незаконное — это прям тупо. Хочешь незаконное — использую специализированные средства общения типа Briar. Вон, WA на худой конец. Только не Телегу, конечно.&#xA;&#xA;Сегодня законно, а завтра — нет&#xA;&#xA;Давайте закину в ту же тачанку. Если вы поищите все дела, когда кого-то брали за жопу за то, что сначала было законным, а потом перестало, то выяснится, что всякий раз человек продолжал делать нечто незаконное, даже когда оно таковым стало. Спонсируешь терроризм? Ну, ёпти, добро пожаловать на бутылку. И не важно, что закинул 100 рублей. Неотвратимость наказания, вся хурма.&#xA;&#xA;При этом нет ни одного случая, когда кого-то бы брали за жопу за переписки, которые бы велись в личных сообщениях. Даже в VK. Потому что, хотите вы это признавать или нет, личные переписки защищены Конституцией. Чтобы получить к ним доступ и, главное, использовать их в суде, розыскные действия уже должны вестись.&#xA;&#xA;Возьмите идиотов из &#34;Отказников Шереметьево&#34;. Их самих просят показывать переписки. Они вправе отказаться от этого. Ну а погранцы вправе не пустить на этом основании. Это в любой стране так.&#xA;&#xA;Таким образом, если доступ к вашей личной переписке получен через запрос к Мылору, то вас уже ведут. Вы уже где-то конкретно облажались. А если считаете, что вы не могли облажаться, то облажался кто-то из ваших собеседников. Или вообще кто-то третий, с кем общался ваш. Переписку прочитали с его стороны и видят, что сейчас ещё участника можно взять и берут и вас.&#xA;&#xA;И да, гейские темы в личке вы можете обсуждать с кем угодно — это совершенно законно. Правда до тех пор, пока на вас не пожалуется кто-нибудь, кому это не нравится. Аналогично, к слову, с дик пиками. Пришлёте кому-то хрен, а на вас пожалуются. И, не смотря на то, что это было в личке, это преступление. Со стороны жертвы получат доступ к переписке — вот и причина запросить у ВК другие переписки, т.к. жертва может быть более чем одна. Потом остальных получателей позовут как свидетелей.&#xA;&#xA;Так что дик пики присылайте только если та сторона точно это одобряет.&#xA;&#xA;Заключение&#xA;&#xA;Я надеюсь, что за все эти части смог объяснить свою позицию. Вот она всего в двух пунктах:&#xA;&#xA;Национальный мессенджер — это хорошо и правильно. Он нужен нашей стране&#xA;Макс — нормальный, самый обычный мессенджер. Но сейчас это не то, что я хотел бы видеть в качестве национального.]]&gt;</description>
      <content:encoded><![CDATA[<p>В предыдущих сериях:
– <a href="https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie" rel="nofollow">Часть 1: зачем вообще национальный мессенджер</a>
– <a href="https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie-33m8" rel="nofollow">Часть 2: про шпионов и людей</a>
   – <a href="https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie-1pl7" rel="nofollow">Часть 2.1: про анализ приложения</a></p>

<p>Видимо, последняя часть. Но кто его знает?</p>

<h2 id="часть-3-почему-он-мне-не-нравится">Часть 3: почему он мне не нравится</h2>

<p>Да, я решил сразу сказать итог. Макс, как выбор для национального средства общения, мне не нравится. Я объясню почему, разумеется. Но хорошо, что ничего не поправимого не случилось и Макс можно вытянуть в решение, которое будет совершенно съедобным. Главное, чтобы безопасность и качество были ПЕРЕД желанием заработка денег.
</p>

<h3 id="это-vk-мейлу-груп">Это VK (Мейлу Груп)</h3>

<p>Я начну с предвзятого. К сожалению, при всей своей технической мощи и при такой концентрации умных инженеров, конечные продукты Мейла и выглядят, и работают и, в конечном счёте, воспринимаются весьма посредственно. Нет, они опережают в качестве работы тонны конкурентов и вообще по качеству продукты Мейла на мировом уровне сильно выше среднего, прям сильно-сильно выше.</p>

<p>Но это потому что мы здесь, в России, привыкли, что наши разработки прям вообще лучше из лучших. Мировые конкуренты только потому конкуренты, что имеют изначально сильно больше денег, чем любая российская компания и могут убить кого угодно прежде чем тот станет слишком опасным. Это может быть и прямое убийство, как это было с Яндекс.Кит, и насаживание своих решений с блокированием альтернатив (как это было с Виндовс Фон), и совсем умный подход с «мягким» подсаживанием на иглу в течение долгого времени (как это происходило с Windows и MS Office).</p>

<p><details><summary><strong>Здесь подробнее про Я.Кит и других</strong></summary></p>

<h4 id="история-с-яндекс-кит">История с Яндекс.Кит</h4>

<p>Это была оболочка от Яндекса над AOSP, которая включая их приложение контактов, клавиатуру, вроде звонилку ещё и лаунчер (SPB Shell это был, вроде). Он выглядел нормально и имел фичи, которых до сих пор нет нигде. К примеру, при поиске контакта вы могли допускать опечатки, но приложение вас вполне понимало. А клавиатурой Яндекса я пользуюсь давно. Она хороша и как клавиатура, и как система для преобразования голоса в речь, и как система обнаружения и исправления ошибок.</p>

<p>Если у вас тоже есть Я.Клавиатура, убедитесь, что в настройках Android включено использование словаря от Яндекса. К сожалению, у неё проблемы с поддержкой аппаратной клавиатуры, но что уж тут. Кроме меня, видимо, никто особо и не пытался её использовать так.</p>

<p>Про карты, навигатор, браузер, почту можно даже не говорить.</p>

<p>Думаю, никто не будет спорить, что Яндекс смог сделать всё перечисленное выше очень хорошо и точно лучше, чем это сделал Google, хотя бы потому что для Гугла мы были просто ещё одной страной, а для Яндекса – целевой.</p>

<p>Яндекс.Кит можно было найти лишь на нескольких смартфонах китайских, которые согласились заключить с Яндексом партнёрское соглашение.</p>

<p>И знаете, как всё закончилось? Google пришёл к этим производителям и сказал, что если ещё будет хоть одно обновление с Яндексом и вы навсегда будете заблокированы для лицензирования Google Play Services. Ну и всё, для них это бы означало, что мобильное направление можно закрывать. Разумеется они отказались от Яндекса и сам Яндекс не смог найти никого, кто отказался бы от Google Play Services.</p>

<p>Это же требование ударило позже и по тем производителям, которые делали загрузчик с выбором ОСей на планшетах. Можно было грузиться в Андроид, а можно было в Виндовс. Гугл и им прихлопнул лавочку. Ибо как это так, у пользователя будет выбор в ОСях, вы офигели там, что ли?! Никакого выбора — вот девиз свободной ОС от корпорации добра!</p>

<h4 id="история-с-windows-phone">История с Windows Phone</h4>

<p>Microsoft пыталась запрыгнуть в смартфоны. У них была, объективно, хорошая мобильная Windows когда-то, потом они приняли ряд ошибочных решений. Но с новым WinPhone они сделали перезапуск.</p>

<p>Опуская детали скажем, что WinPhone была хоть и другой мобильной ОС, но она была хорошей мобильной ОС. Скорость отклика и время работы не снились никаким Андроидам. А бОльший контроль над производителями давал фишечки, которых у Андроидов на тот момент не было. Например, управление телефоном в перчатках или вообще камерофоны.</p>

<p>Проблема была только в ПО. И Майкрософт стимулировал разработчиков на создание ПО. И оно появлялось, было почти всё необходимое. Но всё, да не всё. Google начал блокировать доступ к своим сервисам для WinPhone. Если ты с WinPhone, тебе нельзя, например, смотреть видосы на Ютубе.</p>

<p>Какое-то время Майкрософт пытался с этим бороться. В итоге к Гуглу они стали обращаться через браузер, а не из приложений. Но и это не помогло — Google блокировал Microsoft раз за разом.</p>

<p>Итог — пользователи не могли использовать сервисы, к которым привыкли и уходили с WinPhone.</p>

<h4 id="мягкая-сила-мелкомягких">Мягкая сила Мелкомягких</h4>

<p>Наверное примерно во всём мире было устроено так, что для студентов и учебных заведений Microsoft предоставлял свои продукты за сущие копейки. Конечно, можно подумать, что корпорация, умеющая считать деньги, делает это просто из-за невероятной доброты. Но давайте будем честны сами с собой. Это происходит, чтобы люди привыкали в «правильной» операционной системе с «правильным» ПО на ней. А чтобы усложнить жизнь возможным конкурентам, форматы того же Office мы сделаем такими сумасшедшими, чтобы ни один из них (конкурентов) не смог реализовать его в полной мере. А когда MS обязали добавить поддержку открытых форматов, то поддержку они добавили, но никогда в ней не сохраняли по умолчанию. И даже уже созданный файл всё равно настоятельно рекомендовали перевести в несовместимый, но их формат.</p>

<p>Нужно ведь понимать. Это не Windows такой дружелюбный, что на нём сидит весь мир. Новичку ведь одинаково непонятна любая ОС, за которую бы он не взялся. И в любой из них он быстро научится открывать фоточки и браузер. Только потом, когда он в этой ОС немного освоится, когда привыкнет к её подходу, люблю другую он будет считать неудобной и неправильной.</p>
<ul><li>В смысле Энтер для переименования файла? Все нормальные люди по энтеру открывают файл или запускают программу!</li>
<li>В смысле программы удаляются не просто перетаскиванием одного файла в Корзину? Кому вообще в голову придёт иметь какой-то там денисталлятор? Где его вообще искать?</li>
<li>В смысле нет пакетного менеджера? Я что, программы в Инете буду искать, что ли? А как я пойму, что сайт настоящий и программа не поддельная?</li></ul>

<p>В итоге вырастают люди, которые приносят свои привычки на работу и платят уже совсем другие деньги, во много раз больше, чем во времена студенчества. А куда деваться, если ломать привычки — это очень трудно и нужно прям этого пожелать. В итоге получаем, что огромная масса пользуется тем же самым, что и раньше, а значит конкуренты не могут развиваться, т.к. базы нет.
</details></p>

<p>В общем, у нас у самих очень серьёзные требования к приложениям. И мейлу.ру, к сожалению, уже давно перестал отвечать им в полной мере. Нет, он вовсе не упал до уровня международного стандарта (читай – днища, пример тому Фейсбук), он упал именно для нас. Лично я виню в этом тех, кто продавливает в продукты:</p>
<ul><li>рекламу</li>
<li>неправильный (для платформы) UX</li></ul>

<p>Опишу это на примере RuStore. Потому что он уже не в статусе беты, как Макс.</p>

<h4 id="реклама">Реклама</h4>

<p>Посмотрите на RuStore. Он просто напичкан рекламой. Ровно как и GPlay. Только если к Google тут вопросов поменьше, т.к. это чисто частная лавочка, то к Рустору у меня очень серьёзная претензия. У вас прямо на сайте написано, что всё это создано при поддержке Минцифры. Вы не скрываете, что государство приложило сюда руку. То есть и я тоже, через свои налоги.
Так вот вы мне, на мои же налоги, пихаете рекламу и игры. И у меня выключены настройки ваших рекомендаций, но мне всё равно во все щели лепят</p>

<p><strong>ДАЖЕ СУКА ТОТАЛИЗАТОРЫ!!!! МЕЙЛ ВАШУ ЗА НОГУ ВК, ВЫ ОХРЕНЕЛИ ТАМ СУКА ЧТО ЛИ?!?! КАКИЕ СУКА СТАВКИ?! ВООБЩЕ БЕРЕГА ПОПУТАЛИ?! МНЕ ВЕДЬ НЕ ХВАТАЕТ УДОВОЛЬСТВИЯ УДАЛЯТЬ ОШИБОЧНО УСТАНАВЛИВАЕМЫЕ ПАРАШНЫЕ ПРИЛАГИ, АВТОРЫ КОТОРЫХ ВАМ ПРОПЛАТИЛИ И ВЫ СТАЛИ ИХ ПОДСОВЫВАТЬ В РАЗДЕЛЕ ОБНОВЛЕНИЙ. НАДО ЕЩЁ ТУДА СТАВКИ ПИХАТЬ! А ЧЕГО НЕ СЛОТ МАШИНЫ, А, СУКА?! МНЕ УЖЕ ЖДАТЬ ОФИЦИАЛЬНЫЕ ПРИЛАГИ ДЛЯ ГИДРЫ?</strong></p>

<p>Я поставил эту претензию на первое место, т.к. боюсь этого больше всего. Я практически уверен, что у Мылору не хватит совести и они будут пихать рекламу и в национальный мессенджер.</p>

<h4 id="неправильный-дизайн">Неправильный дизайн</h4>

<p>Если вы на Android, то вам крайне неудобно работать в Максе. Вы не понимаете, почему сейчас попали на какой-то экран и как быстро вернуться обратно. Вы не отличаете описание от реальной настройки и не понимаете, а какая настройка сейчас выбрана в показываемом диалоге. Это не потому что вы тупой, а потому что дизайнерам запретили делать дизайн под Андроид. Или же дизайнеры никогда не работали с Андроид. Какой бы вариант ни был, результат всё равно один. Макс неудобен, потому что он неправильно свёрстан и использует неправильные вьюхи.</p>

<p>На самом деле проблема может быть и из-за BDUI, конечно, но это всё же решаемо, хоть и требует больше сил. Не считая того, что сам BDUI не нужен, это просто дно, это неуважение к пользователю. Но, к сожалению, это более-менее оправданный подход, когда вы на волоске от удаления из всяких аппсторов. Но ведь BDUI не обязывает вам ещё и свои вьюхи пихать, ужасные, противные. Будьте добры сделать разные лаяуты для разных платформ и использовать нативные вьюхи, а не из вашего упоротого UI Kit.</p>

<h3 id="это-vk-мейлу-груп-в-худшем-проявлении">Это VK (Мейлу Груп) в худшем проявлении</h3>

<p>Смотрите какая штука. В предыдущих статьях, а также у себя в бложике в Федивёрсе я поддерживал идею национального мессенджера и постарался объяснить свою позицию. Но я, как пользователь и как человек, который чуть-чуть трогает инфобез, хотел бы национальное средство коммуникации не от конкретно Мейл.ру, а от группы компаний. Где во главе угла была бы безопасность, лишь потом удобство. И вообще бы не участвовал коммерческий выхлоп.</p>

<h4 id="правильное-национальное-средство-общения">Правильное национальное средство общения</h4>

<p>Объявляется конкурс, можно даже среди своих, а не общенациональный (потому что уровень не тот, где Вася может участвовать), где описывается ТЗ.</p>

<p>ТЗ включает в себя тонну требований, включая аудиты безопасности, требования по доступности, нагрузке, поддерживаемым платформам (все из Реестра ОБЯЗАНЫ быть), срокам сопровождения и др.</p>

<p>Отдельно определяется круг тех организаций, которые проверяют выполнение требований. Разумеется, сюда могут попасть только кристально русские, безо всяких «часть бизнеста тут, часть – там».</p>

<p>Победитель получает лычку, что он — папа главного мессенджера страны, а также такие налоговые послабления, что у каждого участника бы слюна свисала до пола и желания быть лучшим было хоть отбавляй. Государству не нужно платить победителю, достаточно просто забирать сильно меньше денег. А ещё можно броней всякий навешать для всех участников критических проектов.</p>

<p>И вот в гонку бы впряглись и Мылору, и Касперские, и Бизон, и Позитивы, и Яндекс и бог знает кто ещё. И чтобы выбрано было бы то решение, которое бы и отвечало ТЗ, и было бы поддержано большинством голосов тайным голосованием. При чём не нужно было бы предоставлять готовое решение. Достаточно было бы выйти с подробным описанием этого продукта и объяснением подходов. Потому что нечего тратить время на то, что потом будет переписано нормально.</p>

<p>И вот мне кажется, что в этом соревновании победил бы не Мейл.ру.</p>

<p>Но не было никакого соревнования ведь. Просто вот решилось внезапно, что национальным средством общения будет приложение от той же фирмы, которая мне только что казино ещё не подсовывает. И я не могу отделаться от мысли (конечно же, я неправ и мысль эта ошибочная), что выбор может быть связан с тем, что фамилии у владельца VK и у человека из администрации Президента очень похожи.</p>

<h3 id="всё-ли-так-плохо">Всё ли так плохо</h3>

<p>На самом деле нет. Это самый обычный мессенджер, просто неудобный. Но он работает. Разработчики внутри Мылору – это, всё-таки, нормальные такие инженеры. Своё дело они знают и делают его хорошо. Они ведь не взяли какое-то готовое решение, не перекрасили и не выдали за своё. И работали они, я уверен, сверхурочно и с усердием. У меня нет никаких претензий к R&amp;D. И также уверен, что они и дальше продолжат улучшать продукт. К примеру, я жду, когда ширину облачков сообщений сделают правильную, а не как сейчас.</p>

<p>И у нас никуда не делись ни Бизоны, ни Касперские, ни Инфовоч, ни Яндекс, ни Позитивы, ни кто-либо ещё. Взамен на налоговые послабления наши слоняры должны проводить аудиты важных систем, включая средство общения. Вот чтобы это была как работа, а налоговые послабления — это вид оплаты за эти работы.</p>

<p>И в ВК тоже не дураки. Они и сами партнёрятся с безопасниками. К примеру, Макс использует WhoCalls от Лаборатории Касперского для проверки телефонных номеров. В прошлой статье я писал, что классно было бы проверять ещё файлы и ссылки.</p>

<p>Плюс ВК реагируют на то, что мошенники стали рассматривать Макс. Было разослано сообщение, что нужно включить безопасный режим. В этом режиме никто не сможет позвонить в Макс, кроме контактов из записной книги. Ведь мелочь, но сделали. Но я бы такой, чтобы это было включено по умолчанию.</p>

<h4 id="max-lib">MAX lib</h4>

<p>Было бы интересно, если бы Макс был опубликован как библиотека. Чтобы правильные участники (те, кого перечислял выше) могли бы сделать свою обёртку над библиотекой. То есть обязаны сохранить все фичи, но вправе добавлять своё, что не будет ломать обратную совместимость. А народ бы просто выбирал, какой дизайн им нравится больше. Зачем это тем же Касперским? Потому что в заголовке будет написано, что это Касперы, в инфо. Вот ссылочки на сайт, на другие продукты ЛК.</p>

<p>Но чтобы этим не баловались, нужно обязать всех, кто собирается получить библиотеку, сопровождать своё решение 5 лет с момента первого релиза. Сопровождение включает подключение актуальной версии библитеки не позднее, скажем, 2 недель после выпуска для тех версий, которые не ломают обратную совместимость и 6 недель для тех, которые ломают.</p>

<h2 id="почему-он-не-нравится-другим">Почему он не нравится другим</h2>

<p>Я рассказал, почему Макс не нравится мне. Точнее не нравится, как он стартанул. Очень надеюсь, что будет объявлено о партнёрстве с монстрами ИБ нашей страны и тогда я буду крепче засыпать.</p>

<p>Глобально претензии такие:</p>
<ul><li>нечестная конкуренция</li>
<li>читают переписку</li>
<li>посадят</li></ul>

<h3 id="нечестная-конкуренция">Нечестная конкуренция</h3>

<p>Да, мошенники активно используют Телегу и Вотсап. Это прям факт. Но они ведь используют их не потому что это страшные приложения чисто для мошенников, а потому что это популярные приложения. В Signal не потому мошенников мало, что приложение от них защищено, а потому что там кроме меня и ещё пары инвалидов в стране нашей никто и не сидит.</p>

<p>Макс объективно тут безопаснее. И дело не только во WhoCalls, который не встроен в конкурентов. Про блокировки SIM я рассказывал в одной из прошлых статей и повторяться не буду.</p>

<p>А вот что действительно плохо — так это то, как были преподнесены блокирования звонков у конкрентов. Бан, а потом отмазки про мошенников. Государство (снова отсылаю к прошлым статьям, где я пояснял, что понимаю под государством) наше совершенно не умеет в правильные формулировки и правильно преподносить новости.</p>

<p>Во всём мире все государства рубят узлы, делают мрак и вообще творят дичь. Но те, государства, которые представляют как “развитые страны”, умеют обернуть говно в правильный фантик и скормить народу. Пара инвалидов чёт там побухтит и на этом всё. Ну а если будут сильно бухтеть, то получат нелетальную гранату в грудину и из водомёта польют их и на этом разойдутся каждый при своём. Решение всё равно примут, понятное дело.</p>

<p>Нашему государству, раз уж иногда надо творить что-то, что не нравится людям, нужно нормально это преподносить. Когда тема совсем уж щекотливая, то могут напрячься и как-то припудрить какаху. Но обычно просто подают на лопате — жрите.</p>

<p>Чтобы было понятнее. Понадобилось одной стране заткнуть того, кто много говорит — этот кто-то вдруг стал насильником. И одно дело поддерживать правдоруба, а другое дело (для народа, имею в виду) — поддерживать сраного насильника.</p>

<p>В общем, что хочу сказать. Это не Макс ведь блокирует звонки. Вы можете представить, чтобы разраб, который пилит фичу звонков, думал: “Так, надо блокнуть Телегу”? Тут государство делает дичь, а прилетает Максу. Это Государству следует научиться правильно распространять НУЖНОЕ и ВАЖНОЕ программное решение. Макс то при чём?
Но дичь уже совершена и отменять её — это ещё более тупо будет. Со временем, разумеется, отменят. Скажут, что всех победили и отменят. Но Макс уже в говне за действия не его повозили и возят до сих пор.</p>

<h3 id="читают-переписку">Читают переписку</h3>

<p>Нет, не читают, в общем смысле. Но обязаны хранить. Как, собственно, обязаны хранить переписки вообще все во всех цивилизованных странах. Законы такие вот. Как только к Протону пришли правильные люди, тот сразу всё сдал.</p>

<p>Что значит “в общем смысле”. Переписку вашу не читают <strong>люди</strong> в GMail, скажем, но её вполне читают всякие скрипты Гугла, чтобы знать о вас вообще всё. Аналогично её не читают в общем смысле в Телеге, но её читают скрипты, чтобы продавать нас всех как товар рекламодателям.</p>

<p>Я очень надеюсь, что к национальному средству общения выдвинуто требование, запрещающее использовать переписки пользователей для своих, мылорушных целей. Просто видя, что делают с РуСтором, я опасаюсь, что через несколько лет (сейчас побоятся, но подождите лет 5) будут продавать личности рекламодателям, как это делает Телега.</p>

<h3 id="посадят">Посадят</h3>

<p>А ты не воруй. Практически в любом популярном средстве общения обсуждать что-то незаконное — это прям тупо. Хочешь незаконное — использую специализированные средства общения типа Briar. Вон, WA на худой конец. Только не Телегу, конечно.</p>

<h4 id="сегодня-законно-а-завтра-нет">Сегодня законно, а завтра — нет</h4>

<p>Давайте закину в ту же тачанку. Если вы поищите все дела, когда кого-то брали за жопу за то, что сначала было законным, а потом перестало, то выяснится, что всякий раз человек продолжал делать нечто незаконное, даже когда оно таковым стало. Спонсируешь терроризм? Ну, ёпти, добро пожаловать на бутылку. И не важно, что закинул 100 рублей. Неотвратимость наказания, вся хурма.</p>

<p>При этом нет ни одного случая, когда кого-то бы брали за жопу за переписки, которые бы велись в личных сообщениях. Даже в VK. Потому что, хотите вы это признавать или нет, личные переписки защищены Конституцией. Чтобы получить к ним доступ и, главное, использовать их в суде, розыскные действия уже должны вестись.</p>

<p>Возьмите идиотов из “Отказников Шереметьево”. Их самих просят показывать переписки. Они вправе отказаться от этого. Ну а погранцы вправе не пустить на этом основании. Это в любой стране так.</p>

<p>Таким образом, если доступ к вашей личной переписке получен через запрос к Мылору, то вас уже ведут. Вы уже где-то конкретно облажались. А если считаете, что вы не могли облажаться, то облажался кто-то из ваших собеседников. Или вообще кто-то третий, с кем общался ваш. Переписку прочитали с его стороны и видят, что сейчас ещё участника можно взять и берут и вас.</p>

<p>И да, гейские темы в личке вы можете обсуждать с кем угодно — это совершенно законно. Правда до тех пор, пока на вас не пожалуется кто-нибудь, кому это не нравится. Аналогично, к слову, с дик пиками. Пришлёте кому-то хрен, а на вас пожалуются. И, не смотря на то, что это было в личке, это преступление. Со стороны жертвы получат доступ к переписке — вот и причина запросить у ВК другие переписки, т.к. жертва может быть более чем одна. Потом остальных получателей позовут как свидетелей.</p>

<p>Так что дик пики присылайте только если та сторона точно это одобряет.</p>

<h2 id="заключение">Заключение</h2>

<p>Я надеюсь, что за все эти части смог объяснить свою позицию. Вот она всего в двух пунктах:</p>
<ul><li>Национальный мессенджер — это хорошо и правильно. Он нужен нашей стране</li>
<li>Макс — нормальный, самый обычный мессенджер. Но сейчас это не то, что я хотел бы видеть в качестве национального.</li></ul>
]]></content:encoded>
      <guid>https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie-3ty8</guid>
      <pubDate>Sun, 05 Oct 2025 20:15:55 +0000</pubDate>
    </item>
    <item>
      <title>Средство связи MAX: моё мнение</title>
      <link>https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie-1pl7</link>
      <description>&lt;![CDATA[Часть 2.1: про анализ приложения&#xA;&#xA;Эту часть я прям рекомендую прочитать самим разработчикам Макса, т. к. здесь предложу улучшения безопасности. Изначально хотел написать вам на почту, но на сайте поднимается панель связи в чате, а почты нет.&#xA;&#xA;После второй части я честно хотел перейти к третьей, в которой бы описал своё личное отношение к конкретной реализации «национального средства коммуникации» от VK под названием MAX. Однако коллега подкинул очередной «разбор»/«анализ» Макса и не где-нибудь, а на Хабре.&#xA;&#xA;Это один из типичных анализов Макса, которые сводятся к чтению Манифеста, даже без попытки заглянуть в код (но да, он обфусцирован). Возьму его как просто один из множества, всё равно они все похожи: взяли Манифест и закинули ИИшке, которая пук-среньк и написала чушь.&#xA;&#xA;Хотя именно в этом &#34;разборе&#34;, мне кажется, ИИ особо не участвовал. Я читал уже удалённый, самый первый, который стал популярным. Вот там вообще ИИ бред был очевиден.&#xA;!--more--&#xA;Замечание о внешних файлах. Скриншоты я не храню у себя, а буду ссылаться на них в оригинальных статьях. Так что если со временем статья будет недоступна, то и скриншоты будут недоступны.&#xA;&#xA;MAX без оболочки: Что мы нашли в его APK&#xA;&#xA;Доступ к контактам&#xA;&#xA;  После того, как я ввел номер телефона и подтвердил его, «Макс» попросил доступ к моим контактам (Рисунок 1). Достаточно стандартное поведение для мессенджера, позволяет находить контакты из списка, зарегистрированных в «Максе»&#xA;&#xA;Рис. 1:&#xA;&#xA;Рис.1 Запрос доступа&#xA;&#xA;  После этого, «Макс» снова запросил доступ к контактам (рисунок 2).&#xA;&#xA;Рис. 2:&#xA;&#xA;Рис.2 Запрос доступа&#xA;&#xA;Строго говоря, это не является ошибкой разбора. Это кривой UX — реально одна из важных проблем MAX. На первом скриншоте нет никакого запроса доступа, хотя и похоже на него. По рекомендациям Google, перед запросом некоторых (не всех) разрешений, нужно сначала объяснить, зачем они нужны. И то, это правило довольно жидкое. Если пользователю так понятно, зачем разрешение запрашивается, то предварительного объяснения не нужно.&#xA;Например, пользователь нажимает «Поделиться местоположением». Приложение сразу же может запросить разрешение на местоположение, если оно ещё не предоставлено. Потому что пользователь точно понимает, к чему этот запрос. А вот другая ситуация. Приложение может выполнять автоматические фоновые работы и, важно, может это делать в любых Wi-Fi сетях или конкретных. И тут проблема. Если пользователь желает выполнять фоновые работы только в своей домашней Wi-Fi сети, нужно запросить разрешение на геолокацию. Это происходит потому что получать расширенные данные о Wi-Fi точке можно только при наличии такого разрешения. Но пользователь ведь этого не знает. В этом случае сначала можно написать, что так и так, если выберешь такой вариант, придётся предоставить такое разрешение.&#xA;&#xA;Доступ к контактам — это действительно не самая нужная вещь для средства общения, т.к. он вполне может использовать и свою записную книгу, не зависимую от системы. Так что это нормально — сначала объяснить, что далее будет такой-то запрос и вот почему.&#xA;Но объяснение нарисовано отвратительно, как и вообще весь UI Макса. Он совершенно не похож на другие приложения и, самое главное, на ОС, в которой работает. Это объяснение действительно очень похоже на запрос разрешения, только в iOS. Но это не оно, это такое кривое объяснение.&#xA;А вот второй скриншот — это правда системный запрос.&#xA;&#xA;  были запрошены доступ к камере, демонстрации и записи экрана (демонстрация экрана в звонке есть, а вот функционала записи я не увидел)&#xA;&#xA;Рис.4 Запрос доступа к камере, демонстрации и записи экрана.&#xA;&#xA;Потому что демонстрация экрана (шаринг экрана, если кому-то так привычнее) — это буквально его запись. Экран записывается и этот видеопоток уже отправляется получателю. В общем, это нормально, так и должно быть.&#xA;&#xA;  AndroidManifest.xml — один из самых важных и интересных для исследователя файлов. Он содержит много информации, по которой можно составить представление о приложении, и даже сформировать поверхность атаки. В архиве он представлен в закодированном виде.&#xA;&#xA;Не буду считать это ошибкой, скорее, просто привычное для рядовых читателей слово. Но это не закодированный, а просто бинарный формат файла. Это Google так делает, это не какая-то защита от авторов.&#xA;&#xA;REQUESTINSTALLPACKAGES - может устанавливать другие приложения&#xA;&#xA;Если быть точным, то может запросить разрешение на установку приложений, а его можно и не предоставить. Потому что в Android ни одно приложение не может ставить другие. Это доступно только встроенному PackageManager. Остальные могут лишь просить его что-то установить. Оно потому и называется REQUEST&#xA;К сожалению, очень много приложений объявляют это разрешение без реальной необходимости. Оно есть у Chrome, Firefox, WhatsApp и многих других. Кто-то объявляет его «для удобства», например браузеры. Кто-то — потому что правильно боится, что его могут вышибыть из Google Play, а обновиться как-то нужно.&#xA;&#xA;Эта часть изменена. Мне подсказали, что MAX ведёт себя разумнее других. Старый текст оставлен под спойлером.&#xA;&#xA;details&#xA;summaryСтарый текст/summary&#xA;Конкретно MAX, возможно, но маловероятно (проверить сложно, т. к. установка в Android вызывается не для packageManager), объявил это разрешение как раз для самообновления. Но, даже если это так (опять же, сомневаюсь, т.к. в коде вижу обновления через GPlay), он всё равно позволяет ставить любые другие приложения, если пользователь попытается это сделать.&#xA;&#xA;Я считаю, что это очень плохое свойство для национального средства общения.&#xA;Если бы я участвовал в разработке Макса, то разрешение реально было бы в Манифесте (на случай самообновления), но если обнаруживается, что в системе установлен поддерживаемый магазин, то вызывал бы API для проверки существования себя в Магазине. И, если обнаруживал бы, то запрос разрешения бы блокировался. То есть тап в чате на apk файл приводил бы только к сохранению, но не к запуску.&#xA;В случае, если в Магазине он себя не находил бы, то должен делать следующее:&#xA;&#xA;рекомендовать установить RuStore&#xA;разрешить запрос на установку apk&#xA;не вызывать установку, если файл был прислан в чате&#xA;вызывать установку, только если сам скачал же себя с сервера обновлений&#xA;   и даже в этом случае должен проверить подпись скачанного, на случай взлома сервера&#xA;&#xA;Резюмируя: стандартное, но плохое, разрешение, которое многие отечественные производители используют для самообновления. Но к конкретно Максу выдвигаются (мною) повышенные требования безопасности и он не должен даже пытаться устанавливать apk, если обнаруживает, что его не выперли из магазинов.&#xA;/details&#xA;&#xA;Макс, как и другие средства общения, позволяет установить присланный apk из него. Я считаю это плохим свойством именно для национального мессенджера. То есть оно плохое в принципе — ни браузерам, ни мессенджерам, никому, кроме файловых менеджеров или, лучше, специализированных инсталляторов нельзя устанавливать приложения. КОНЕЧНО ЖЕ, это удобно. Удобно то, что скачал файл, тут же запустил и установил. Но это удар по безопасности. Собственно, 99% (выдуманное число, но уверен, близкое к истине) всех троянов распространяются не через официальные магазины приложений, а через присылание их в чаты в мессенджерах и завлекаловок &#34;бесконечные деньги в вашем банке, качайте по ссылке&#34; в браузере. Трояна установить очень легко. А вот скачать, потом найти в файловом менеджере, запустить — это уже сложнее. Так вот безопасность должна быть удобнее опасности.&#xA;В качестве примера приведу настройку телефона при первом включении. Вы можете пропустить установку пароля, да. Но установить его проще, чем пропустить. При пропуске вам ещё немного поколупают мозг (недостаточно, я считаю). Вот и получается, что безопасно сделать удобнее, чем опасно. Так должно быть и для исполняемых файлов. А для национального мессенджера — так должно быть ОБЯЗАТЕЛЬНО.&#xA;&#xA;К чести Макса, его поведение всё равно лучше, чем у многих других. Если вам прислали apk и не важно, ваш это контакт или ещё кто-то, то при попытке просто загрузить его с сервера будет выдано предупреждение, что это файл опасного типа.&#xA;&#xA;Как должно быть, на мой взгляд:&#xA;предупреждение об опасном типе файла, как сейчас&#xA;только скачивание и сохранение, без запуска&#xA;&#xA;К слову, я загрузил eicar.com в ТГ и Макс. Оба они не определили в нём вирус. Это означает, что ни тот, ни другой, не используют никаких антивирусных движков, по крайней мере из более-менее популярных. Было бы неплохо национальному средству общения запартнёриться с Лабораторией Касперского и отправлять хеши файлов им. Не файлы, а только хеши. У Лаборатории есть сервис, который по хешу выдаёт рейтинг файла, если тот известен. Это ещё сильнее усилило бы безопасность Макса.&#xA;&#xA;К сожалению, автор «исследования» не озаботился нормальным объяснением и предложением своего подхода.&#xA;&#xA;Резюмируя: стандартное, но плохое (для национального средства коммуникации) разрешение. Apk файлы (и не только, любые исполняемые на всех платформах) нельзя запускать на исполнение, только скачивать. Одного предупреждения (но за него спасибо, без шуток) мало. Нужно понимать, что это НАЦИОНАЛЬНЫЙ МЕССЕНДЖЕР. Если в Госуслугах будут приходить фишинговые письма, это ведь ужас. А тут будут приходить трояны, это 100%&#xA;&#xA;SYSTEMALERTWINDOW - может показывать окна поверх других приложений&#xA;&#xA;Уже не имеет смысла. Это устаревшее разрешение и сейчас, чтобы его получить, нужно прям постараться. На современных версиях Android без помощи Google вообще мало кто сможет понять, как это разрешение предоставить.&#xA;Я уверен, что это хвост от родителя Макса, кем бы он ни был (Там-Там, Сферум, что там ещё). Современный же способ показывать себя поверх других окон — это использовать полноэкранные уведомления. Они то как раз и защищены разрешением android.permission.USEFULLSCREENINTENT, о котором исследователь написал ниже.&#xA;Это критически важное разрешение для любой звонилки (если у неё нет «роли звонилки» — очень специфичное API, который MAX не использует). Без него нельзя показать экран принятия или сброса звонка.&#xA;&#xA;Резюмируя: устаревший и бесполезный. Его нельзя выдать. Разработчики удалят его, когда руки дойдут. Сейчас он просто объявлен, но ничего не делает.&#xA;&#xA;RECEIVEBOOTCOMPLETED - автозапуск при старте системы&#xA;&#xA;В целом да, но давайте более полно опишем суть этого ресивера. Если он объявлен в Манифесте, то Android, после загрузки и, важно, разблокирования устройства, пошлёт уведомление об этом событии приложению.&#xA;Приложение не просто запустится. Оно, собственно, не может «запуститься» в терминах Windows, к примеру. Но зато приложение сможет выполнить критические для него действия. К примеру, обновить токен для пушей (иначе пуши отвалятся), пересоздать задачи для фоновых работ. И, важно, делать это приложение может не бесконечно долго.&#xA;Android уже давно сильно ограничивает работу фоновых приложений. Так что Макс, как и абсолютно все другие, просто выполнят всякие прям критические для них задачи и на этом успокоятся. Запустится, а потом закешируется системой, лишь один и множества компонентов приложения.&#xA;&#xA;Что важно — этот ресивер сам разработчик может иногда даже не объявлять, а оно всё равно будет. Вот пример с моим приложением: https://gitea.myachin.xyz/umnik/SaveTo/src/branch/master/app/src/main/AndroidManifest.xml Вы можете видеть, что получатель не объявлен мною в Манифесте, но он есть в приложении всё равно. Потому что я использую библиотеку для создания задач (чищу кеш периодически) от Google, а вот она уже добавляет ресивер при сборке, т.к. он ей нужен ей самой.&#xA;&#xA;Резюмируя: стандарт. Есть примерно у всех.&#xA;&#xA;DISABLEKEYGUARD - отключение блокировки экрана&#xA;&#xA;Сразу несколько раз неправильно. Вот правильно:&#xA;отключение работаЛО, только если экран блокирования не является безопасным. Другими словами, если пользователь не включил ни пароль, ни паттерн, ничего, то приложение могло обойти экран. Например, тап на уведомление от приложение позволило бы сразу открыть его&#xA;отключение работаЛО до Androiod 4.0.3. С тех пор работать перестало&#xA;&#xA;Ну и в последней версии разрешение уже убрали, его нет. То есть разработчики потихоньку приводят код в порядок, выбрасывая древнющие хвосты.&#xA;&#xA;Резюмируя: не работает и уже исключено из Манифеста&#xA;&#xA;USEFULLSCREENINTENT - полноэкранные уведомления&#xA;&#xA;Да. Потому что SYSTEMALERTWINDOW устарел и больше не работает.&#xA;&#xA;Резюмируя: правильный современный способ показать что-то на весь экран. Например экран входящего звонка&#xA;&#xA;READCONTACTS, WRITECONTACTS - полный доступ к контактам&#xA;&#xA;Да. Чтение нужно, чтобы имена написать на экране, а запись нужна, чтобы добавить свои (в смысле мессенджера) данные к существующим контактам или создать новый. Вы гарантировано видели поля того же WhatsApp в информации о контакте в системной записной книге&#xA;&#xA;Резюмируя: нормальное поведение для обычного, не секретного, средства общения&#xA;&#xA;ACCESSFINELOCATION - точная геолокация. Постоянное отслеживание точного местоположения пользователя в реальном времени.&#xA;&#xA;Да. Нет.&#xA;&#xA;Да — это разрешение для получения более-менее точной геолокации. А ещё оно же нужно для того, чтобы узнать имя Wi-Fi сети, о чём я писал ранее. Этим разрешением много что защищено, к сожалению. Раньше даже обнаружение блютуз устройств им защищалось.&#xA;&#xA;В Максе действительно есть возможность поделиться своим местоположением. Разрешение не запрашивается, пока не попытаешься поделиться впервые. Можно выдать на один раз. Кстати, если не выдать разрешение, то можно увидеть сообщение, которое описывает возможные будущие возможности. Например, поиск собеседников поблизости.&#xA;&#xA;Нет — для отслеживания в реальном времени нужно ещё запросить разрешение на фоновую геолокацию. Иначе как только свернёшь приложение, доступ фиче пропадёт. Разрешение называется ACCESSBACKGROUNDLOCATION и в последней версии оно не объявлено в Манифесте.&#xA;&#xA;Резюмируя: разрешение нужно для вполне конкретной возможности и используется по назначению. Фоновое получение геолокации невозможно.&#xA;&#xA;CAMERA - доступ к камере&#xA;RECORDAUDIO - запись аудио&#xA;&#xA;Разрешите я объединю их вместе. Эти разрешения нужны для звонков, а второе, дополнительно, для записи голосовых сообщений. Оба их можно выдавать одноразово. Оба они запрашиваются только при реальной необходимости. Для современного средства коммуникации это обязательные (в Манифесте) разрешения.&#xA;&#xA;Резюмируя: очевидно нужные разрешения, запрашиваемые по делу.&#xA;&#xA;READEXTERNALSTORAGE, WRITEEXTERNALSTORAGE - доступ к файловой системе&#xA;&#xA;Да, но с оговорками. Оба эти разрешения уже устарели. Посмотрите на скриншот из статьи:&#xA;&#xA;Рис. 15&#xA;&#xA;Если что, вот дополнительно скопировал из Манифеста только что:&#xA;&#xA;     &lt;uses-permission&#xA;        android:name=&#34;android.permission.READEXTERNALSTORAGE&#34;&#xA;        android:maxSdkVersion=&#34;32&#34;/  &lt;uses-permission&#xA;        android:name=&#34;android.permission.WRITEEXTERNALSTORAGE&#34;&#xA;        android:maxSdkVersion=&#34;28&#34;/  Обратите внимание, что разрешения ограничены до Android 9 и Android 12. То есть если у вас Android 13 и новее, этих разрешений не будет в принципе. Дополнительно здесь можно снова увидеть, что в приложении остались хвосты родителя. Потому что android:maxSdkVersion=&#34;28&#34; говорит, что на версиях 29 и новее (это 9-ка) разрешение не используется, а android:minSdkVersion=&#34;29&#34; в этом же Манифесте говорит, что apk в принципе нельзя поставить на Android ниже 10.&#xA;&#xA;Резюмируя: устаревший способ, оставленный для обратной совместимости на уже устаревших версиях Android.&#xA;&#xA;READMEDIAIMAGES, READMEDIAVIDEO - доступ к медиафайлам&#xA;&#xA;Да. Это современный способ, который появился в Android 13. Его прелесть в том, что он не даёт приложению просто так ходить по вашей файловой системе. Система отдаёт вам на управление, какие файлы приложение может получить, какие не может.&#xA;&#xA;Резюмируя: правильный способ для того, чтобы была возможность передать файл собеседнику.&#xA;&#xA;READPHONENUMBERS - доступ к телефонным номерам&#xA;&#xA;Резюмируя: разрешение уже удалено в последней версии.&#xA;&#xA;GETACCOUNTS, AUTHENTICATEACCOUNTS, MANAGEACCOUNTS, USECREDENTIALS - полный доступ к аккаунтам. Может получить список всех аккаунтов (Google, соцсети, почта) на устройстве и манипулировать ими.&#xA;&#xA;Сразу же скажу, что это удалено уже из кода, потому что устарело сто лет назад. Но хочу обратить внимание на качество исследования.&#xA;&#xA;GETACCOUNTS — это действительно разрешение. Оно нужно для получения списка учётных записей. Вполне себе обыденное действие для любого приложения, которое эти учётные записи в системе создаёт. Обращали внимание, что одно приложение часто позволяет авторизоваться сквозь другое, а иной раз без необходимости вообще что-то делать, кроме как нажать &#34;Войти&#34;? Вот этот механизм работает через учётные записи. К примеру, приложения Яндекса создадут вам учётную запись и все новые приложения от Яндекса в вашей системе попытаются найти, может уже есть авторизованная учётка. Если да — переиспользуют её.&#xA;&#xA;AUTHENTICATEACCOUNTS, MANAGEACCOUNTS и USECREDENTIALS - это вообще адок. Google УДАЛИЛ эти разрешения из системы. Не объявил устаревшими, а вообще удалил, будто их никогда и не было. Вы можете до сих пор встретить их в уже устаревшей документации, но вы не найдёте их среди известных даже с пометкой Deprecated.&#xA;&#xA;Резюмируя: разрешения уже удалены из кода в последней версии.&#xA;&#xA;USEFINGERPRINT - доступ к биометрии&#xA;&#xA;Как-то странно сформулировано. Это не доступ к биометрии, а возможность повесить биометрию как способ разблокирования приложения. Думаю, блокировку приложения через биометрию вы все видели миллион раз.&#xA;&#xA;Это, кстати, устаревшее, хотя и работающее разрешение. Оно устарело в Android 9 (напомню, Макс требует минимум Android 10) и на смену ему пришло USEBIOMETRIC. И в Максе оно тоже объявлено в последней версии приложения. Значит устаревшее скоро удалят, просто руки ещё не дошли.&#xA;&#xA;Резюмируя: нормальное разрешение для средств общения. Уже заменяется на актуальное USEBIOMETRIC.&#xA;&#xA;INTERNET - полный доступ в интернет&#xA;&#xA;Да. Только не понимаю, к чему тут слово «полный». Это разрешение одинаково хоть для полного, хоть для частичного. Если используешь сетевые запросы хоть в каком-то виде, будь добр объявить это разрешение.&#xA;&#xA;Резюмируя: нормальное разрешение для средств общения.&#xA;&#xA;ACCESSWIFISTATE, ACCESSNETWORKSTATE - мониторинг сети&#xA;&#xA;Ну, вроде и не соврал, но как-то сформулировано гаденько, учитывая тон статьи. Эти разрешения нужны чтобы просто понять, можно ли в этой сети работать или нет. При чём сам Google говорит, что это не опасные разрешения и Android выдаёт их автоматически. Они не позволяют понять, где ты находишься, к примеру. Но позволяют узнать, жива ли сеть, платная ли она. Эти разрешения даже не обязательно объявлять вручную, см. пример выше с получателем уведомления о загрузке. Эти разрешения автоматически добавляют библиотеки Google для всяких фоновых работ. Потому что может быть тяжёлая задача, типа отправки файла в фоне на полгига. Хорошо бы её выполнять в нетарифицируемой (бесплатной) Wi-Fi сети. Приложение, когда создаёт задачу, выставляет такие флаги и библиотека берёт на себя понимание, подходит ли конкретно та сеть, к которой подключены прямо сейчас, для задачи или нет.&#xA;При чём второе разрешение нужно для тех же мобильных сетей. Скажем, не грузить файлы в роуминге.&#xA;&#xA;Резюмируя: нормальные разрешения для средств общения, где может быть большой трафик.&#xA;&#xA;Bluetooth разрешения - полный контроль Bluetooth&#xA;&#xA;Сначала дам скриншот из статьи:&#xA;&#xA;Рис. 21&#xA;&#xA;Во-первых, разрешения уже режут, т. к. часть из них устарела или не имеет смысла:&#xA;&#xA;    &lt;uses-permission&#xA;        android:name=&#34;android.permission.BLUETOOTH&#34;&#xA;        android:maxSdkVersion=&#34;30&#34;/  uses-permission android:name=&#34;android.permission.BLUETOOTHCONNECT&#34;/&#xA;&#xA;Во-вторых это не полный контроль, а просто подключение беспроводной гарнитуры для общения голосом.&#xA;В-третьих уже устаревающий, но ещё живое разрешение android.permission.BLUETOOTH ограничено сверху и не существует на Android 12 и новее. Там уже используется современное android.permission.BLUETOOTHCONNECT.&#xA;&#xA;Резюмируя: нормальные разрешения для средств общения.&#xA;&#xA;CHANGEWIFISTATE - изменение состояния Wi-Fi. Могут мешать работе сети, перехватывать трафик.&#xA;&#xA;Уже удалено, его нет сейчас в Манифесте&#xA;Даже если бы не было удалено, Андроид уже давно не позволяет управлять Wi-Fi сетями. Приложение может управлять Wi-Fi сетью, только если оно само её и создало (не считаем всяких админских прав и системные приложения). Остальные идут лесом&#xA;&#xA;Резюмируя: уже удалённый хвост. Использовался когда-то для просто понимания состояния сети.&#xA;&#xA;[Подозрительный] Сервис для звонков с доступом к камере и микрофону&#xA;&#xA;        &lt;service&#xA;            android:name=&#34;one.me.calls.impl.service.CallServiceImpl&#34;&#xA;            android:exported=&#34;false&#34;&#xA;            android:foregroundServiceType=&#34;microphone|camera|mediaProjection|mediaPlayback&#34;/  Думаю, иметь сервис для звонков для звонилки — это не подозрительно. Но разберём, что тут написано, потому что это просто полезно.&#xA;&#xA;Для начала нужно понять, что такое foreground service (сервис переднего плана). Сервис — это такой компонент приложения, который не имеет UI и используется для длительных работ. К примеру, нужно вам скачать файл — имеет смысл переложить эту задачу на сервис.&#xA;Сервисы могут быть фоновые (background) и переднего плана. О существовании фоновых пользователь не знает и не видит их. А вот сервисы переднего плана обязаны создать видимое пользователю уведомление. Если его не создать, Андроид сразу убьёт приложение.&#xA;Типичный пример — музыкальный плеер. Они не просто так уведомления вешают, хоть это и удобно. Если не повесят — они не смогут работать в фоне.&#xA;&#xA;Современный Андроид работает так, что если пользователь чего-то не видит и это что-то не системное или не имеет особенных, очень сложно получаемых прав, то это что-то будет убито.&#xA;&#xA;android:name=&#34;one.me.calls.impl.service.CallServiceImpl&#34;. Это путь к самому сервису звонка. Иначе Android не поймёт, где его искать&#xA;android:exported=&#34;false&#34;. Сервис недоступен внешним приложениям. Его запустить может только сам Макс или Андроид. Это правильный флаг безопасности, так и надо делать&#xA;android:foregroundServiceType=&#34;microphone|camera|mediaProjection|mediaPlayback&#34;. Начиная с Android 14, приложение обязано уведомить, для чего вообще используется сервис переднего плана. И вот вы, читая эту строку в Манифесте, тоже понимаете, для чего сервис используется. Звонилке он нужен для того, чтобы она имела доступ к микрофону, к камере, могла транслировать экран телефона и воспроизводить звук&#xA;&#xA;Резюмируя: абсолютно корректное объявление необходимого сервиса переднего плана&#xA;&#xA;[Подозрительный] Сервис медиа-проекции (может записывать экран)&#xA;&#xA;        &lt;service&#xA;            android:name=&#34;ru.ok.tamtam.android.calls.MediaProjectionService&#34;&#xA;            android:exported=&#34;false&#34;&#xA;            android:foregroundServiceType=&#34;mediaProjection&#34;/  Хотя фича трансляции экрана есть и даже используется в CallServiceImpl, я не нашёл в коде приложения вызова этого сервиса. Больше всего это похоже на хвост от ТамТам, который будет удалён в будущих версиях. Сейчас это просто мёртвый код, никем не вызываемый. Т. к. android:exported=&#34;false&#34;, то можно быть уверенным, что и сторонние приложения этот код не смогут вызвать.&#xA;&#xA;Резюмируя: скорее всего мёртвый код, который ещё не удалили. Актуальный код находится в one.me.calls.impl.service.CallServiceImpl.&#xA;&#xA;[Опасный компонент] LinkInterceptorActivity с возможностью перехвата deeplinks&#xA;&#xA;  android:exported=&#34;true&#34; (Критическая уязвимость). Эта активность может быть запущена извне — другим приложением на устройстве или даже из браузера по специальной ссылке.&#xA;&#xA;Нет, это не уязвимость, а нормальное поведение для глубоких ссылок/дип линков (deeplink). Они для этого и созданы.&#xA;&#xA;  android:excludeFromRecents=&#34;true&#34; (Тактика скрытности). После того как пользователь завершит работу с этой активностью, она не появится в списке последних приложений (который вызывается кнопкой &#34;Недавние&#34;).&#xA;&#xA;Это рекомендуемое поведение для глубоких ссылок.&#xA;&#xA;Давайте разберёмся, что такое глубокие ссылки. Странное название, правда? Вот простая ситуация: вам нужно объяснить человеку, как найти в RuStore какой-нибудь MAX. Нужно объяснять, как запустить РуСтор, что написать в поиске, какое из найденных приложений выбрать. А можно просто прислать ссылку market://details?id=ru.oneme.app и Андроид спросит, каким Магазином её открыть. Выбери хоть Google Play, хоть RuStore — откроется сразу правильный экран.&#xA;Глубокие ссылки позволяют открыть сразу нужный экран приложения, в какой бы жопе этого приложения он не был. Можно даже сделать экраны, которые кроме как по глубоким ссылкам недоступны.&#xA;&#xA;Теперь понятно, почему android:exported=&#34;true&#34;? Иначе же внешние приложение не сможет экран открыть. И очевидно, что в списке Недавних экраны сотой глубины вложенности не нужны. Потому вполне разумно их исключить.&#xA;&#xA;Вот как на самом деле выглядит код, кусочек которого предоставил автор:&#xA;&#xA;        &lt;activity&#xA;            android:theme=&#34;@style/OneMe.Theme.Transparent&#34;&#xA;            android:label=&#34;&#34;&#xA;            android:name=&#34;one.me.android.deeplink.LinkInterceptorActivity&#34;&#xA;            android:exported=&#34;true&#34;&#xA;            android:excludeFromRecents=&#34;true&#34;&#xA;            android:launchMode=&#34;singleTop&#34;&#xA;            android:configChanges=&#34;orientation&#34;&#xA;            android:windowSoftInputMode=&#34;adjustResize|stateHidden&#34;  &lt;intent-filter&#xA;                android:label=&#34;max&#34;&#xA;                android:autoVerify=&#34;true&#34;  action android:name=&#34;android.intent.action.VIEW&#34;/&#xA;                category android:name=&#34;android.intent.category.DEFAULT&#34;/&#xA;                category android:name=&#34;android.intent.category.BROWSABLE&#34;/&#xA;                data android:pathPattern=&#34;/..&#34;/&#xA;                data android:scheme=&#34;http&#34;/&#xA;                data android:scheme=&#34;@string/webscheme&#34;/&#xA;                data android:host=&#34;@string/apphost&#34;/&#xA;            /intent-filter&#xA;            intent-filter android:label=&#34;max&#34;&#xA;                action android:name=&#34;android.intent.action.VIEW&#34;/&#xA;                category android:name=&#34;android.intent.category.DEFAULT&#34;/&#xA;                category android:name=&#34;android.intent.category.BROWSABLE&#34;/&#xA;                data android:scheme=&#34;@string/appscheme&#34;/&#xA;                data android:host=&#34;@string/apphost&#34;/&#xA;            /intent-filter&#xA;            &lt;meta-data&#xA;                android:name=&#34;android.app.shortcuts&#34;&#xA;                android:resource=&#34;@xml/shortcuts&#34;/  /activity&#xA;&#xA;Не буду разбирать построчно, просто соберу в итог. «Андроид, закрепи за мной ссылку http[s]://max.ru/. Если кто-то попытается эту ссылку открыть, то я её обработаю вот этим экраном».&#xA;&#xA;Разумеется, в Google не совсем дураки сидят и просто так закрепить за собой ссылку ты не можешь. Ты должен по указанному адресу положить специальный файл (https://max.ru/.well-known/assetlinks.json; желающие могут убедиться, что он там лежит и даже увидят уши дев сборки), который позволит удостоверить, что ты действительно имеешь право на перехват этих ссылок.&#xA;&#xA;Например, если вы установите альтернативный YouTube клиент, вам вручную нужно будет назначать ссылки для перехвата. Они объявлены в Манифесте, но Андроид их не включит, вы должны сделать это руками.&#xA;&#xA;В общем, в этом примере Андроид передаст Максу ссылки только на его собственный сайт.&#xA;&#xA;Резюмируя: нормальное поведение для множества приложений.&#xA;&#xA;[Опасный компонент] CallNotifierFixActivity с возможностью показа на экране блокировки&#xA;&#xA;Кажется, уже по названию можно догадаться, что это такое. Вот код:&#xA;&#xA;        &lt;activity&#xA;            android:theme=&#34;@style/CallNotifierFixActivityTheme&#34;&#xA;            android:name=&#34;one.me.android.calls.CallNotifierFixActivity&#34;&#xA;            android:showOnLockScreen=&#34;true&#34;&#xA;            android:turnScreenOn=&#34;true&#34;/  Использовалось когда-то для показа уведомления о звонке. Код немного изменят, т.к. showOnLockScreen объявлен устаревшим ещё в API 23. Напомню, что Макс не установится на API ниже 29.&#xA;&#xA;Резюмируя: скорее всего устаревший костыль.&#xA;&#xA;com.google.android.gms.permission.ADID - доступ к рекламному ID&#xA;&#xA;Не могу сказать откуда я это знаю, но некоторые компании используют ID вовсе не для рекламирования, а просто для удобного и, важно, анонимного подсчёта пользователей. Количество уникальных ID примерно равно количеству пользователей, при этом не приходится обращаться к реальным учёткам. Даже если база утечёт, это будут просто мусорные строки.&#xA;&#xA;Резюмируя: иногда что-то может быть не тем, чем кажется&#xA;&#xA;Отключено резервное копирование (allowBackup=&#34;false&#34;)&#xA;&#xA;  Обычные приложения разрешают бэкап, чтобы пользователь мог восстановить данные. Вредоносное приложение отключает эту функцию, чтобы усложнить исследование своего поведения и извлечение украденных данных при помощи инструментов анализа&#xA;&#xA;Тут прям всё не так.&#xA;&#xA;Очень многие приложения, практически все, где есть учётные записи, запрещают резервное копирование&#xA;Разработчики несколько отстали от современности. Они выключили резервное копирование в облако (читай - в Google Drive). Но на переезд с одного устройства на другое эта настройка не влияет для всех современных устройств. То есть если вы возьмёте Pixel 8 и переедете по кабелю на Pixel 9, то приложение переедет. Вполне возможно переедет поломанным и нужно будет вручную чистить ему данные&#xA;Вредоносные приложения отключают, потому что зачем оно им. На их анализ это вообще никак не влияет&#xA;&#xA;Резюмируя: нормальное поведение, когда в приложении есть учётные записи, хотя я сам такое и не люблю. Но правильная реализация требует прям заморочиться&#xA;&#xA;Включен нативный код (extractNativeLibs=&#34;false&#34;)&#xA;&#xA;  Указывает системе не распаковывать нативные библиотеки (.so файлы) из APK. Это может использоваться для затруднения статического анализа кода антивирусами и исследователями, так как часть логики спрятана в скомпилированных бинарниках.&#xA;&#xA;Палю крутой способ достать .so файлы — архиватор, работающий с zip архивами.&#xA;&#xA;На самом деле это рекомендуемое поведение. Оно говорит Андроиду, чтобы тот не извлекал нативные библиотеки, а просто читал из прямо из apk файла. Кроме того, этот флаг используется системой сборки gradle. Он говорит гредлу, чтобы тот не сжимал нативные либы, т.к. при сжатии прямого чтения из apk не получится. В итоге имеем бОльший размер apk, но бОльшую скорость чтения натива во время работы.&#xA;&#xA;Резюмируя: обычное поведение.&#xA;&#xA;DOWNLOADWITHOUTNOTIFICATION - скрытые загрузки&#xA;&#xA;На самом деле никогда не работало так, как вы того ожидаете. Даже в древние времена. А сегодня он вообще не работает. Как результат — в текущей версии Макса этого разрешения нет.&#xA;&#xA;Резюмируя: не рабочий хвост старого приложения. Уже удалён.&#xA;&#xA;FOREGROUNDSERVICEDATASYNC - фоновая синхронизация данных&#xA;&#xA;  Позволяет запустить foreground-сервис для &#34;синхронизации данных&#34;. Это механизм для длительной фоновой работы под видом полезной деятельности, чтобы постоянно собирать данные&#xA;&#xA;Вон чё. Вообще это разрешение, которые разработчики ОБЯЗАНЫ объявить, если используют сервис переднего плана с типом dataSync. Таких сервисов у них два: one.me.android.media.service.OneMeDownloadService, отвечающий за загрузку и androidx.work.impl.foreground.SystemForegroundService, который вообще не их, а пришедший к ним из гугловой библиотеки WorkManager, которую используют вообще все, кто использует фоновые задачи.&#xA;&#xA;Резюмируя: вполне обычная ситуация&#xA;&#xA;Автозапуск: Receiver для автозапуска при включении устройства&#xA;&#xA;Пусть вас не смущает, что вы уже видели это выше. Выше было разрешение на получение этого бродкаста, а тут уже сам получатель (ресивер). И автор переживает, что у него три типа:&#xA;&#xA;  BootCompletedReceiver с тремя разными действиями (BOOTCOMPLETED, QUICKBOOTPOWERON) — это гарантирует, что запуск выполниться автоматически при любой возможности сразу после включения телефона, даже до его разблокировки.&#xA;&#xA;Рис. 29&#xA;&#xA;Но на самом деле всё просто. Работает реально только первый тип. Второй давно никто не может получить (можно сказать, что его не существует), а третий так вообще только БЫЛ когда-то у HTC. То есть второй и третий — это хвосты ТамТама.&#xA;&#xA;Вот, кстати, код целиком:&#xA;&#xA;        &lt;receiver&#xA;            android:name=&#34;ru.ok.tamtam.android.services.BootCompletedReceiver&#34;&#xA;            android:exported=&#34;true&#34;  intent-filter&#xA;                action android:name=&#34;android.intent.action.BOOTCOMPLETED&#34;/&#xA;                action android:name=&#34;android.intent.action.QUICKBOOTPOWERON&#34;/&#xA;                action android:name=&#34;com.htc.intent.action.QUICKBOOTPOWERON&#34;/&#xA;            /intent-filter&#xA;        /receiver&#xA;&#xA;Предлагаю VK пересмотреть android:exported=&#34;true&#34;. Экшен android.intent.action.BOOTCOMPLETED кроме системы никто послать не может, а два других уже давно сдохли. Думаю, имеет смысл выставить в false этот параметр.&#xA;&#xA;Резюмируя: частично устаревший код. Будет исправлен в будущем.&#xA;&#xA;Заключение исследователя&#xA;&#xA;  Проведенный технический анализ мессенджера выявил тревожный дисбаланс между заявленным функционалом и запрашиваемым уровнем доступа к устройству и данным пользователя&#xA;&#xA;Не выявил&#xA;&#xA;  Однако нашлось и множество «спорных» возможностей, которые выходят далеко за рамки обычных возможностей мессенджера&#xA;&#xA;Не нашлось&#xA;&#xA;  Автозапуск при загрузке, скрытые загрузки, отключение резервного копирования и сложность анализа кода (extractNativeLibs=&#34;false&#34;) — это приемы, которые чаще ассоциируются с вредоносным ПО, стремящимся закрепиться в системе и скрыть свою деятельность.&#xA;&#xA;Нет&#xA;&#xA;  В итоге, перед нами не просто мессенджер, а многофункциональный комплекс с широчайшими полномочиями.&#xA;&#xA;Перед нами типичный современный мессенджер с очень плохим GUI, не соответствующим Android.&#xA;&#xA;  Пользователь, устанавливая это приложение, по сути, добровольно предоставляет ему ключи от всей своей цифровой жизни: от переписки и звонков до местоположения, паролей и возможности наблюдать через камеру&#xA;&#xA;Опустим пафос в начале и остановимся на &#34;наблюдать через камеру&#34;. Важно понимать, что камера и микрофон НЕДОСТУПНЫ приложениям в фоне. Скрыто их запускать нельзя. Вы обязаны хотя бы держать сервис переднего плана, который обязан создавать уведомление. А ещё Android нарисует индикатор использования камеры или микрофона.&#xA;&#xA;Мои предложения разработчикам MAX&#xA;&#xA;видно, что вы чистите устаревший код. Но я считаю, что именно на чистку стоит забить болт. Не, если чистка происходит на халяву по человеко-часам, то да, можно. Но специально выделять на это ресурсы не нужно, важнее усилить безопасность продукта&#xA;запретите обработку исполняемых файлов. Не нужно создавать интент для apk и запускать его. Если это файл опасного типа для данной платформы, то пусть файл будет только сохраняться. При этом предупреждение оставить нужно, за него спасибо. Я считаю это критически важным только потому что мы имеем дело с национальным средством связи. Оно должно быть заточено на безопасность пользователей в первую очередь. Даже в ущерб некоторым привычкам. Особенно если эти привычки вредные&#xA;ваш безопасный режим должен быть включен по умолчанию. Причина всё та же — вы не рядовой мессенджер и к вам другие требования&#xA;вам нужно расширить партнёрство с ЛК. Сейчас вы уже используете WhoCalls. Договоритесь использовать ещё и их сервис репутации. Разумеется, проверки делайте только через запрос хеша, у них есть такой режим. Все http[s]:// тоже нужно проверять через этот сервис. Можете не переживать за то, что параметры ссылки передаются — у ЛК ссылки очищаются от параметров. Я сам это тестировал когда-то :) Кстати, у ЛК ещё и антиспам есть, если вы понимаете к чему я]]&gt;</description>
      <content:encoded><![CDATA[<h2 id="часть-2-1-про-анализ-приложения">Часть 2.1: про анализ приложения</h2>

<p>Эту часть я прям рекомендую прочитать самим разработчикам Макса, т. к. здесь предложу улучшения безопасности. Изначально хотел написать вам на почту, но на сайте поднимается панель связи в чате, а почты нет.</p>

<p>После <a href="https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie-33m8" rel="nofollow">второй части</a> я честно хотел перейти к третьей, в которой бы описал своё личное отношение к конкретной реализации «национального средства коммуникации» от VK под названием MAX. Однако коллега подкинул очередной «разбор»/«анализ» Макса и не где-нибудь, а на Хабре.</p>

<p>Это один из типичных анализов Макса, которые сводятся к чтению Манифеста, даже без попытки заглянуть в код (но да, он обфусцирован). Возьму его как просто один из множества, всё равно они все похожи: взяли Манифест и закинули ИИшке, которая пук-среньк и написала чушь.</p>

<p>Хотя именно в этом “разборе”, мне кажется, ИИ особо не участвовал. Я читал уже удалённый, самый первый, который стал популярным. Вот там вообще ИИ бред был очевиден.

Замечание о внешних файлах. Скриншоты я не храню у себя, а буду ссылаться на них в оригинальных статьях. Так что если со временем статья будет недоступна, то и скриншоты будут недоступны.</p>

<h3 id="max-без-оболочки-что-мы-нашли-в-его-apk-https-habr-com-ru-articles-945306"><a href="https://habr.com/ru/articles/945306/" rel="nofollow">MAX без оболочки: Что мы нашли в его APK</a></h3>

<h4 id="доступ-к-контактам">Доступ к контактам</h4>

<blockquote><p>После того, как я ввел номер телефона и подтвердил его, «Макс» попросил доступ к моим контактам (Рисунок 1). Достаточно стандартное поведение для мессенджера, позволяет находить контакты из списка, зарегистрированных в «Максе»</p></blockquote>

<p>Рис. 1:</p>

<p><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/aaa/6a8/82d/aaa6a882df630ad5483180e5c84ad8e1.png" alt="Рис.1 Запрос доступа"></p>

<blockquote><p>После этого, «Макс» снова запросил доступ к контактам (рисунок 2).</p></blockquote>

<p>Рис. 2:</p>

<p><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/747/935/bd1/747935bd1fbf45ecbfc7d1294e25501a.png" alt="Рис.2 Запрос доступа"></p>

<p>Строго говоря, это не является ошибкой разбора. Это кривой UX — реально одна из важных проблем MAX. На первом скриншоте нет никакого запроса доступа, хотя и похоже на него. По рекомендациям Google, перед запросом некоторых (не всех) разрешений, нужно сначала объяснить, зачем они нужны. И то, это правило довольно жидкое. Если пользователю так понятно, зачем разрешение запрашивается, то предварительного объяснения не нужно.
Например, пользователь нажимает «Поделиться местоположением». Приложение сразу же может запросить разрешение на местоположение, если оно ещё не предоставлено. Потому что пользователь точно понимает, к чему этот запрос. А вот другая ситуация. Приложение может выполнять автоматические фоновые работы и, важно, может это делать в любых Wi-Fi сетях или конкретных. И тут проблема. Если пользователь желает выполнять фоновые работы только в своей домашней Wi-Fi сети, нужно запросить разрешение на геолокацию. Это происходит потому что получать расширенные данные о Wi-Fi точке можно только при наличии такого разрешения. Но пользователь ведь этого не знает. В этом случае сначала можно написать, что так и так, если выберешь такой вариант, придётся предоставить такое разрешение.</p>

<p>Доступ к контактам — это действительно не самая нужная вещь для средства общения, т.к. он вполне может использовать и свою записную книгу, не зависимую от системы. Так что это нормально — сначала объяснить, что далее будет такой-то запрос и вот почему.
Но объяснение нарисовано отвратительно, как и вообще весь UI Макса. Он совершенно не похож на другие приложения и, самое главное, на ОС, в которой работает. Это объяснение действительно очень похоже на запрос разрешения, только в iOS. Но это не оно, это такое кривое объяснение.
А вот второй скриншот — это правда системный запрос.</p>

<blockquote><p>были запрошены доступ к камере, демонстрации и записи экрана (демонстрация экрана в звонке есть, а вот функционала записи я не увидел)</p></blockquote>

<p><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/d5a/15b/75e/d5a15b75e9ed30fe14bd62be600d2960.png" alt="Рис.4 Запрос доступа к камере, демонстрации и записи экрана."></p>

<p>Потому что демонстрация экрана (шаринг экрана, если кому-то так привычнее) — это буквально его запись. Экран записывается и этот видеопоток уже отправляется получателю. В общем, это нормально, так и должно быть.</p>

<blockquote><p><code>AndroidManifest.xml</code> — один из самых важных и интересных для исследователя файлов. Он содержит много информации, по которой можно составить представление о приложении, и даже сформировать поверхность атаки. <strong>В архиве он представлен в закодированном виде</strong>.</p></blockquote>

<p>Не буду считать это ошибкой, скорее, просто привычное для рядовых читателей слово. Но это не закодированный, а просто бинарный формат файла. Это <a href="https://android.googlesource.com/platform/frameworks/base/+/master/libs/androidfw/include/androidfw/ResourceTypes.h" rel="nofollow">Google так делает</a>, это не какая-то защита от авторов.</p>

<h4 id="request-install-packages-может-устанавливать-другие-приложения"><code>REQUEST_INSTALL_PACKAGES</code> – может устанавливать другие приложения</h4>

<p>Если быть точным, то может запросить разрешение на установку приложений, а его можно и не предоставить. Потому что в Android ни одно приложение не может ставить другие. Это доступно только встроенному <code>PackageManager</code>. Остальные могут лишь просить его что-то установить. Оно потому и называется <code>REQUEST_*</code>
К сожалению, очень много приложений объявляют это разрешение без реальной необходимости. Оно есть у Chrome, Firefox, WhatsApp и многих других. Кто-то объявляет его «для удобства», например браузеры. Кто-то — потому что правильно боится, что его могут вышибыть из Google Play, а обновиться как-то нужно.</p>

<p>Эта часть изменена. Мне подсказали, что MAX ведёт себя разумнее других. Старый текст оставлен под спойлером.</p>

<p><details>
<summary><strong>Старый текст</strong></summary>
Конкретно MAX, <strong>возможно, но маловероятно</strong> (проверить сложно, т. к. установка в Android вызывается не для <code>packageManager</code>), объявил это разрешение как раз для самообновления. Но, даже если это так (опять же, сомневаюсь, т.к. в коде вижу обновления через GPlay), он всё равно позволяет ставить любые другие приложения, если пользователь попытается это сделать.</p>

<p>Я считаю, что это очень плохое свойство для национального средства общения.
Если бы я участвовал в разработке Макса, то разрешение реально было бы в Манифесте (на случай самообновления), но если обнаруживается, что в системе установлен поддерживаемый магазин, то вызывал бы API для проверки существования себя в Магазине. И, если обнаруживал бы, то запрос разрешения бы блокировался. То есть тап в чате на apk файл приводил бы только к сохранению, но не к запуску.
В случае, если в Магазине он себя не находил бы, то должен делать следующее:</p>
<ul><li>рекомендовать установить RuStore</li>
<li>разрешить запрос на установку apk</li>
<li>не вызывать установку, если файл был прислан в чате</li>
<li>вызывать установку, только если сам скачал же себя с сервера обновлений
<ul><li>и даже в этом случае должен проверить подпись скачанного, на случай взлома сервера</li></ul></li></ul>

<p>Резюмируя: стандартное, но плохое, разрешение, которое многие отечественные производители используют для самообновления. Но к конкретно Максу выдвигаются (мною) повышенные требования безопасности и он не должен даже пытаться устанавливать apk, если обнаруживает, что его не выперли из магазинов.
</details></p>

<p>Макс, как и другие средства общения, позволяет установить присланный apk из него. Я считаю это плохим свойством именно для национального мессенджера. То есть оно плохое в принципе — ни браузерам, ни мессенджерам, никому, кроме файловых менеджеров или, лучше, специализированных инсталляторов нельзя устанавливать приложения. КОНЕЧНО ЖЕ, это удобно. Удобно то, что скачал файл, тут же запустил и установил. Но это удар по безопасности. Собственно, 99% (выдуманное число, но уверен, близкое к истине) всех троянов распространяются не через официальные магазины приложений, а через присылание их в чаты в мессенджерах и завлекаловок “бесконечные деньги в вашем банке, качайте по ссылке” в браузере. Трояна установить очень легко. А вот скачать, потом найти в файловом менеджере, запустить — это уже сложнее. Так вот безопасность должна быть удобнее опасности.
В качестве примера приведу настройку телефона при первом включении. Вы можете пропустить установку пароля, да. Но установить его проще, чем пропустить. При пропуске вам ещё немного поколупают мозг (недостаточно, я считаю). Вот и получается, что безопасно сделать удобнее, чем опасно. Так должно быть и для исполняемых файлов. А для национального мессенджера — так должно быть ОБЯЗАТЕЛЬНО.</p>

<p>К чести Макса, его поведение всё равно лучше, чем у многих других. Если вам прислали apk и не важно, ваш это контакт или ещё кто-то, то при попытке просто загрузить его с сервера будет выдано предупреждение, что это файл опасного типа.</p>

<p>Как должно быть, на мой взгляд:
– предупреждение об опасном типе файла, как сейчас
– только скачивание и сохранение, без запуска</p>

<p>К слову, я загрузил <code>eicar.com</code> в ТГ и Макс. Оба они не определили в нём вирус. Это означает, что ни тот, ни другой, не используют никаких антивирусных движков, по крайней мере из более-менее популярных. Было бы неплохо национальному средству общения запартнёриться с Лабораторией Касперского и отправлять хеши файлов им. Не файлы, а только хеши. У Лаборатории есть сервис, который по хешу выдаёт рейтинг файла, если тот известен. Это ещё сильнее усилило бы безопасность Макса.</p>

<p>К сожалению, автор «исследования» не озаботился нормальным объяснением и предложением своего подхода.</p>

<p>Резюмируя: стандартное, но плохое (для национального средства коммуникации) разрешение. Apk файлы (и не только, любые исполняемые на всех платформах) нельзя запускать на исполнение, только скачивать. Одного предупреждения (но за него спасибо, без шуток) мало. Нужно понимать, что это НАЦИОНАЛЬНЫЙ МЕССЕНДЖЕР. Если в Госуслугах будут приходить фишинговые письма, это ведь ужас. А тут будут приходить трояны, это 100%</p>

<h4 id="system-alert-window-может-показывать-окна-поверх-других-приложений"><code>SYSTEM_ALERT_WINDOW</code> – может показывать окна поверх других приложений</h4>

<p>Уже не имеет смысла. Это устаревшее разрешение и сейчас, чтобы его получить, нужно прям постараться. На современных версиях Android без помощи Google вообще мало кто сможет понять, как это разрешение предоставить.
Я уверен, что это хвост от родителя Макса, кем бы он ни был (Там-Там, Сферум, что там ещё). Современный же способ показывать себя поверх других окон — это использовать полноэкранные уведомления. Они то как раз и защищены разрешением <code>android.permission.USE_FULL_SCREEN_INTENT</code>, о котором исследователь написал ниже.
Это критически важное разрешение для любой звонилки (если у неё нет «роли звонилки» — очень специфичное API, который MAX не использует). Без него нельзя показать экран принятия или сброса звонка.</p>

<p>Резюмируя: устаревший и бесполезный. Его нельзя выдать. Разработчики удалят его, когда руки дойдут. Сейчас он просто объявлен, но ничего не делает.</p>

<h4 id="receive-boot-completed-автозапуск-при-старте-системы"><code>RECEIVE_BOOT_COMPLETED</code> – автозапуск при старте системы</h4>

<p>В целом да, но давайте более полно опишем суть этого ресивера. Если он объявлен в Манифесте, то Android, после загрузки и, важно, разблокирования устройства, пошлёт уведомление об этом событии приложению.
Приложение не просто запустится. Оно, собственно, не может «запуститься» в терминах Windows, к примеру. Но зато приложение сможет выполнить критические для него действия. К примеру, обновить токен для пушей (иначе пуши отвалятся), пересоздать задачи для фоновых работ. И, важно, делать это приложение может не бесконечно долго.
Android уже давно сильно ограничивает работу фоновых приложений. Так что Макс, как и абсолютно все другие, просто выполнят всякие прям критические для них задачи и на этом успокоятся. Запустится, а потом закешируется системой, лишь один и множества компонентов приложения.</p>

<p>Что важно — этот ресивер сам разработчик может иногда даже не объявлять, а оно всё равно будет. Вот пример с моим приложением: <a href="https://gitea.myachin.xyz/umnik/SaveTo/src/branch/master/app/src/main/AndroidManifest.xml" rel="nofollow">https://gitea.myachin.xyz/umnik/SaveTo/src/branch/master/app/src/main/AndroidManifest.xml</a> Вы можете видеть, что получатель не объявлен мною в Манифесте, но он есть в приложении всё равно. Потому что я использую библиотеку для создания задач (чищу кеш периодически) от Google, а вот она уже добавляет ресивер при сборке, т.к. он ей нужен ей самой.</p>

<p>Резюмируя: стандарт. Есть примерно у всех.</p>

<h4 id="disable-keyguard-отключение-блокировки-экрана"><code>DISABLE_KEYGUARD</code> – отключение блокировки экрана</h4>

<p>Сразу несколько раз неправильно. Вот правильно:
– отключение работаЛО, только если экран блокирования не является безопасным. Другими словами, если пользователь не включил ни пароль, ни паттерн, ничего, то приложение могло обойти экран. Например, тап на уведомление от приложение позволило бы сразу открыть его
– отключение работаЛО до Androiod 4.0.3. С тех пор работать перестало</p>

<p>Ну и в последней версии разрешение уже убрали, его нет. То есть разработчики потихоньку приводят код в порядок, выбрасывая древнющие хвосты.</p>

<p>Резюмируя: не работает и уже исключено из Манифеста</p>

<h4 id="use-full-screen-intent-полноэкранные-уведомления"><code>USE_FULL_SCREEN_INTENT</code> – полноэкранные уведомления</h4>

<p>Да. Потому что <code>SYSTEM_ALERT_WINDOW</code> устарел и больше не работает.</p>

<p>Резюмируя: правильный современный способ показать что-то на весь экран. Например экран входящего звонка</p>

<h4 id="read-contacts-write-contacts-полный-доступ-к-контактам"><code>READ_CONTACTS, WRITE_CONTACTS</code> – полный доступ к контактам</h4>

<p>Да. Чтение нужно, чтобы имена написать на экране, а запись нужна, чтобы добавить свои (в смысле мессенджера) данные к существующим контактам или создать новый. Вы гарантировано видели поля того же WhatsApp в информации о контакте в системной записной книге</p>

<p>Резюмируя: нормальное поведение для обычного, не секретного, средства общения</p>

<h4 id="access-fine-location-точная-геолокация-постоянное-отслеживание-точного-местоположения-пользователя-в-реальном-времени"><code>ACCESS_FINE_LOCATION</code> – точная геолокация. Постоянное отслеживание точного местоположения пользователя в реальном времени.</h4>

<p>Да. Нет.</p>

<p>Да — это разрешение для получения более-менее точной геолокации. А ещё оно же нужно для того, чтобы узнать имя Wi-Fi сети, о чём я писал ранее. Этим разрешением много что защищено, к сожалению. Раньше даже обнаружение блютуз устройств им защищалось.</p>

<p>В Максе действительно есть возможность поделиться своим местоположением. Разрешение не запрашивается, пока не попытаешься поделиться впервые. Можно выдать на один раз. Кстати, если не выдать разрешение, то можно увидеть сообщение, которое описывает возможные будущие возможности. Например, поиск собеседников поблизости.</p>

<p>Нет — для отслеживания в реальном времени нужно ещё запросить разрешение на фоновую геолокацию. Иначе как только свернёшь приложение, доступ фиче пропадёт. Разрешение называется <code>ACCESS_BACKGROUND_LOCATION</code> и в последней версии оно не объявлено в Манифесте.</p>

<p>Резюмируя: разрешение нужно для вполне конкретной возможности и используется по назначению. Фоновое получение геолокации невозможно.</p>

<h4 id="camera-доступ-к-камере"><code>CAMERA</code> – доступ к камере</h4>

<h4 id="record-audio-запись-аудио"><code>RECORD_AUDIO</code> – запись аудио</h4>

<p>Разрешите я объединю их вместе. Эти разрешения нужны для звонков, а второе, дополнительно, для записи голосовых сообщений. Оба их можно выдавать одноразово. Оба они запрашиваются только при реальной необходимости. Для современного средства коммуникации это обязательные (в Манифесте) разрешения.</p>

<p>Резюмируя: очевидно нужные разрешения, запрашиваемые по делу.</p>

<h4 id="read-external-storage-write-external-storage-доступ-к-файловой-системе"><code>READ_EXTERNAL_STORAGE</code>, <code>WRITE_EXTERNAL_STORAGE</code> – доступ к файловой системе</h4>

<p>Да, но с оговорками. Оба эти разрешения уже устарели. Посмотрите на скриншот из статьи:</p>

<p><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/bea/7dc/50a/bea7dc50a333efa18da5c4351141e23c.png" alt="Рис. 15"></p>

<p>Если что, вот дополнительно скопировал из Манифеста только что:</p>

<pre><code>     &lt;uses-permission
        android:name=&#34;android.permission.READ_EXTERNAL_STORAGE&#34;
        android:maxSdkVersion=&#34;32&#34;/&gt;
    &lt;uses-permission
        android:name=&#34;android.permission.WRITE_EXTERNAL_STORAGE&#34;
        android:maxSdkVersion=&#34;28&#34;/&gt;
</code></pre>

<p>Обратите внимание, что разрешения ограничены до Android 9 и Android 12. То есть если у вас Android 13 и новее, этих разрешений не будет в принципе. Дополнительно здесь можно снова увидеть, что в приложении остались хвосты родителя. Потому что <code>android:maxSdkVersion=&#34;28&#34;</code> говорит, что на версиях 29 и новее (это 9-ка) разрешение не используется, а <code>android:minSdkVersion=&#34;29&#34;</code> в этом же Манифесте говорит, что apk в принципе нельзя поставить на Android ниже 10.</p>

<p>Резюмируя: устаревший способ, оставленный для обратной совместимости на уже устаревших версиях Android.</p>

<h4 id="read-media-images-read-media-video-доступ-к-медиафайлам"><code>READ_MEDIA_IMAGES, READ_MEDIA_VIDEO</code> – доступ к медиафайлам</h4>

<p>Да. Это современный способ, который появился в <a href="https://developer.android.com/reference/android/Manifest.permission#READ_MEDIA_IMAGES" rel="nofollow">Android 13</a>. Его прелесть в том, что он не даёт приложению просто так ходить по вашей файловой системе. Система отдаёт вам на управление, какие файлы приложение может получить, какие не может.</p>

<p>Резюмируя: правильный способ для того, чтобы была возможность передать файл собеседнику.</p>

<h4 id="read-phone-numbers-доступ-к-телефонным-номерам"><code>READ_PHONE_NUMBERS</code> – доступ к телефонным номерам</h4>

<p>Резюмируя: разрешение уже удалено в последней версии.</p>

<h4 id="get-accounts-authenticate-accounts-manage-accounts-use-credentials-полный-доступ-к-аккаунтам-может-получить-список-всех-аккаунтов-google-соцсети-почта-на-устройстве-и-манипулировать-ими"><code>GET_ACCOUNTS</code>, <code>AUTHENTICATE_ACCOUNTS</code>, <code>MANAGE_ACCOUNTS</code>, <code>USE_CREDENTIALS</code> – полный доступ к аккаунтам. Может получить список всех аккаунтов (Google, соцсети, почта) на устройстве и манипулировать ими.</h4>

<p>Сразу же скажу, что это удалено уже из кода, потому что устарело сто лет назад. Но хочу обратить внимание на качество исследования.</p>

<p><code>GET_ACCOUNTS</code> — это действительно разрешение. Оно нужно для получения списка учётных записей. Вполне себе обыденное действие для любого приложения, которое эти учётные записи в системе создаёт. Обращали внимание, что одно приложение часто позволяет авторизоваться сквозь другое, а иной раз без необходимости вообще что-то делать, кроме как нажать “Войти”? Вот этот механизм работает через учётные записи. К примеру, приложения Яндекса создадут вам учётную запись и все новые приложения от Яндекса в вашей системе попытаются найти, может уже есть авторизованная учётка. Если да — переиспользуют её.</p>

<p><code>AUTHENTICATE_ACCOUNTS</code>, <code>MANAGE_ACCOUNTS</code> и <code>USE_CREDENTIALS</code> – это вообще адок. Google УДАЛИЛ эти разрешения из системы. Не объявил устаревшими, а вообще удалил, будто их никогда и не было. Вы можете до сих пор <a href="https://developer.android.com/training/sync-adapters/creating-sync-adapter" rel="nofollow">встретить</a> их в уже устаревшей документации, но вы <a href="https://developer.android.com/reference/android/Manifest.permission" rel="nofollow">не найдёте</a> их среди известных даже с пометкой Deprecated.</p>

<p>Резюмируя: разрешения уже удалены из кода в последней версии.</p>

<h4 id="use-fingerprint-доступ-к-биометрии"><code>USE_FINGERPRINT</code> – доступ к биометрии</h4>

<p>Как-то странно сформулировано. Это не доступ к биометрии, а возможность повесить биометрию как способ разблокирования приложения. Думаю, блокировку приложения через биометрию вы все видели миллион раз.</p>

<p>Это, кстати, устаревшее, хотя и работающее разрешение. Оно устарело в Android 9 (напомню, Макс требует минимум Android 10) и на смену ему пришло <code>USE_BIOMETRIC</code>. И в Максе оно тоже объявлено в последней версии приложения. Значит устаревшее скоро удалят, просто руки ещё не дошли.</p>

<p>Резюмируя: нормальное разрешение для средств общения. Уже заменяется на актуальное <code>USE_BIOMETRIC</code>.</p>

<h4 id="internet-полный-доступ-в-интернет"><code>INTERNET</code> – полный доступ в интернет</h4>

<p>Да. Только не понимаю, к чему тут слово «полный». Это разрешение одинаково хоть для полного, хоть для частичного. Если используешь сетевые запросы хоть в каком-то виде, будь добр объявить это разрешение.</p>

<p>Резюмируя: нормальное разрешение для средств общения.</p>

<h4 id="access-wifi-state-access-network-state-мониторинг-сети"><code>ACCESS_WIFI_STATE</code>, <code>ACCESS_NETWORK_STATE</code> – мониторинг сети</h4>

<p>Ну, вроде и не соврал, но как-то сформулировано гаденько, учитывая тон статьи. Эти разрешения нужны чтобы просто понять, можно ли в этой сети работать или нет. При чём сам Google говорит, что это не опасные разрешения и Android выдаёт их автоматически. Они не позволяют понять, где ты находишься, к примеру. Но позволяют узнать, жива ли сеть, платная ли она. Эти разрешения даже не обязательно объявлять вручную, см. пример выше с получателем уведомления о загрузке. Эти разрешения автоматически добавляют библиотеки Google для всяких фоновых работ. Потому что может быть тяжёлая задача, типа отправки файла в фоне на полгига. Хорошо бы её выполнять в нетарифицируемой (бесплатной) Wi-Fi сети. Приложение, когда создаёт задачу, выставляет такие флаги и библиотека берёт на себя понимание, подходит ли конкретно та сеть, к которой подключены прямо сейчас, для задачи или нет.
При чём второе разрешение нужно для тех же мобильных сетей. Скажем, не грузить файлы в роуминге.</p>

<p>Резюмируя: нормальные разрешения для средств общения, где может быть большой трафик.</p>

<h4 id="bluetooth-разрешения-полный-контроль-bluetooth">Bluetooth разрешения – полный контроль Bluetooth</h4>

<p>Сначала дам скриншот из статьи:</p>

<p><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/b8a/45b/d77/b8a45bd77a85c3a886f735724824df86.png" alt="Рис. 21"></p>

<p>Во-первых, разрешения уже режут, т. к. часть из них устарела или не имеет смысла:</p>

<pre><code>    &lt;uses-permission
        android:name=&#34;android.permission.BLUETOOTH&#34;
        android:maxSdkVersion=&#34;30&#34;/&gt;
    &lt;uses-permission android:name=&#34;android.permission.BLUETOOTH_CONNECT&#34;/&gt;
</code></pre>

<p>Во-вторых это не полный контроль, а просто подключение беспроводной гарнитуры для общения голосом.
В-третьих уже устаревающий, но ещё живое разрешение <code>android.permission.BLUETOOTH</code> ограничено сверху и не существует на Android 12 и новее. Там уже используется современное <code>android.permission.BLUETOOTH_CONNECT</code>.</p>

<p>Резюмируя: нормальные разрешения для средств общения.</p>

<h4 id="change-wifi-state-изменение-состояния-wi-fi-могут-мешать-работе-сети-перехватывать-трафик"><code>CHANGE_WIFI_STATE</code> – изменение состояния Wi-Fi. Могут мешать работе сети, перехватывать трафик.</h4>
<ol><li>Уже удалено, его нет сейчас в Манифесте</li>
<li>Даже если бы не было удалено, Андроид уже давно не позволяет управлять Wi-Fi сетями. Приложение может управлять Wi-Fi сетью, только если оно само её и создало (не считаем всяких админских прав и системные приложения). Остальные идут лесом</li></ol>

<p>Резюмируя: уже удалённый хвост. Использовался когда-то для просто понимания состояния сети.</p>

<h4 id="подозрительный-сервис-для-звонков-с-доступом-к-камере-и-микрофону">[Подозрительный] Сервис для звонков с доступом к камере и микрофону</h4>

<pre><code>        &lt;service
            android:name=&#34;one.me.calls.impl.service.CallServiceImpl&#34;
            android:exported=&#34;false&#34;
            android:foregroundServiceType=&#34;microphone|camera|mediaProjection|mediaPlayback&#34;/&gt;
</code></pre>

<p>Думаю, иметь сервис для звонков для звонилки — это не подозрительно. Но разберём, что тут написано, потому что это просто полезно.</p>

<p>Для начала нужно понять, что такое foreground service (сервис переднего плана). Сервис — это такой компонент приложения, который не имеет UI и используется для длительных работ. К примеру, нужно вам скачать файл — имеет смысл переложить эту задачу на сервис.
Сервисы могут быть фоновые (background) и переднего плана. О существовании фоновых пользователь не знает и не видит их. А вот сервисы переднего плана обязаны создать видимое пользователю уведомление. Если его не создать, Андроид сразу убьёт приложение.
Типичный пример — музыкальный плеер. Они не просто так уведомления вешают, хоть это и удобно. Если не повесят — они не смогут работать в фоне.</p>

<p>Современный Андроид работает так, что если пользователь чего-то не видит и это что-то не системное или не имеет особенных, очень сложно получаемых прав, то это что-то будет убито.</p>
<ul><li><code>android:name=&#34;one.me.calls.impl.service.CallServiceImpl&#34;</code>. Это путь к самому сервису звонка. Иначе Android не поймёт, где его искать</li>
<li><code>android:exported=&#34;false&#34;</code>. Сервис недоступен внешним приложениям. Его запустить может только сам Макс или Андроид. Это правильный флаг безопасности, так и надо делать</li>
<li><code>android:foregroundServiceType=&#34;microphone|camera|mediaProjection|mediaPlayback&#34;</code>. Начиная с Android 14, приложение обязано уведомить, для чего вообще используется сервис переднего плана. И вот вы, читая эту строку в Манифесте, тоже понимаете, для чего сервис используется. Звонилке он нужен для того, чтобы она имела доступ к микрофону, к камере, могла транслировать экран телефона и воспроизводить звук</li></ul>

<p>Резюмируя: абсолютно корректное объявление необходимого сервиса переднего плана</p>

<h4 id="подозрительный-сервис-медиа-проекции-может-записывать-экран">[Подозрительный] Сервис медиа-проекции (может записывать экран)</h4>

<pre><code>        &lt;service
            android:name=&#34;ru.ok.tamtam.android.calls.MediaProjectionService&#34;
            android:exported=&#34;false&#34;
            android:foregroundServiceType=&#34;mediaProjection&#34;/&gt;
</code></pre>

<p>Хотя фича трансляции экрана есть и даже используется в <code>CallServiceImpl</code>, я не нашёл в коде приложения вызова этого сервиса. Больше всего это похоже на хвост от ТамТам, который будет удалён в будущих версиях. Сейчас это просто мёртвый код, никем не вызываемый. Т. к. <code>android:exported=&#34;false&#34;</code>, то можно быть уверенным, что и сторонние приложения этот код не смогут вызвать.</p>

<p>Резюмируя: скорее всего мёртвый код, который ещё не удалили. Актуальный код находится в <code>one.me.calls.impl.service.CallServiceImpl</code>.</p>

<h4 id="опасный-компонент-linkinterceptoractivity-с-возможностью-перехвата-deeplinks">[Опасный компонент] <code>LinkInterceptorActivity</code> с возможностью перехвата deeplinks</h4>

<blockquote><p><code>android:exported=&#34;true&#34;</code> (Критическая уязвимость). Эта активность может быть запущена извне — другим приложением на устройстве или даже из браузера по специальной ссылке.</p></blockquote>

<p>Нет, это не уязвимость, а нормальное поведение для глубоких ссылок/дип линков (deeplink). Они для этого и созданы.</p>

<blockquote><p><code>android:excludeFromRecents=&#34;true&#34;</code> (Тактика скрытности). После того как пользователь завершит работу с этой активностью, она не появится в списке последних приложений (который вызывается кнопкой “Недавние”).</p></blockquote>

<p>Это рекомендуемое поведение для глубоких ссылок.</p>

<p>Давайте разберёмся, что такое глубокие ссылки. Странное название, правда? Вот простая ситуация: вам нужно объяснить человеку, как найти в <code>RuStore</code> какой-нибудь <code>MAX</code>. Нужно объяснять, как запустить РуСтор, что написать в поиске, какое из найденных приложений выбрать. А можно просто прислать ссылку <code>market://details?id=ru.oneme.app</code> и Андроид спросит, каким Магазином её открыть. Выбери хоть Google Play, хоть RuStore — откроется сразу правильный экран.
Глубокие ссылки позволяют открыть сразу нужный экран приложения, в какой бы жопе этого приложения он не был. Можно даже сделать экраны, которые кроме как по глубоким ссылкам недоступны.</p>

<p>Теперь понятно, почему <code>android:exported=&#34;true&#34;</code>? Иначе же внешние приложение не сможет экран открыть. И очевидно, что в списке Недавних экраны сотой глубины вложенности не нужны. Потому вполне разумно их исключить.</p>

<p>Вот как на самом деле выглядит код, кусочек которого предоставил автор:</p>

<pre><code>        &lt;activity
            android:theme=&#34;@style/OneMe.Theme.Transparent&#34;
            android:label=&#34;&#34;
            android:name=&#34;one.me.android.deeplink.LinkInterceptorActivity&#34;
            android:exported=&#34;true&#34;
            android:excludeFromRecents=&#34;true&#34;
            android:launchMode=&#34;singleTop&#34;
            android:configChanges=&#34;orientation&#34;
            android:windowSoftInputMode=&#34;adjustResize|stateHidden&#34;&gt;
            &lt;intent-filter
                android:label=&#34;max&#34;
                android:autoVerify=&#34;true&#34;&gt;
                &lt;action android:name=&#34;android.intent.action.VIEW&#34;/&gt;
                &lt;category android:name=&#34;android.intent.category.DEFAULT&#34;/&gt;
                &lt;category android:name=&#34;android.intent.category.BROWSABLE&#34;/&gt;
                &lt;data android:pathPattern=&#34;/..*&#34;/&gt;
                &lt;data android:scheme=&#34;http&#34;/&gt;
                &lt;data android:scheme=&#34;@string/web_scheme&#34;/&gt;
                &lt;data android:host=&#34;@string/app_host&#34;/&gt;
            &lt;/intent-filter&gt;
            &lt;intent-filter android:label=&#34;max&#34;&gt;
                &lt;action android:name=&#34;android.intent.action.VIEW&#34;/&gt;
                &lt;category android:name=&#34;android.intent.category.DEFAULT&#34;/&gt;
                &lt;category android:name=&#34;android.intent.category.BROWSABLE&#34;/&gt;
                &lt;data android:scheme=&#34;@string/app_scheme&#34;/&gt;
                &lt;data android:host=&#34;@string/app_host&#34;/&gt;
            &lt;/intent-filter&gt;
            &lt;meta-data
                android:name=&#34;android.app.shortcuts&#34;
                android:resource=&#34;@xml/shortcuts&#34;/&gt;
        &lt;/activity&gt;
</code></pre>

<p>Не буду разбирать построчно, просто соберу в итог. «Андроид, закрепи за мной ссылку <code>http[s]://max.ru/*</code>. Если кто-то попытается эту ссылку открыть, то я её обработаю вот этим экраном».</p>

<p>Разумеется, в Google не совсем дураки сидят и просто так закрепить за собой ссылку ты не можешь. Ты должен по указанному адресу положить специальный файл (<code>https://max.ru/.well-known/assetlinks.json</code>; желающие могут убедиться, что он там лежит и даже увидят уши дев сборки), который позволит удостоверить, что ты действительно имеешь право на перехват этих ссылок.</p>

<p>Например, если вы установите альтернативный YouTube клиент, вам вручную нужно будет назначать ссылки для перехвата. Они объявлены в Манифесте, но Андроид их не включит, вы должны сделать это руками.</p>

<p>В общем, в этом примере Андроид передаст Максу ссылки только на его собственный сайт.</p>

<p>Резюмируя: нормальное поведение для множества приложений.</p>

<h4 id="опасный-компонент-callnotifierfixactivity-с-возможностью-показа-на-экране-блокировки">[Опасный компонент] <code>CallNotifierFixActivity</code> с возможностью показа на экране блокировки</h4>

<p>Кажется, уже по названию можно догадаться, что это такое. Вот код:</p>

<pre><code>        &lt;activity
            android:theme=&#34;@style/CallNotifierFixActivityTheme&#34;
            android:name=&#34;one.me.android.calls.CallNotifierFixActivity&#34;
            android:showOnLockScreen=&#34;true&#34;
            android:turnScreenOn=&#34;true&#34;/&gt;
</code></pre>

<p>Использовалось когда-то для показа уведомления о звонке. Код немного изменят, т.к. <code>showOnLockScreen</code> <a href="https://developer.android.com/reference/android/R.attr#showOnLockScreen" rel="nofollow">объявлен устаревшим</a> ещё в API 23. Напомню, что Макс не установится на API ниже 29.</p>

<p>Резюмируя: скорее всего устаревший костыль.</p>

<h4 id="com-google-android-gms-permission-ad-id-доступ-к-рекламному-id">com.google.android.gms.permission.AD_ID – доступ к рекламному ID</h4>

<p>Не могу сказать откуда я это знаю, но некоторые компании используют ID вовсе не для рекламирования, а просто для удобного и, важно, анонимного подсчёта пользователей. Количество уникальных ID примерно равно количеству пользователей, при этом не приходится обращаться к реальным учёткам. Даже если база утечёт, это будут просто мусорные строки.</p>

<p>Резюмируя: иногда что-то может быть не тем, чем кажется</p>

<h4 id="отключено-резервное-копирование-allowbackup-false">Отключено резервное копирование (<code>allowBackup=&#34;false&#34;</code>)</h4>

<blockquote><p>Обычные приложения разрешают бэкап, чтобы пользователь мог восстановить данные. Вредоносное приложение отключает эту функцию, чтобы усложнить исследование своего поведения и извлечение украденных данных при помощи инструментов анализа</p></blockquote>

<p>Тут прям всё не так.</p>
<ol><li>Очень многие приложения, практически все, где есть учётные записи, запрещают резервное копирование</li>
<li>Разработчики несколько отстали от современности. Они выключили резервное копирование в облако (читай – в Google Drive). Но на переезд с одного устройства на другое эта настройка не влияет для всех современных устройств. То есть если вы возьмёте Pixel 8 и переедете по кабелю на Pixel 9, то приложение переедет. Вполне возможно переедет поломанным и нужно будет вручную чистить ему данные</li>
<li>Вредоносные приложения отключают, потому что зачем оно им. На их анализ это вообще никак не влияет</li></ol>

<p>Резюмируя: нормальное поведение, когда в приложении есть учётные записи, хотя я сам такое и не люблю. Но правильная реализация требует прям заморочиться</p>

<h4 id="включен-нативный-код-extractnativelibs-false">Включен нативный код (<code>extractNativeLibs=&#34;false&#34;</code>)</h4>

<blockquote><p>Указывает системе не распаковывать нативные библиотеки (.so файлы) из APK. Это может использоваться для затруднения статического анализа кода антивирусами и исследователями, так как часть логики спрятана в скомпилированных бинарниках.</p></blockquote>

<p>Палю крутой способ достать <code>.so</code> файлы — архиватор, работающий с <code>zip</code> архивами.</p>

<p>На самом деле это рекомендуемое поведение. Оно говорит Андроиду, чтобы тот не извлекал нативные библиотеки, а просто читал из прямо из apk файла. Кроме того, этот флаг используется системой сборки <code>gradle</code>. Он говорит гредлу, чтобы тот не сжимал нативные либы, т.к. при сжатии прямого чтения из apk не получится. В итоге имеем бОльший размер apk, но бОльшую скорость чтения натива во время работы.</p>

<p>Резюмируя: обычное поведение.</p>

<h4 id="download-without-notification-скрытые-загрузки"><code>DOWNLOAD_WITHOUT_NOTIFICATION</code> – скрытые загрузки</h4>

<p>На самом деле никогда не работало так, как вы того ожидаете. Даже в древние времена. А сегодня он вообще не работает. Как результат — в текущей версии Макса этого разрешения нет.</p>

<p>Резюмируя: не рабочий хвост старого приложения. Уже удалён.</p>

<h4 id="foreground-service-data-sync-фоновая-синхронизация-данных"><code>FOREGROUND_SERVICE_DATA_SYNC</code> – фоновая синхронизация данных</h4>

<blockquote><p>Позволяет запустить foreground-сервис для “синхронизации данных”. Это механизм для длительной фоновой работы под видом полезной деятельности, чтобы постоянно собирать данные</p></blockquote>

<p>Вон чё. Вообще это разрешение, которые разработчики ОБЯЗАНЫ объявить, если используют сервис переднего плана с типом <code>dataSync</code>. Таких сервисов у них два: <code>one.me.android.media.service.OneMeDownloadService</code>, отвечающий за загрузку и <code>androidx.work.impl.foreground.SystemForegroundService</code>, который вообще не их, а пришедший к ним из гугловой библиотеки <a href="https://developer.android.com/jetpack/androidx/releases/work" rel="nofollow">WorkManager</a>, которую используют вообще все, кто использует фоновые задачи.</p>

<p>Резюмируя: вполне обычная ситуация</p>

<h4 id="автозапуск-receiver-для-автозапуска-при-включении-устройства">Автозапуск: Receiver для автозапуска при включении устройства</h4>

<p>Пусть вас не смущает, что вы уже видели это выше. Выше было разрешение на получение этого бродкаста, а тут уже сам получатель (ресивер). И автор переживает, что у него три типа:</p>

<blockquote><p>BootCompletedReceiver с тремя разными действиями (BOOT<em>COMPLETED, QUICKBOOT</em>POWERON) — это гарантирует, что запуск выполниться автоматически при любой возможности сразу после включения телефона, даже до его разблокировки.</p></blockquote>

<p><img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/bb9/a9c/e7f/bb9a9ce7f54696646c3f3029ef83b63b.png" alt="Рис. 29"></p>

<p>Но на самом деле всё просто. Работает реально только первый тип. Второй давно никто не может получить (можно сказать, что его не существует), а третий так вообще только БЫЛ когда-то у HTC. То есть второй и третий — это хвосты ТамТама.</p>

<p>Вот, кстати, код целиком:</p>

<pre><code>        &lt;receiver
            android:name=&#34;ru.ok.tamtam.android.services.BootCompletedReceiver&#34;
            android:exported=&#34;true&#34;&gt;
            &lt;intent-filter&gt;
                &lt;action android:name=&#34;android.intent.action.BOOT_COMPLETED&#34;/&gt;
                &lt;action android:name=&#34;android.intent.action.QUICKBOOT_POWERON&#34;/&gt;
                &lt;action android:name=&#34;com.htc.intent.action.QUICKBOOT_POWERON&#34;/&gt;
            &lt;/intent-filter&gt;
        &lt;/receiver&gt;
</code></pre>

<p>Предлагаю VK пересмотреть <code>android:exported=&#34;true&#34;</code>. Экшен <code>android.intent.action.BOOT_COMPLETED</code> кроме системы никто послать не может, а два других уже давно сдохли. Думаю, имеет смысл выставить в <code>false</code> этот параметр.</p>

<p>Резюмируя: частично устаревший код. Будет исправлен в будущем.</p>

<h3 id="заключение-исследователя">Заключение исследователя</h3>

<blockquote><p>Проведенный технический анализ мессенджера выявил тревожный дисбаланс между заявленным функционалом и запрашиваемым уровнем доступа к устройству и данным пользователя</p></blockquote>

<p>Не выявил</p>

<blockquote><p>Однако нашлось и множество «спорных» возможностей, которые выходят далеко за рамки обычных возможностей мессенджера</p></blockquote>

<p>Не нашлось</p>

<blockquote><p>Автозапуск при загрузке, скрытые загрузки, отключение резервного копирования и сложность анализа кода (extractNativeLibs=“false”) — это приемы, которые чаще ассоциируются с вредоносным ПО, стремящимся закрепиться в системе и скрыть свою деятельность.</p></blockquote>

<p>Нет</p>

<blockquote><p>В итоге, перед нами не просто мессенджер, а многофункциональный комплекс с широчайшими полномочиями.</p></blockquote>

<p>Перед нами типичный современный мессенджер с очень плохим GUI, не соответствующим Android.</p>

<blockquote><p>Пользователь, устанавливая это приложение, по сути, добровольно предоставляет ему ключи от всей своей цифровой жизни: от переписки и звонков до местоположения, паролей и возможности наблюдать через камеру</p></blockquote>

<p>Опустим пафос в начале и остановимся на “наблюдать через камеру”. Важно понимать, что камера и микрофон НЕДОСТУПНЫ приложениям в фоне. Скрыто их запускать нельзя. Вы обязаны хотя бы держать сервис переднего плана, который обязан создавать уведомление. А ещё Android нарисует индикатор использования камеры или микрофона.</p>

<h3 id="мои-предложения-разработчикам-max">Мои предложения разработчикам MAX</h3>
<ul><li>видно, что вы чистите устаревший код. Но я считаю, что именно на чистку стоит забить болт. Не, если чистка происходит на халяву по человеко-часам, то да, можно. Но специально выделять на это ресурсы не нужно, важнее усилить безопасность продукта</li>
<li>запретите обработку исполняемых файлов. Не нужно создавать интент для apk и запускать его. Если это файл опасного типа для данной платформы, то пусть файл будет только сохраняться. При этом предупреждение оставить нужно, за него спасибо. Я считаю это критически важным только потому что мы имеем дело с национальным средством связи. Оно должно быть заточено на безопасность пользователей в первую очередь. Даже в ущерб некоторым привычкам. Особенно если эти привычки вредные</li>
<li>ваш безопасный режим должен быть включен по умолчанию. Причина всё та же — вы не рядовой мессенджер и к вам другие требования</li>
<li>вам нужно расширить партнёрство с ЛК. Сейчас вы уже используете <code>WhoCalls</code>. Договоритесь использовать ещё и их сервис репутации. Разумеется, проверки делайте только через запрос хеша, у них есть такой режим. Все <code>http[s]://*</code> тоже нужно проверять через этот сервис. Можете не переживать за то, что параметры ссылки передаются — у ЛК ссылки очищаются от параметров. Я сам это тестировал когда-то :) Кстати, у ЛК ещё и антиспам есть, если вы понимаете к чему я</li></ul>
]]></content:encoded>
      <guid>https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie-1pl7</guid>
      <pubDate>Sat, 27 Sep 2025 17:32:48 +0000</pubDate>
    </item>
    <item>
      <title>Средство связи MAX: моё мнение</title>
      <link>https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie-33m8</link>
      <description>&lt;![CDATA[Часть 2: про шпионов и людей&#xA;&#xA;Первая часть, которая, к счастью, не вызвала особенных споров, касалась в основном того удобства, которое приносит национальное средство коммуникации. Кажется, в целом, многие или понимают эти удобства, или хотя бы не испытывают проблем с ними.&#xA;&#xA;Но претензии всё равно были и я попытаюсь здесь их разобрать. И снова напомню, что пока я говорю об абстрактном «национальном мессенджере», а не о чём-то конкретном.&#xA;!--more--&#xA;Глобально я увидел следующие группы претензий:&#xA;&#xA;Система вообще не нужна, так как есть TG и WA&#xA;Не решена основная проблема, о которой говорили: мошенничество&#xA;Государство запретит всё, кроме национального средства общения и будет следить за всем, происходящим в национальном средстве общения&#xA;Мылору не может сделать ничего нормально. Всё, чего оно касается, становится чем-то мерзким&#xA;&#xA;Если я что-то пропустил, то добавьте в комментариях в вашем блоге в федивёрсе, упомянув меня (@umnik@x.myachin.xyz), или в комментариях в ТГ канале.&#xA;&#xA;Система вообще не нужна, так как есть TG и WA&#xA;&#xA;Это удобные средства общения и глупо с этим спорить. Когда-то VK заменил людям весь Интернет, потому что в нём было всё. Сейчас для подобных людей TG заменил весь Интернет. Есть каналы под любые запросы, есть чаты, есть звонки и видосы. Даже файловое хранилище есть.&#xA;&#xA;WA тоже неплох. Чат с одноклассниками у меня именно в WA и многих из них в TG просто нет. Ну не нравится он им, неудобный, непонятный. Вообще, как я заметил, есть много людей, которых TG раздражает как раз тем, что в нём есть всё и сразу, а это не нужно. Много всего — это непонятно.&#xA;&#xA;В отличие от TG, WA реализует оконечное шифрование при общении. Другими словами, ваша переписка недоступна Meta. В то время как в TG всю переписку целиком можно продавать любому, кто заплатит нужное количество денег. А чтобы люди точно держали вообще всё, что возможно, в том виде, которое удобно для обработки и продажи, мы засунем секретные чаты в такую жопу и сделаем их такими неудобными, чтобы ими не пользовались.&#xA;&#xA;То есть WA, в целом, выбор и неплохой. Ровно до тех пор, пока они  на самом деле реализуют всё то, что заявили. Однако, по какой-то непонятной причине:&#xA;&#xA;нет исходного кода клиента&#xA;приложение обфусцировано не стандартным обфускатором, который есть у всех, а чем-то более хардкорным&#xA;то и дело именно через него «заходят» в телефоны жертв службы «цивилизованных» стран&#xA;только это приложение (из популярных) использовало уязвимость CVE-2022-20551, обнаруженное нашей командой. По интересному совпадению, Google не исправлял проблему несколько месяцев, а потом резко поднял ей приоритет и срочно поправил&#xA;   обещанных денег нам так и не заплатили. Оплату они провели через SAP, который, разумеется, с Россией не работает. А все последующие мои попытки связаться с Google автоматически закрывались с комментарием «вопрос закрыт»&#xA;Meta никогда не славилась хоть каким-то переживанием о пользователях. Цукенберг настолько привык, что к ним в офис приходят ФБР и другие, что спокойно рассказал об этом на подкасте (не помню чьём), когда речь зашла о ноутбуке Хантера Байдена. Нет никаких «по решению суда» или прочей чепухи из кино. Просто ФБР пришли в кабинет к нужным людям (даже не к самому Цукеру) и сказали, что и как надо делать&#xA;   И Цукер рассказал это только потому что был период, когда было модно показывать дружбу с Трампом и рассказывать, как плохо вёл себя режим Байдена. Когда ветер поменяет направление, этот нос развернётся и расскажет нам о режиме Трампа&#xA;&#xA;Да, всё это «косвенные улики», так сказать. Это не говорит о том, что в WA сидят товарищи капралы, которые сделают всё, что нужно для того, чтобы только правильным странам было комфортно, а неправильные жили под строгим контролем Пяти глаз (ибо, конечно, неразумные). Всё это случайные совпадения.&#xA;&#xA;Да только даже если мы примем, что всё это просто совпадения, что это вовсе неправда, что Meta живёт исключительно в рамках закона лучшей в мире страны. Она всё равно подчиняется США и просто обязана делать всё, что скажут специальные люди со специальными должностями. Уж с этим, думаю, спорить никто не будет.&#xA;&#xA;Про то, как некого Павла тоталитарное государство просто взяло в плен (вроде так принято писать в «независимых СМИ», когда говорят о «неправильных странах»?) и указало ему, как надо жить, доверять TG тоже опасненько.&#xA;&#xA;Это приводит нас к тому, что средство коммуникации будет полностью зависеть от тех, кто уже несколько лет мешает жить лично нам.&#xA;&#xA;Давайте возьмём в пример SWIFT. Это частная организация, не государственная. При чём она даже не из США, а из Европы (кажется, Бельгия). Однако:&#xA;&#xA;частной компании указывается, с кем работать, а с кем - нет&#xA;ЦРУ, ФБР имеют прямой доступ ко всем финансовым операциям, проходящим в SWIFT. Весь мир находится под пяткой этих организаций уже более 20 лет (это публично известных 20 лет, а сколько было на самом деле?)&#xA;США напрямую управляют деньгами внутри SWIFT. Что интересно, не смотря на утверждение SWIFT, что операции ЕС не отправляются США, те всё равно заблокировали внутреннюю операцию между странами ЕС и просто забрали себе все деньги. А чего бы и не забрать?&#xA;&#xA;Следовательно, нам нужна независимая система. И она есть внутри страны. Потому карточки продолжили работать, а банки продолжили проводить операции внутри страны. Банковский сектор не рухнул, как того ожидали. Но вот выезд за рубеж нам пытаются ограничить. Всем нам, всем и каждому. И есть система МИР, которая пытается сделать нашу жизнь проще. За что её те же США пытаются блокировать, угрожая санкциями всем странам, куда она пытается войти.&#xA;&#xA;Вообще, НСПК (национальная система платёжных карт) — это отличный пример, для чего нужны национальные сервисы. Они как раз и нужны для независимости, для устойчивости, для нашей нормальной жизни. Если кто не знает, что такое НСПК, то вот описание с официального сайта:&#xA;&#xA;  НСПК обеспечивает обработку операций по картам «Мир» и картам международных платежных систем, развитие продуктов и сервисов ПС «Мир», совместно с Банком России развивает Систему быстрых платежей, а также обеспечивает удобные и безопасные платежи по универсальному QR-коду и с помощью биоэквайринга&#xA;&#xA;Мы так привыкли к СБП, нам настолько обыденно то, что всё просто работает, что многие из нас даже не придают этому значения. А ведь аналогов НСПК в мире не так, чтобы много. Буквально в десятке стран вообще есть хоть какие-то аналоги, а полных, которые бы обеспечивали весь набор возможностей НСПК, практически нет. Кажется, только RuPay (Индия) полностью соответствует всем возможностям НСПК. Потому что тот же UnionPay (Китай) не имеет аналога СБП. Но проверьте за мной, возможно мои данные устарели.&#xA;&#xA;Исходя из этого примера (повторю, взят только SWIFT, потому что у США были большие надежды на него — не зря они грозили этим несколько месяцев, но не применяли), я надеюсь, каждый согласен, что любое государство, если желает остаться независимым и продолжать функционировать без каких-то заметных сбоев, обязано обеспечить себе независимость во всех важных сферах. И системы быстрой доставки информации к ним тоже относятся.&#xA;&#xA;Нам, как и абсолютно любой другой независимой стране, нужны свои DNS серверы, устойчивость к вдвиганию кривых маршрутов (если кто забыл, как Google положил Японию), свои центры сертификации и всё-всё-всё, вплоть до роутеров (железо) и браузеров (ПО).&#xA;Всё это должно быть своё, на сколько это вообще возможно; как в смысле физического расположения, так и в смысле способности производства.&#xA;&#xA;Отдельно поясню. Не исключительно своё, потому что целиком и полностью себя обеспечить вообще всем не может никто, даже Китай, включая Тайвань. Нам, и всем, нужны сильные партнёры, которые не побоятся класть болт на главных полицаев планеты. Отсюда и существует BRICS. Но и не значит, что нужно полагаться только на партнёров.&#xA;&#xA;Балансируя между доступностью и независимостью, всё же приходится часто делать выбор в пользу своего, но более дорогого. Собственно, лично я и лично для себя не считаю проблемой платить больше за то, что произведено в России, если это что-то имеет высокое качество и закрывает мои потребности. Я вчера купил розеток и выключателей на 60 тыс рублей, но российских (каждая от двух до ПЯТИ!!! раз дороже китайских).&#xA;&#xA;Это понимают и в США, из-за чего прикладывают усилия для переноса производства всего, что возможно, внутрь страны. Пусть это стоит дороже в итоге, но даёт независимость, а это выигрыш в долгосроке.&#xA;&#xA;Не знаю, смог ли донести мысль в развёрнутом виде. Вот она же в кратком: любая важная и, тем более, критическая система, от которой может зависеть работа государства даже в самых дальних деревнях, должна работать устойчиво даже в том случае, если против неё целенаправленно идёт атака любого вида. Ни чтобы ни аппаратных жучков не было, ни чтобы рубильник не дёрнули.&#xA;&#xA;Средства связи являются столь же критическими системами, сколь ими являются производство обуви. Это такое, о чём особенно не задумываются, потому что они просто есть и всё и вообще их полно. Но вот закрой рынки и окажется невероятное — кто-то жить не может без Найков и посрать не сможет без мемов в ленте.&#xA;&#xA;Но давайте напишу заранее, хоть об этом скажу и дальше: государственные системы обязаны подчиняться требованиям устойчивости и независимости, но эти требования не распространяются на простых людей. Эта мысль будет повторена позже, а сейчас она написана, чтобы немного остудить жар у тех, кто уже хочет высказать мне, что ему-то оно нафиг не упёрлось.&#xA;&#xA;В общем, с этим я почти закончил. Дополнительно напомню, что всё это до сих пор не понимают даже многие чиновники и огромная масса исполнителей. Государство (ранее я указывал, что под «государство» понимаются абсолютно все, хоть как-то связанные с госухой люди, организации или действия) слишком разношёрстное и в нём полно и тех, кто понимает проблему, и тех, кто не понимает и даже тех, кто просто дурачок или вообще саботажник. Давайте вспомним, как МВД использовали WA для обсуждение перемещения президента лично и других, помельче. И это в то самое время, когда США считают вообще нормальным просто прослушивать Меркель и других своих «партнёров».&#xA;Как там говорил Киссенджер? «Быть врагом США опасно, а другом — смертельно», — так кажется?&#xA;&#xA;Не решена основная проблема, о которой говорили: мошенничество&#xA;&#xA;Одно из важных отличий национального средства коммуникаций от прочих — он точно будет подчиняться законам России. Как подчиняется WA законам США или TG законам Франции (сразу после того как специальные службы через специальную шлюху привели Пашку в обезьянник) и законам каких-то арабских шейхов, которые Пашку танцуют.&#xA;Это значит, что вход, переписку, звонки — всё можно обрабатывать. Жесть про «утром в Максе = вечером в тюрьме» оставлю на потом, т. к. тут тема другая.&#xA;&#xA;Уже давно мошенники сначала из тюрем, а позже из Украины разводили наших граждан по телефону. Сейчас этот подход почти угас. Нет, он ещё имеется, но вообще не тех объёмов, что раньше. Потому что звонки и SMS государство может контролировать. Оно может надавать операторам связи по жопе и обязать отсекать мошенников. Параллельно начали регулировать канал, который особо раньше не трогали — SIP. Сегодня вам скорее позвонит банк с офигенными тарифами по кредиту, которые больше похоже на микрозайм, чем мошенник.&#xA;&#xA;Потому что:&#xA;&#xA;SIP попал под новые правила. Вы можете прочитать сообщения дурачков в Интернете о его блокировании, но на то они и дурачки в Интернете. Блокировки нет. Просто теперь вы, как оператор, предоставляющий услугу, обязаны оторвать жопу от стула. А как пользователь — просто продолжаете работать, вас это не касается&#xA;SIM карты начали, наконец, действительно проверять. Раньше они были по паспорту лишь на бумаге, но была куча вариантов приобрести их и без паспорта. Сейчас эти лазейки закрывают. Параллельно блокируют те SIM, владение которыми не доказано. К середине августа 2025 года было заблокировано 15 миллионов симок. А ещё теперь вы видите свои SIM в Госуслугах. Даже если это корпоративные SIM&#xA;При перевыпуске SIM банки обязали блокировать операции на некоторое время (давно) и сообщать в приложении об этом&#xA;Банки обязали проверять операции снятия в банкоматах на признаки, которые можно трактовать как действия, совершённые под воздействием мошенников: https://cbr.ru/Crosscut/LawActs/File/10070 И человек может вернуть деньги, если банк проявил халатность&#xA;Банки также обязали (ещё в прошлом году) возвращать деньги, похищенные мошенниками, если перевод попал под указанные ЦБ условия&#xA;тонна других изменений:&#xA;   пометки звонков для бизнеса и ИП. Юрлица и ИП будут помечаться самими операторами связи и будут написаны на экране на любом современном телефоне вне зависимости от приложения звонка и производителя устройства&#xA;   пометки звонков с иностранных номеров&#xA;   запреты передачи SIM (но родственникам - можно) и учётных записей&#xA;   ограничения на количество SIM карт — не более 20 активных. Этого гарантировано хватает нормальному человеку и мало для спамеров и мошенников, ведь как только в МВД придёт заявка о мошенничестве, они помечают этот номер, как возможно мошеннический и теперь любые операции на нём блокируются, а переводы на него невозможны (см. ниже статистику)&#xA;   добавление доверенных лиц для совершения банковских операций. Если вы переживаете, что кто-то из ваших родственников, или даже вы сами, можете попасть на уловки мошенников, можно добавить доверенные лица, с которыми банк будет связываться для подтверждения некоторых операций&#xA;   запрет на массовые рассылки и звонки, кроме явного согласия. И его можно будет отзывать через ГУ&#xA;   самозапрет на регистрацию SIM, чтобы на вас не смогли сделать дубликаты (снять можно в МФЦ)&#xA;   запрет на доставку SMS от ГУ во время звонка. То есть бесполезно говорить «вам сейчас придёт SMS, продиктуйте код», потому что оно не придёт&#xA;   запрет на активацию телефонов с IMEI из списка запрещённых. Давно есть во многих странах мира и, наконец, появляется у нас&#xA;   ограничения на количество банковских карт, что важно для мошенников, которые пытаются раскидывать переводы по разным счетам&#xA;   увеличение сроков государственной регистрации недвижимости, если есть признаки мошенничества. Вспоминаем две недавних истории с мошенническими сделками по недвиге и миллион историй «той» России с её «чёрными риэлторами»&#xA;   в разработке информационная система «Антифрод», которая создаётся специально для борьбы с мошенничеством&#xA;&#xA;К слову, НСПК также предоставила бесплатный сервис похожей направленности: https://www.nspk.ru/press-center/details/a1c615f2-0bfb-449a-b47d-547497f05e78&#xA;&#xA;По какой-то причине мы не находим новостей, что тысячи операций мошенников были отклонены. Возможно потому что владельцам СМИ не интересно сообщать о том, что что-то работает хорошо и правильно, зато интересно написать о единичных провалах. Чтобы вы понимали, по статистике Службы по защите прав потребителей и обеспечению доступности финансовых услуг Банка России, банки сейчас блокируют 99% новых мошеннических операций и 100% тех, которые уже засветились ранее и попали в базу МВД.&#xA;&#xA;Другими словами, с мошенниками борьба идёт очень серьёзная и не первый год.&#xA;&#xA;Национальный сервис связи также обязан будет подчиняться всем требованиям государства, чтобы бороться с мошенниками. В отличие от сторонних, которые кладут, возможно (не могу утверждать) осознано, болт на любые защиты пользователей от мошенников.&#xA;&#xA;Также национальный мессенджер обязан будет связываться с ГУ. Вообще это будет правильной практикой — либо не давать заходить без проверки по ГУ, либо как-то помечать значком недоверия тех, кто отказался от проверки по ГУ. Первый вариант лично меня бы полностью устроил, т. к. ДЛЯ СЕБЯ я не вижу причин общаться в национальном мессенджере с иностранцами. Но другим может быть удобен второй вариант.&#xA;Как бы то ни было, связь быть обязана. Национальный мессенджер обязан проверять учётные записи, потому что без этого не удастся быстро и просто вычислять мошенников или хотя бы идиотов-мулов.&#xA;&#xA;Таким образом, происходит давление на мошенников с разных сторон в масштабах, которых страна не знала раньше. Но правилам этим гарантировано будут подчиняться только_ национальные системы, к сожалению.&#xA;&#xA;Да, мошенничество не побеждено. Но сейчас мошенников прессуют, как никогда раньше. И, давайте быть честными с собой: полностью победить мошенничество будет невозможно. Но возможно будет хотя бы быстро принимать меры по подавлению урона от мошенничества.&#xA;&#xA;Желающие могут ознакомиться с видео, как люди смогли разоблачить мошенников в Индии и как на это всем наплевать: https://www.youtube.com/watch?v=xsLJZyih3Ac Хотя страдает от индийцев вторая по святости нация.&#xA;&#xA;Государство запретит всё, кроме национального средства общения&#xA;&#xA;И вот здесь всё просто. Я пишу о национальном средстве общения и почему он нужен. Но способы его внедрения не связаны с самой разработкой. То, что государство довольно часто работает с людьми очень плохо — это та реальность, в который мы всей планетой живём.&#xA;&#xA;Государство говорит, что вот эти помидоры вдруг, со вчера, обзавелись спидораковой палочкой и запрещает их — народ принимает, хоть и всё понимает. Государство говорит, что в этой детской больнице может быть (а может не быть) один плохой человек и бьёт туда ракетой, прям по детям — народ принимает (понимает? поддерживает?).&#xA;Если кому-то что-то не нравится — есть выборы. А до выборов и помидоры будут то плохие, то хорошие, и «сопутствующие потери» будут нормальной платой.&#xA;&#xA;Запретит ли государство другие средства общения? Да фиг знает. Даже если бы я сам работал «в государстве», я бы всё равно не знал ответа. Потому что это множество людей с кучей мнений.&#xA;Буду ли я страдать от запрета? Нет, я — не буду. Хочется ли мне, чтобы запретили? Конечно не хочется.&#xA;Но, думаю, до окончания СВО, а ещё какое-то время после, послаблений не будет.&#xA;&#xA;И здесь же:&#xA;&#xA;[Государство] будет следить за всем, происходящим в национальном средстве общения&#xA;&#xA;Да. Это просто факт. Потому если вы уходите от налогов, прикрываясь патентом, или не оформляете самозанятость, выпекая тортики, или вы просто дура Блиновская — не используйте национальное средство общения для, собственно, общения на все эти темы. Или ищите другие инструменты, или работайте законно. При этом первый подход будет приводить ко всё новым ограничениям и запретам, тогда как второй — нет.&#xA;&#xA;Это знаете дурачков, которые в ChatGPT всякую уголовную фигню спрашивали, а теперь узнали, что это будет учтено в суде, если что? Так и тут. Старайтесь не быть идиотом, это может помочь жить.&#xA;&#xA;Национальные/государственные инструменты работы используйте по прямому назначению и будет хорошо. Переводить по СБП деньги террористам нельзя, например. Следует это учитывать.&#xA;&#xA;Мылору не может сделать ничего нормально&#xA;&#xA;И вот тут я остановлюсь, потому что это уже третья часть. Я хочу вынести отдельно, потому что это единственный пункт, который связан не с абстрактным инструментом «национальный мессенджер», а с вполне конкретной реализацией «MAX»&#xA;&#xA;Всё ещё жду ваших вопросов и замечаний. Глядишь, будет и четвёртая часть. В конце-концов, может быть какой-то вопрос не раскрыл, или что-то не учёл, или ещё чего-то.&#xA;&#xA;А, да. Если вы придерживаетесь позиции «если в России — то это только чтобы посадить и убить», то сразу идите лесом. Это не конструктивно и это буду игнорировать. А ещё буду в голове проговаривать, какой вы дурачок.]]&gt;</description>
      <content:encoded><![CDATA[<h2 id="часть-2-про-шпионов-и-людей">Часть 2: про шпионов и людей</h2>

<p><a href="https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie" rel="nofollow">Первая часть</a>, которая, к счастью, не вызвала особенных споров, касалась в основном того удобства, которое приносит национальное средство коммуникации. Кажется, в целом, многие или понимают эти удобства, или хотя бы не испытывают проблем с ними.</p>

<p>Но претензии всё равно были и я попытаюсь здесь их разобрать. И снова напомню, что пока я говорю об абстрактном «национальном мессенджере», а не о чём-то конкретном.

Глобально я увидел следующие группы претензий:</p>
<ol><li>Система вообще не нужна, так как есть <code>TG</code> и <code>WA</code></li>
<li>Не решена основная проблема, о которой говорили: мошенничество</li>
<li>Государство запретит всё, кроме национального средства общения и будет следить за всем, происходящим в национальном средстве общения</li>
<li>Мылору не может сделать ничего нормально. Всё, чего оно касается, становится чем-то мерзким</li></ol>

<p>Если я что-то пропустил, то добавьте в комментариях в вашем блоге в федивёрсе, упомянув меня (<code><a href="https://text.tchncs.de/@/umnik@x.myachin.xyz" class="u-url mention" rel="nofollow">@<span>umnik@x.myachin.xyz</span></a></code>), или в комментариях в <a href="https://t.me/mydaybug" rel="nofollow">ТГ канале</a>.</p>

<h3 id="система-вообще-не-нужна-так-как-есть-tg-и-wa">Система вообще не нужна, так как есть <code>TG</code> и <code>WA</code></h3>

<p>Это удобные средства общения и глупо с этим спорить. Когда-то <code>VK</code> заменил людям весь Интернет, потому что в нём было всё. Сейчас для подобных людей <code>TG</code> заменил весь Интернет. Есть каналы под любые запросы, есть чаты, есть звонки и видосы. Даже файловое хранилище есть.</p>

<p><code>WA</code> тоже неплох. Чат с одноклассниками у меня именно в <code>WA</code> и многих из них в <code>TG</code> просто нет. Ну не нравится он им, неудобный, непонятный. Вообще, как я заметил, есть много людей, которых <code>TG</code> раздражает как раз тем, что в нём есть всё и сразу, а это не нужно. Много всего — это непонятно.</p>

<p>В отличие от <code>TG</code>, <code>WA</code> реализует оконечное шифрование при общении. Другими словами, ваша переписка недоступна <code>Meta</code>. В то время как в <code>TG</code> всю переписку целиком можно продавать любому, кто заплатит нужное количество денег. А чтобы люди точно держали вообще всё, что возможно, в том виде, которое удобно для обработки и продажи, мы засунем секретные чаты в такую жопу и сделаем их такими неудобными, чтобы ими не пользовались.</p>

<p>То есть <code>WA</code>, в целом, выбор и неплохой. Ровно до тех пор, пока они  на самом деле реализуют всё то, что заявили. Однако, по какой-то непонятной причине:</p>
<ul><li>нет исходного кода клиента</li>
<li>приложение обфусцировано не стандартным обфускатором, который есть у всех, а чем-то более хардкорным</li>
<li>то и дело именно через него «заходят» в телефоны жертв службы «цивилизованных» стран</li>
<li>только это приложение (из популярных) использовало уязвимость <a href="https://text.tchncs.de/umnik/obkhod-rezhima-mode_ignored-v-app-op" rel="nofollow">CVE-2022-20551</a>, обнаруженное нашей командой. По интересному совпадению, <code>Google</code> не исправлял проблему несколько месяцев, а потом резко поднял ей приоритет и срочно поправил
<ul><li>обещанных денег нам так и не заплатили. Оплату они провели через <code>SAP</code>, который, разумеется, с Россией не работает. А все последующие мои попытки связаться с <code>Google</code> автоматически закрывались с комментарием «вопрос закрыт»</li></ul></li>
<li><code>Meta</code> никогда не славилась хоть каким-то переживанием о пользователях. Цукенберг настолько привык, что к ним в офис приходят ФБР и другие, что спокойно рассказал об этом на подкасте (не помню чьём), когда речь зашла о ноутбуке Хантера Байдена. Нет никаких «по решению суда» или прочей чепухи из кино. Просто ФБР пришли в кабинет к нужным людям (даже не к самому Цукеру) и сказали, что и как надо делать
<ul><li>И Цукер рассказал это только потому что был период, когда было модно показывать дружбу с Трампом и рассказывать, как плохо вёл себя режим Байдена. Когда ветер поменяет направление, этот нос развернётся и расскажет нам о режиме Трампа</li></ul></li></ul>

<p>Да, всё это «косвенные улики», так сказать. Это не говорит о том, что в <code>WA</code> сидят товарищи капралы, которые сделают всё, что нужно для того, чтобы только правильным странам было комфортно, а неправильные жили под строгим контролем Пяти глаз (ибо, конечно, неразумные). Всё это случайные совпадения.</p>

<p>Да только даже если мы примем, что всё это просто совпадения, что это вовсе неправда, что <code>Meta</code> живёт исключительно в рамках закона лучшей в мире страны. Она всё равно подчиняется США и просто обязана делать всё, что скажут специальные люди со специальными должностями. Уж с этим, думаю, спорить никто не будет.</p>

<p>Про то, как некого Павла тоталитарное государство просто взяло в плен (вроде так принято писать в «независимых СМИ», когда говорят о «неправильных странах»?) и указало ему, как надо жить, доверять <code>TG</code> тоже опасненько.</p>

<p>Это приводит нас к тому, что средство коммуникации будет полностью зависеть от тех, кто уже несколько лет мешает жить лично нам.</p>

<p>Давайте возьмём в пример <code>SWIFT</code>. Это частная организация, не государственная. При чём она даже не из США, а из Европы (кажется, Бельгия). Однако:</p>
<ul><li>частной компании указывается, с кем работать, а с кем – нет</li>
<li>ЦРУ, ФБР имеют прямой доступ ко всем финансовым операциям, проходящим в <code>SWIFT</code>. Весь мир находится под пяткой этих организаций уже более 20 лет (это публично известных 20 лет, а сколько было на самом деле?)</li>
<li>США напрямую управляют деньгами внутри <code>SWIFT</code>. Что интересно, не смотря на утверждение <code>SWIFT</code>, что операции ЕС не отправляются США, те всё равно заблокировали внутреннюю операцию между странами ЕС и просто забрали себе все деньги. А чего бы и не забрать?</li></ul>

<p>Следовательно, нам нужна независимая система. И она есть внутри страны. Потому карточки продолжили работать, а банки продолжили проводить операции внутри страны. Банковский сектор не рухнул, как того ожидали. Но вот выезд за рубеж нам пытаются ограничить. Всем нам, всем и каждому. И есть система <code>МИР</code>, которая пытается сделать нашу жизнь проще. За что её те же США пытаются блокировать, угрожая санкциями всем странам, куда она пытается войти.</p>

<p>Вообще, <code>НСПК</code> (национальная система платёжных карт) — это отличный пример, для чего нужны национальные сервисы. Они как раз и нужны для независимости, для устойчивости, для нашей нормальной жизни. Если кто не знает, что такое <code>НСПК</code>, то вот описание с официального сайта:</p>

<blockquote><p>НСПК обеспечивает обработку операций по картам «Мир» и картам международных платежных систем, развитие продуктов и сервисов ПС «Мир», совместно с Банком России развивает Систему быстрых платежей, а также обеспечивает удобные и безопасные платежи по универсальному QR-коду и с помощью биоэквайринга</p></blockquote>

<p>Мы так привыкли к <code>СБП</code>, нам настолько обыденно то, что всё просто работает, что многие из нас даже не придают этому значения. А ведь аналогов <code>НСПК</code> в мире не так, чтобы много. Буквально в десятке стран вообще есть хоть какие-то аналоги, а полных, которые бы обеспечивали весь набор возможностей <code>НСПК</code>, практически нет. Кажется, только <code>RuPay</code> (Индия) полностью соответствует всем возможностям <code>НСПК</code>. Потому что тот же <code>UnionPay</code> (Китай) не имеет аналога <code>СБП</code>. Но проверьте за мной, возможно мои данные устарели.</p>

<p>Исходя из этого примера (повторю, взят только <code>SWIFT</code>, потому что у США были большие надежды на него — не зря они грозили этим несколько месяцев, но не применяли), я надеюсь, каждый согласен, что любое государство, если желает остаться независимым и продолжать функционировать без каких-то заметных сбоев, обязано обеспечить себе независимость во всех важных сферах. И системы быстрой доставки информации к ним тоже относятся.</p>

<p>Нам, как и абсолютно любой другой независимой стране, нужны свои <code>DNS</code> серверы, устойчивость к вдвиганию кривых маршрутов (если кто забыл, как <code>Google</code> положил Японию), свои центры сертификации и всё-всё-всё, вплоть до роутеров (железо) и браузеров (ПО).
Всё это должно быть своё, на сколько это вообще возможно; как в смысле физического расположения, так и в смысле способности производства.</p>

<p>Отдельно поясню. Не исключительно своё, потому что целиком и полностью себя обеспечить вообще всем не может никто, даже Китай, включая Тайвань. Нам, и всем, нужны сильные партнёры, которые не побоятся класть болт на главных полицаев планеты. Отсюда и существует <code>BRICS</code>. Но и не значит, что нужно полагаться только на партнёров.</p>

<p>Балансируя между доступностью и независимостью, всё же приходится часто делать выбор в пользу своего, но более дорогого. Собственно, лично я и лично для себя не считаю проблемой платить больше за то, что произведено в России, если это что-то имеет высокое качество и закрывает мои потребности. Я вчера купил розеток и выключателей на 60 тыс рублей, но <a href="https://systeme.ru/" rel="nofollow">российских</a> (каждая от двух до ПЯТИ!!! раз дороже <a href="https://www.ozon.ru/product/rozetka-iek-1-post-16a-250v-ip20-skrytyy-montazh-vintovoy-zazhim-evrovilka-erk14-k01-16-dm-713034143/" rel="nofollow">китайских</a>).</p>

<p>Это понимают и в США, из-за чего прикладывают усилия для переноса производства всего, что возможно, внутрь страны. Пусть это стоит дороже в итоге, но даёт независимость, а это выигрыш в долгосроке.</p>

<p>Не знаю, смог ли донести мысль в развёрнутом виде. Вот она же в кратком: <strong>любая важная и, тем более, критическая система, от которой может зависеть работа государства даже в самых дальних деревнях, должна работать устойчиво даже в том случае, если против неё целенаправленно идёт атака любого вида</strong>. Ни чтобы ни аппаратных жучков не было, ни чтобы рубильник не дёрнули.</p>

<p>Средства связи являются столь же критическими системами, сколь ими являются производство обуви. Это такое, о чём особенно не задумываются, потому что они просто есть и всё и вообще их полно. Но вот закрой рынки и окажется невероятное — кто-то жить не может без Найков и посрать не сможет без мемов в ленте.</p>

<p>Но давайте напишу заранее, хоть об этом скажу и дальше: <strong>государственные системы обязаны подчиняться требованиям устойчивости и независимости, но эти требования не распространяются на простых людей</strong>. Эта мысль будет повторена позже, а сейчас она написана, чтобы немного остудить жар у тех, кто уже хочет высказать мне, что ему-то оно нафиг не упёрлось.</p>

<p>В общем, с этим я почти закончил. Дополнительно напомню, что всё это до сих пор не понимают даже многие чиновники и огромная масса исполнителей. Государство (ранее я указывал, что под «государство» понимаются абсолютно все, хоть как-то связанные с госухой люди, организации или действия) слишком разношёрстное и в нём полно и тех, кто понимает проблему, и тех, кто не понимает и даже тех, кто просто дурачок или вообще саботажник. Давайте вспомним, как МВД использовали <code>WA</code> для обсуждение перемещения президента лично и других, помельче. И это в то самое время, когда США считают вообще нормальным просто прослушивать Меркель и других своих «партнёров».
Как там говорил Киссенджер? «Быть врагом США опасно, а другом — смертельно», — так кажется?</p>

<h3 id="не-решена-основная-проблема-о-которой-говорили-мошенничество">Не решена основная проблема, о которой говорили: мошенничество</h3>

<p>Одно из важных отличий национального средства коммуникаций от прочих — он точно будет подчиняться законам России. Как подчиняется <code>WA</code> законам США или <code>TG</code> законам Франции (сразу после того как специальные службы через специальную шлюху привели Пашку в обезьянник) и законам каких-то арабских шейхов, которые Пашку танцуют.
Это значит, что вход, переписку, звонки — всё можно обрабатывать. Жесть про «утром в Максе = вечером в тюрьме» оставлю на потом, т. к. тут тема другая.</p>

<p>Уже давно мошенники сначала из тюрем, а позже из Украины разводили наших граждан по телефону. Сейчас этот подход почти угас. Нет, он ещё имеется, но вообще не тех объёмов, что раньше. Потому что звонки и <code>SMS</code> государство может контролировать. Оно может надавать операторам связи по жопе и обязать отсекать мошенников. Параллельно начали регулировать канал, который особо раньше не трогали — <code>SIP</code>. Сегодня вам скорее позвонит банк с офигенными тарифами по кредиту, которые больше похоже на микрозайм, чем мошенник.</p>

<p>Потому что:</p>
<ul><li>SIP попал под новые правила. Вы можете прочитать сообщения дурачков в Интернете о его блокировании, но на то они и дурачки в Интернете. Блокировки нет. Просто теперь вы, как оператор, предоставляющий услугу, обязаны оторвать жопу от стула. А как пользователь — просто продолжаете работать, вас это не касается</li>
<li>SIM карты начали, наконец, действительно проверять. Раньше они были по паспорту лишь на бумаге, но была куча вариантов приобрести их и без паспорта. Сейчас эти лазейки закрывают. Параллельно блокируют те SIM, владение которыми не доказано. К середине августа 2025 года было заблокировано 15 миллионов симок. А ещё теперь вы видите свои SIM в Госуслугах. Даже если это корпоративные SIM</li>
<li>При перевыпуске SIM банки обязали блокировать операции на некоторое время (давно) и сообщать в приложении об этом</li>
<li>Банки обязали проверять операции снятия в банкоматах на признаки, которые можно трактовать как действия, совершённые под воздействием мошенников: <a href="https://cbr.ru/Crosscut/LawActs/File/10070" rel="nofollow">https://cbr.ru/Crosscut/LawActs/File/10070</a> И человек может вернуть деньги, если банк проявил халатность</li>
<li>Банки также обязали (ещё в прошлом году) возвращать деньги, похищенные мошенниками, если перевод попал под указанные <code>ЦБ</code> условия</li>
<li>тонна других изменений:
<ul><li>пометки звонков для бизнеса и ИП. Юрлица и ИП будут помечаться самими операторами связи и будут написаны на экране на любом современном телефоне вне зависимости от приложения звонка и производителя устройства</li>
<li>пометки звонков с иностранных номеров</li>
<li>запреты передачи SIM (но родственникам – можно) и учётных записей</li>
<li>ограничения на количество SIM карт — не более 20 активных. Этого гарантировано хватает нормальному человеку и мало для спамеров и мошенников, ведь как только в МВД придёт заявка о мошенничестве, они помечают этот номер, как возможно мошеннический и теперь любые операции на нём блокируются, а переводы на него невозможны (см. ниже статистику)</li>
<li>добавление доверенных лиц для совершения банковских операций. Если вы переживаете, что кто-то из ваших родственников, или даже вы сами, можете попасть на уловки мошенников, можно добавить доверенные лица, с которыми банк будет связываться для подтверждения некоторых операций</li>
<li>запрет на массовые рассылки и звонки, кроме явного согласия. И его можно будет отзывать через ГУ</li>
<li>самозапрет на регистрацию SIM, чтобы на вас не смогли сделать дубликаты (снять можно в МФЦ)</li>
<li>запрет на доставку SMS от ГУ во время звонка. То есть бесполезно говорить «вам сейчас придёт SMS, продиктуйте код», потому что оно не придёт</li>
<li>запрет на активацию телефонов с IMEI из списка запрещённых. Давно есть во многих странах мира и, наконец, появляется у нас</li>
<li>ограничения на количество банковских карт, что важно для мошенников, которые пытаются раскидывать переводы по разным счетам</li>
<li>увеличение сроков государственной регистрации недвижимости, если есть признаки мошенничества. Вспоминаем две недавних истории с мошенническими сделками по недвиге и миллион историй «той» России с её «чёрными риэлторами»</li>
<li>в разработке информационная система «Антифрод», которая создаётся специально для борьбы с мошенничеством</li></ul></li></ul>

<p>К слову, <code>НСПК</code> также предоставила бесплатный сервис похожей направленности: <a href="https://www.nspk.ru/press-center/details/a1c615f2-0bfb-449a-b47d-547497f05e78" rel="nofollow">https://www.nspk.ru/press-center/details/a1c615f2-0bfb-449a-b47d-547497f05e78</a></p>

<p>По какой-то причине мы не находим новостей, что тысячи операций мошенников были отклонены. Возможно потому что владельцам СМИ не интересно сообщать о том, что что-то работает хорошо и правильно, зато интересно написать о единичных провалах. Чтобы вы понимали, <a href="https://expert.ru/news/tsb-banki-blokiruyut-99-moshennicheskikh-operatsiy/" rel="nofollow">по статистике</a> Службы по защите прав потребителей и обеспечению доступности финансовых услуг Банка России, банки сейчас блокируют 99% новых мошеннических операций и 100% тех, которые уже засветились ранее и попали в базу МВД.</p>

<p>Другими словами, с мошенниками борьба идёт очень серьёзная и не первый год.</p>

<p>Национальный сервис связи также обязан будет подчиняться всем требованиям государства, чтобы бороться с мошенниками. В отличие от сторонних, которые кладут, возможно (не могу утверждать) осознано, болт на любые защиты пользователей от мошенников.</p>

<p>Также национальный мессенджер обязан будет связываться с ГУ. Вообще это будет правильной практикой — либо не давать заходить без проверки по ГУ, либо как-то помечать значком недоверия тех, кто отказался от проверки по ГУ. Первый вариант лично меня бы полностью устроил, т. к. ДЛЯ СЕБЯ я не вижу причин общаться в национальном мессенджере с иностранцами. Но другим может быть удобен второй вариант.
Как бы то ни было, связь быть обязана. Национальный мессенджер обязан проверять учётные записи, потому что без этого не удастся быстро и просто вычислять мошенников или хотя бы идиотов-мулов.</p>

<p>Таким образом, происходит давление на мошенников с разных сторон в масштабах, которых страна не знала раньше. Но правилам этим гарантировано будут подчиняться <em>только</em> национальные системы, к сожалению.</p>

<p>Да, мошенничество не побеждено. Но сейчас мошенников прессуют, как никогда раньше. И, давайте быть честными с собой: полностью победить мошенничество будет невозможно. Но возможно будет хотя бы быстро принимать меры по подавлению урона от мошенничества.</p>

<p>Желающие могут ознакомиться с видео, как люди смогли разоблачить мошенников в Индии и как на это всем наплевать: <a href="https://www.youtube.com/watch?v=xsLJZyih3Ac" rel="nofollow">https://www.youtube.com/watch?v=xsLJZyih3Ac</a> Хотя страдает от индийцев вторая по святости нация.</p>

<h3 id="государство-запретит-всё-кроме-национального-средства-общения">Государство запретит всё, кроме национального средства общения</h3>

<p>И вот здесь всё просто. Я пишу о национальном средстве общения и почему он нужен. Но способы его внедрения не связаны с самой разработкой. То, что государство довольно часто работает с людьми очень плохо — это та реальность, в который мы всей планетой живём.</p>

<p>Государство говорит, что вот эти помидоры вдруг, со вчера, обзавелись спидораковой палочкой и запрещает их — народ принимает, хоть и всё понимает. Государство говорит, что в этой детской больнице может быть (а может не быть) один плохой человек и бьёт туда ракетой, прям по детям — народ принимает (понимает? поддерживает?).
Если кому-то что-то не нравится — есть выборы. А до выборов и помидоры будут то плохие, то хорошие, и «сопутствующие потери» будут нормальной платой.</p>

<p>Запретит ли государство другие средства общения? Да фиг знает. Даже если бы я сам работал «в государстве», я бы всё равно не знал ответа. Потому что это множество людей с кучей мнений.
Буду ли я страдать от запрета? Нет, я — не буду. Хочется ли мне, чтобы запретили? Конечно не хочется.
Но, думаю, до окончания СВО, а ещё какое-то время после, послаблений не будет.</p>

<p>И здесь же:</p>

<h3 id="государство-будет-следить-за-всем-происходящим-в-национальном-средстве-общения">[Государство] будет следить за всем, происходящим в национальном средстве общения</h3>

<p>Да. Это просто факт. Потому если вы уходите от налогов, прикрываясь патентом, или не оформляете самозанятость, выпекая тортики, или вы просто дура Блиновская — не используйте национальное средство общения для, собственно, общения на все эти темы. Или ищите другие инструменты, или работайте законно. При этом первый подход будет приводить ко всё новым ограничениям и запретам, тогда как второй — нет.</p>

<p>Это знаете дурачков, которые в <code>ChatGPT</code> всякую уголовную фигню спрашивали, а теперь узнали, что это будет учтено в суде, если что? Так и тут. Старайтесь не быть идиотом, это может помочь жить.</p>

<p>Национальные/государственные инструменты работы используйте по прямому назначению и будет хорошо. Переводить по <code>СБП</code> деньги террористам нельзя, например. Следует это учитывать.</p>

<h3 id="мылору-не-может-сделать-ничего-нормально">Мылору не может сделать ничего нормально</h3>

<p>И вот тут я остановлюсь, потому что это уже третья часть. Я хочу вынести отдельно, потому что это единственный пункт, который связан не с абстрактным инструментом «национальный мессенджер», а с вполне конкретной реализацией «MAX»</p>

<p>Всё ещё жду ваших вопросов и замечаний. Глядишь, будет и четвёртая часть. В конце-концов, может быть какой-то вопрос не раскрыл, или что-то не учёл, или ещё чего-то.</p>

<p>А, да. Если вы придерживаетесь позиции «если в России — то это только чтобы посадить и убить», то сразу идите лесом. Это не конструктивно и это буду игнорировать. А ещё буду в голове проговаривать, какой вы дурачок.</p>
]]></content:encoded>
      <guid>https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie-33m8</guid>
      <pubDate>Sun, 31 Aug 2025 15:37:54 +0000</pubDate>
    </item>
    <item>
      <title>Средство связи MAX: моё мнение</title>
      <link>https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie</link>
      <description>&lt;![CDATA[Часть 1: зачем вообще национальный мессенджер&#xA;&#xA;Несколько дней назад у себя в задротском бложике я написал, что нам, россиянам, необходим национальный мессенджер. И ожидал, что пост останется без комментариев, т.к. мои подписчики должны были понять смысль, но оказался неправ.&#xA;&#xA;Т.к., оказывается, люди читают не то, что написано:&#xA;&#xA;  Национальный мессенджер - отличная вещь. Та, которая должна была быть очень давно. Нам нужен свой вичат.&#xA;!--more--&#xA;…а что-то в своём воображении, то здесь я раскрою то, что хотел сказать. Заодно напишу конкретно о Максе (хотя про него не говорил ни слова) и отвечу на уже вброшенные претензии, благо это всё одни и те же по кругу.&#xA;&#xA;Начну со своих изначальных утверждений:&#xA;&#xA;  Национальный мессенджер - отличная вещь&#xA;&#xA;Почему это так? У нас уже есть «Госуслуги», при чём сбоку к ним прицепились подвиды типа «Госуслуги Авто», «Госключ», «Госуслуги Дом» и другие. У нас появились всякие МФЦ, появилась возможность даже не подавать показания приборов учёта электроэнергии, к примеру, потому что это происходит автоматически.&#xA;&#xA;Раньше, чтобы сделать хоть что-нибудь, требующее взаимодествие с госбюрократией, нужно было ходить по кабинетам, отстаивать очередь на получение номерка очереди, поджидать у дверей и всё прочее. Сегодня, если вдруг с таким приодится сталкиваться, это выглядит дикостью — настолько мы отвыкли от этого. И всё, что ещё не работает просто в пару кликов не выходя из дома — всё это нужно подтянуть.&#xA;&#xA;Но даже когда что-то работает хорошо, упираемся в первую проблему: доставить сообщение. Давайте отсюда и далее я объеденю всё-всё-всё, что связано исполнительной, судебной, законодательной, управляющей системами и вообще всё, что существует подобное под одним словом «государство». Здесь будет и сотрудник, первый день работающий в службе единого окна, и полиция, и Верховный суд.&#xA;&#xA;Проблема уведомлений&#xA;&#xA;Чтобы сообщить человеку о каком угодно событии, у государства есть два способа. Можно было бы сказать, что три, но на самом деле два из них — половинчатые и в сумме дают один. В общем:&#xA;&#xA;физическая почта. Доставить письмо по адресу регистрации. Единственный полноценный способ, т.к. человек без регистрации у нас хоть и возможен, но к нему уже есть определённые вопросы&#xA;электронная почта&#xA;телефон&#xA;&#xA;Давайте разберём каждый из них.&#xA;&#xA;Телефон, SMS&#xA;&#xA;Проще всего с телефоном. По телефону просто нельзя отличить, звонит тебе мошенник или действительно вас беспокоят из «Главного управления МВД России», ага. Ты, читатель этой записи, разумеется, за километр чувствуешь запах мошенничества и, конечно, никогда не попадёшься на эту удочку. Но лично ты, читатель, точно также будешь блокировать и настоящие звонки по той же замой причине. И лишь если тебе не лень, потратишь время и разберёшься, настоящий это звонок или нет. В общем, телефон — самый худший способ связи из существующих.&#xA;&#xA;Электронная почта&#xA;&#xA;На первый взгляд тут дела получше. Прилитает письмо с Госуслуг (ведь ты, читатель, подключил «Госпочту», разумеется) и всё норм. Но давайте посмотрим на людей уже вокруг себя — на своих родителей, на своих друзей и в особенности на тех, кто уже на пенсии.&#xA;&#xA;Отличат ли эти люди фишинг от настоящего письма? Я даже не буду говорить о ситуации, где в поле from стоит настоящий адрес Госуслуг, пусть там даже написано gosuslugi-tehpodderzka@mail.ru — все эти люди точно справятся?&#xA;Пользуются ли все эти люди электронной почтой? Скажем, моя мать — бухгалтер и с электронной почтой она хорошо знакома и активно её использует. Но вот мой отец, хоть и имеет ящик, просто потому что когда-то регистрировал учётную запись Google, вообще даже не знает ни адреса, ни тем более пароля от неё. Другими словами, электронная почта как бы есть у миллионов граждан, но по факту её у них нет.&#xA;&#xA;Физическая почта&#xA;&#xA;Единственный вариант, который сам по себе является полноценным и гарантированным. Гарантированный он потому что адрес регистрации есть действительно практически у всех граждан и даже не граждан. Отсуствие адреса регистрации хоть и возможно, но уже само по себе вызывает вопросы и становится проблемой. В конце-концов, у нас просто нельзя не иметь регистрацию постоянную или временную — это наказуемо.&#xA;&#xA;Следовательно, по адресу регистрации можно отправить письмо. Из перечисленных методов этот — лучший. Однако не идельный:&#xA;&#xA;Физические письма тоже могут быть поддельными. Я пока не слышал, чтобы подделывали судебные, скажем (но не исключаю, что это могло быть), а вот квитации об оплате коммунальных услуг подделывали только в путь. Люди думали, что оплачиают коммунальные платежи через QR, а на самом деле переводили деньги мошенникам.&#xA;Письма могут идти очень долго. Это объективная проблема, связанная с нехваткой кадров у Почты России&#xA;Многие люди имеют регистрацию по одному адресу, а проживают по другому. Так как глобально это не мешает, то многие и не меняют регистрацию. Или не меняют осознано по каким-то своим причинам&#xA;&#xA;В итоге получаем один полноценный способ — физическая почта, и два откровенно дырявых — электронные.&#xA;&#xA;Единое решение&#xA;&#xA;Но можно обязать всех и граждан, и не граждан, иметь приложение, которое будет доставлять уведомление. И я сейчас не имею в виду никакого приложения конкретно, речь об абстрактном.&#xA;&#xA;Единое решение будет получать все сообщения ото всех госучреждений прямо на устройство пользователя. И в целом такое решение есть — Госуслуги. Поставишь его и получаешь уведомления — красота. Для меня это видится пока лучшим вариантом.&#xA;Ну а кто не желает - пусть получает уведомления по физической почте — их право. Пусть только помнят, что вручение для некоторых писем будет не по фактическому вручению, а по дате, проставленном в отделении. Ну, не донёс почтальон письмо за две недели — ну что поделать. Ты за его зарплату поноси.&#xA;&#xA;Теперь давайте развивать существующее решение, потому что нет предела совершенству.&#xA;&#xA;нужно связаться с УК своего дома, чтобы выяснить, почему начислили что-то не то. Ситуация не абстрактная, мне уже несколько раз это приходилось делать. В этом случае придётся переходить куда-то на внешнюю площадку, т.к. Госуслуги — это не социальная сеть. Поддерживать её как социальную сеть будет ну очень сложно и дорого&#xA;нужно связаться с соседями просто-напросто. И тут стреляет неожиданное — админ группы дома тебя блокирует, за то, что ты состоишь ещё и в группе подъезда! И я снова не придумываю. Практически весь наш подъезд забанен в общей группе дома. А если бы использовалось общее решение, навязанное сверху, дурости бы не было, ведь общая группа в едином решении принадлежала бы не обиженному жителю&#xA;а летят на голову птицы железные с бомбами внутри если? Нужно ещё приложение, выходит. Да ещё как-то обязать установить, а это время&#xA;хочу новости почитать, но так, чтобы это была с одной стороны не Труха Украина, а с другой — не Соловьёв. Ну вот конкретно они мне не нравятся. А нравится мне Стас Ай Как Антонов. Ещё приложение нужно, значит. А того, что нашёл — это настоящий или нет? [Имена специально подобраны, чтобы кого-нибудь раздражать при чтении]&#xA;нашёл нужного, а его завтра нет. Почему? Да он чёт нехорошо высказался про пидоров. И мнение высказал своё, а нарушило правила какой-то другой страны. Вроде я с той страной и не связан, но она снесла мне источник&#xA;встретился с другом, с которым со времён школы не виделся. Давай связь держать. Давай! Я в А сижу, в Б никого нет. А я в Б сижу, в А никого нет. А будь единое решение для страны, то оно практически гарантировано было бы у каждого&#xA;коммуникация со всеми производителями продуктов и услуг. При существовании единого решения вполне себе можно обязать условные Азбуки Вкуса и Пятёрочки иметь представительство в этом едином решении, куда можно сообщить что-то или пожаловаться. То есть ты видишь магазин или парикмахерскую — ты знаешь, что они есть в этом едином решении. Зашёл просто к ним, а тебе сразу вот часы работы, вот сюда жалобы и предложения, здесь посмотреть ассортимент&#xA;общественные приёмные государственных работников. При существовании единого решения вполне можно обязать чиновников и отчитываться о проделанной работе, и вести приём заявок&#xA;&#xA;Сценариев просто тонна. Если будет существовать единый центр связи, то набрасывать в него возможности будет не так, чтобы сложно.&#xA;&#xA;Но почему таким центром не могут быть Госуслуги? К сожалению, все описанные сценарии — это социальные сети. А их и делать не так, чтобы прям просто (Google не смог, MySpace умер, Fb — это аналог Одноклассников в плохом смысле, Твиттер не понятно, смог ли вылезти из долгов, остальные даже не стараются). Но при этом сама концепция социальных сетей уже несколько устарела. Сейчас это перползает в мессенджеры.&#xA;&#xA;Вот и выходит, что нужен именно мессенджер, который будет ещё и социальной сетью. И я ни в коем случае не говорю, что нужно решение от VK. Я говорю ровно то, что написано: нужен мессенджер с функцильнальностью социальных сетей.&#xA;&#xA;Почему не Телега?!&#xA;&#xA;Телега — неплохое решение. В нём есть почти всё, кроме самого главного — он не подконтролен государству. И не в том плане, что наши переписки так хотят читать (хотя это тоже), а в том, что Россия довольно мягко себя ведёт с теми, кто наплевательски к ней относится. Из-за этого в Телеге есть просто тонны того, чего ни в коем случе не должно быть в приложении, которое должно быть у всех, от школьников до пенсионеров. Как нужно себя вести показывает ЕС, показывает Франция. Нужно взять за жопу, воткнуть руку поглубже в анус и пусть теперь делает то, что сказано.&#xA;&#xA;То есть Телега плоха тем, что бесконтрольна. Если у вас возле дома ещё не успели замазать рекламу наркомагазинов (тоже неплохо бы иметь группу для быстрого сообщения об этом в едином средстве коммуникации, а?), то там вовсе не Briar и даже не Matrix, хотя для этих целей они были бы лучше, не находите? Конечно, на это можно жаловаться. И я жалуюсь. Каналы блокируются и открываются дубликаты тут же. Телеграму настолько пофиг, что работает даже простое добавление 2, 3, ... к названию. Не потому что Телеграм плохой и лично Пашка с Колей такие негодяи. Просто им наплевать, вот и всё. Их это не беспокоит. Звёздочки с подарками продаются, реклама покупается — значит всё хорошо. Единственная цель существования Телеграма — это заработать деньги инвесторам. Просто будьте честны сами с собой. Ведь заработать, предоставляя вполне хороший сервис — это не зло. Просто вот это всё в совокупности не может быть тем, что серьёзно используется государством.&#xA;&#xA;Продолжение следует&#xA;&#xA;Что-то я и так много написал, а ещё даже не приступил к разбору претензий и ничего не сказал конкретно о Максе. Но да пусть пока так. Предлагаю мне в комментариях написать, какой я дурак и, главное, почему. Это будет добавлено в следующей записе с объяснением, что дурак ты сам, ггг. Но, если серьёзно, было бы почитать ваши опасения и претензии, может я себе в заметки не всё написал, о чём стоило бы сказать.]]&gt;</description>
      <content:encoded><![CDATA[<h2 id="часть-1-зачем-вообще-национальный-мессенджер">Часть 1: зачем вообще национальный мессенджер</h2>

<p>Несколько дней назад у себя в задротском бложике я написал, что нам, россиянам, <a href="https://x.myachin.xyz/@umnik/statuses/01K1TJBG7DFE78R8EQSYK5PPS2" rel="nofollow">необходим национальный мессенджер</a>. И ожидал, что пост останется без комментариев, т.к. мои подписчики должны были понять смысль, но оказался неправ.</p>

<p>Т.к., оказывается, люди читают не то, что написано:</p>

<blockquote><p>Национальный мессенджер – отличная вещь. Та, которая должна была быть очень давно. Нам нужен свой вичат.

…а что-то в своём воображении, то здесь я раскрою то, что хотел сказать. Заодно напишу конкретно о Максе (хотя про него не говорил ни слова) и отвечу на уже вброшенные претензии, благо это всё одни и те же по кругу.</p></blockquote>

<p>Начну со своих изначальных утверждений:</p>

<blockquote><p>Национальный мессенджер – отличная вещь</p></blockquote>

<p>Почему это так? У нас уже есть «Госуслуги», при чём сбоку к ним прицепились подвиды типа «Госуслуги Авто», «Госключ», «Госуслуги Дом» и другие. У нас появились всякие МФЦ, появилась возможность даже не подавать показания приборов учёта электроэнергии, к примеру, потому что это происходит автоматически.</p>

<p>Раньше, чтобы сделать хоть что-нибудь, требующее взаимодествие с госбюрократией, нужно было ходить по кабинетам, отстаивать очередь на получение номерка очереди, поджидать у дверей и всё прочее. Сегодня, если вдруг с таким приодится сталкиваться, это выглядит дикостью — настолько мы отвыкли от этого. И всё, что ещё не работает просто в пару кликов не выходя из дома — всё это нужно подтянуть.</p>

<p>Но даже когда что-то работает хорошо, упираемся в первую проблему: доставить сообщение. Давайте отсюда и далее я объеденю всё-всё-всё, что связано исполнительной, судебной, законодательной, управляющей системами и вообще всё, что существует подобное под одним словом «государство». Здесь будет и сотрудник, первый день работающий в службе единого окна, и полиция, и Верховный суд.</p>

<h2 id="проблема-уведомлений">Проблема уведомлений</h2>

<p>Чтобы сообщить человеку о каком угодно событии, у государства есть два способа. Можно было бы сказать, что три, но на самом деле два из них — половинчатые и в сумме дают один. В общем:</p>
<ul><li>физическая почта. Доставить письмо по адресу регистрации. Единственный полноценный способ, т.к. человек без регистрации у нас хоть и возможен, но к нему уже есть определённые вопросы</li>
<li>электронная почта</li>
<li>телефон</li></ul>

<p>Давайте разберём каждый из них.</p>

<h3 id="телефон-sms">Телефон, SMS</h3>

<p>Проще всего с телефоном. По телефону просто нельзя отличить, звонит тебе мошенник или действительно вас беспокоят из «Главного управления МВД России», ага. Ты, читатель этой записи, разумеется, за километр чувствуешь запах мошенничества и, конечно, никогда не попадёшься на эту удочку. Но лично ты, читатель, точно также будешь блокировать и настоящие звонки по той же замой причине. И лишь если тебе не лень, потратишь время и разберёшься, настоящий это звонок или нет. В общем, телефон — самый худший способ связи из существующих.</p>

<h3 id="электронная-почта">Электронная почта</h3>

<p>На первый взгляд тут дела получше. Прилитает письмо с Госуслуг (ведь ты, читатель, подключил «Госпочту», разумеется) и всё норм. Но давайте посмотрим на людей уже вокруг себя — на своих родителей, на своих друзей и в особенности на тех, кто уже на пенсии.</p>
<ul><li>Отличат ли эти люди фишинг от настоящего письма? Я даже не буду говорить о ситуации, где в поле from стоит настоящий адрес Госуслуг, пусть там даже написано gosuslugi-tehpodderzka@mail.ru — все эти люди точно справятся?</li>
<li>Пользуются ли все эти люди электронной почтой? Скажем, моя мать — бухгалтер и с электронной почтой она хорошо знакома и активно её использует. Но вот мой отец, хоть и имеет ящик, просто потому что когда-то регистрировал учётную запись Google, вообще даже не знает ни адреса, ни тем более пароля от неё. Другими словами, электронная почта как бы есть у миллионов граждан, но по факту её у них нет.</li></ul>

<h3 id="физическая-почта">Физическая почта</h3>

<p>Единственный вариант, который сам по себе является полноценным и гарантированным. Гарантированный он потому что адрес регистрации есть действительно практически у всех граждан и даже не граждан. Отсуствие адреса регистрации хоть и возможно, но уже само по себе вызывает вопросы и становится проблемой. В конце-концов, у нас просто нельзя не иметь регистрацию постоянную или временную — это наказуемо.</p>

<p>Следовательно, по адресу регистрации можно отправить письмо. Из перечисленных методов этот — лучший. Однако не идельный:</p>
<ul><li>Физические письма тоже могут быть поддельными. Я пока не слышал, чтобы подделывали судебные, скажем (но не исключаю, что это могло быть), а вот квитации об оплате коммунальных услуг подделывали только в путь. Люди думали, что оплачиают коммунальные платежи через QR, а на самом деле переводили деньги мошенникам.</li>
<li>Письма могут идти очень долго. Это объективная проблема, связанная с нехваткой кадров у Почты России</li>
<li>Многие люди имеют регистрацию по одному адресу, а проживают по другому. Так как глобально это не мешает, то многие и не меняют регистрацию. Или не меняют осознано по каким-то своим причинам</li></ul>

<p>В итоге получаем один полноценный способ — физическая почта, и два откровенно дырявых — электронные.</p>

<h2 id="единое-решение">Единое решение</h2>

<p>Но можно обязать всех и граждан, и не граждан, иметь приложение, которое будет доставлять уведомление. И я сейчас не имею в виду никакого приложения конкретно, речь об абстрактном.</p>

<p>Единое решение будет получать все сообщения ото всех госучреждений прямо на устройство пользователя. И в целом такое решение есть — Госуслуги. Поставишь его и получаешь уведомления — красота. Для меня это видится пока лучшим вариантом.
Ну а кто не желает – пусть получает уведомления по физической почте — их право. Пусть только помнят, что вручение для некоторых писем будет не по фактическому вручению, а по дате, проставленном в отделении. Ну, не донёс почтальон письмо за две недели — ну что поделать. Ты за его зарплату поноси.</p>

<p>Теперь давайте развивать существующее решение, потому что нет предела совершенству.</p>
<ul><li>нужно связаться с УК своего дома, чтобы выяснить, почему начислили что-то не то. Ситуация не абстрактная, мне уже несколько раз это приходилось делать. В этом случае придётся переходить куда-то на внешнюю площадку, т.к. Госуслуги — это не социальная сеть. Поддерживать её как социальную сеть будет ну очень сложно и дорого</li>
<li>нужно связаться с соседями просто-напросто. И тут стреляет неожиданное — админ группы дома тебя блокирует, за то, что ты состоишь ещё и в группе подъезда! И я снова не придумываю. Практически весь наш подъезд забанен в общей группе дома. А если бы использовалось общее решение, навязанное сверху, дурости бы не было, ведь общая группа в едином решении принадлежала бы не обиженному жителю</li>
<li>а летят на голову птицы железные с бомбами внутри если? Нужно ещё приложение, выходит. Да ещё как-то обязать установить, а это время</li>
<li>хочу новости почитать, но так, чтобы это была с одной стороны не Труха Украина, а с другой — не Соловьёв. Ну вот конкретно они мне не нравятся. А нравится мне Стас Ай Как Антонов. Ещё приложение нужно, значит. А того, что нашёл — это настоящий или нет? [Имена специально подобраны, чтобы кого-нибудь раздражать при чтении]</li>
<li>нашёл нужного, а его завтра нет. Почему? Да он чёт нехорошо высказался про пидоров. И мнение высказал своё, а нарушило правила какой-то другой страны. Вроде я с той страной и не связан, но она снесла мне источник</li>
<li>встретился с другом, с которым со времён школы не виделся. Давай связь держать. Давай! Я в А сижу, в Б никого нет. А я в Б сижу, в А никого нет. А будь единое решение для страны, то оно практически гарантировано было бы у каждого</li>
<li>коммуникация со всеми производителями продуктов и услуг. При существовании единого решения вполне себе можно обязать условные Азбуки Вкуса и Пятёрочки иметь представительство в этом едином решении, куда можно сообщить что-то или пожаловаться. То есть ты видишь магазин или парикмахерскую — ты знаешь, что они есть в этом едином решении. Зашёл просто к ним, а тебе сразу вот часы работы, вот сюда жалобы и предложения, здесь посмотреть ассортимент</li>
<li>общественные приёмные государственных работников. При существовании единого решения вполне можно обязать чиновников и отчитываться о проделанной работе, и вести приём заявок</li></ul>

<p>Сценариев просто тонна. Если будет существовать единый центр связи, то набрасывать в него возможности будет не так, чтобы сложно.</p>

<p>Но почему таким центром не могут быть Госуслуги? К сожалению, все описанные сценарии — это социальные сети. А их и делать не так, чтобы прям просто (Google не смог, MySpace умер, Fb — это аналог Одноклассников в плохом смысле, Твиттер не понятно, смог ли вылезти из долгов, остальные даже не стараются). Но при этом сама концепция социальных сетей уже несколько устарела. Сейчас это перползает в мессенджеры.</p>

<p>Вот и выходит, что нужен именно мессенджер, который будет ещё и социальной сетью. И я ни в коем случае не говорю, что нужно решение от VK. Я говорю ровно то, что написано: нужен мессенджер с функцильнальностью социальных сетей.</p>

<h2 id="почему-не-телега">Почему не Телега?!</h2>

<p>Телега — неплохое решение. В нём есть почти всё, кроме самого главного — он не подконтролен государству. И не в том плане, что наши переписки так хотят читать (хотя это тоже), а в том, что Россия довольно мягко себя ведёт с теми, кто наплевательски к ней относится. Из-за этого в Телеге есть просто тонны того, чего ни в коем случе не должно быть в приложении, которое должно быть у всех, от школьников до пенсионеров. Как нужно себя вести показывает ЕС, показывает Франция. Нужно взять за жопу, воткнуть руку поглубже в анус и пусть теперь делает то, что сказано.</p>

<p>То есть Телега плоха тем, что бесконтрольна. Если у вас возле дома ещё не успели замазать рекламу наркомагазинов (тоже неплохо бы иметь группу для быстрого сообщения об этом в едином средстве коммуникации, а?), то там вовсе не Briar и даже не Matrix, хотя для этих целей они были бы лучше, не находите? Конечно, на это можно жаловаться. И я жалуюсь. Каналы блокируются и открываются дубликаты тут же. Телеграму настолько пофиг, что работает даже простое добавление 2, 3, ... к названию. Не потому что Телеграм плохой и лично Пашка с Колей такие негодяи. Просто им наплевать, вот и всё. Их это не беспокоит. Звёздочки с подарками продаются, реклама покупается — значит всё хорошо. Единственная цель существования Телеграма — это заработать деньги инвесторам. Просто будьте честны сами с собой. Ведь заработать, предоставляя вполне хороший сервис — это не зло. Просто вот это всё в совокупности не может быть тем, что серьёзно используется государством.</p>

<h2 id="продолжение-следует">Продолжение следует</h2>

<p>Что-то я и так много написал, а ещё даже не приступил к разбору претензий и ничего не сказал конкретно о Максе. Но да пусть пока так. Предлагаю мне в комментариях написать, какой я дурак и, главное, почему. Это будет добавлено в следующей записе с объяснением, что дурак ты сам, ггг. Но, если серьёзно, было бы почитать ваши опасения и претензии, может я себе в заметки не всё написал, о чём стоило бы сказать.</p>
]]></content:encoded>
      <guid>https://text.tchncs.de/umnik/sredstvo-sviazi-max-moio-mnenie</guid>
      <pubDate>Sun, 17 Aug 2025 19:54:54 +0000</pubDate>
    </item>
    <item>
      <title>О тестировании</title>
      <link>https://text.tchncs.de/umnik/o-testirovanii</link>
      <description>&lt;![CDATA[Термины написаны не копи-пастом из вики, а человеческим языком. Группировка также не из вики и вообще не по ISO 9000 и в таком роде. Нам просто нужно подразумевать одно и тоже.&#xA;&#xA;Вводные термины&#xA;&#xA;релиз кандидат, release candidate: сборка, смотрящая на прод серверы, без логов, с обфускацией, в финальном состоянии. В общем случае подразумевается, что в ней не будет никаких новых проблем выше 4-го уровня. Эта же сборка потом раздаётся пользователям&#xA;&#xA;код фриз, code freeze: этап, на котором в продукт и его компоненты не вносится никаких изменений. Каждая найденная проблема обсуждается, можно ли её отложить до следующего релиза или до хот-фикса. Проблемы от 4 уровня и ниже всегда переносятся на потом и пересборки из-за них быть не может. Даже если это совсем точечное изменение, даже если это кажется ерундой&#xA;!--more--&#xA;хот фикс, hot fix: сборка с устранением проблем, накопленных ранее, но сумма которых не тянет на новую полноценную версию продукта. Хот-фиксы гарантировано имеют малый потенциальный урон (impact) и дёшевы в разработке и тестировании.&#xA;&#xA;Если урон большой — это уже не хот-фикс, а полноценный релиз с соответствующим выделением ресурсов и закладкой сроков. Отсюда следует, что нельзя даже простые задачи включать в HF просто потому что можем. Меньше задач - острее внимание&#xA;&#xA;критикал фикс, critical fix: сборка с устранением одной конкретной проблемы, о которой на момент выпуска релиза не было известно. Это может быть и пропуск проблемы со стороны QA, и просто новые обстоятельства, например вынужденные переезд на другие серверы.&#xA;&#xA;HF тоже может быть с устранением лишь одной проблемы. Принципиальное отличие CF от HF в том, что в HF о проблеме знали и решили, что она не может задерживать релиз, тогда как в CF о проблеме раньше не знали&#xA;&#xA;мейтененс релиз, maintenance release: релиз продукта с устранением самых разных проблем, но без добавления новых фич. Планируется как полноценный релиз. Если HF жирнеет, то он превращается в MR.&#xA;&#xA;MR ничем не отличается по работам от обычного релиза. Разница только в том, что в MR нет новых фич. Либо что-то есть, но это что-то было сделано только ради исправления проблем&#xA;&#xA;UI/UX: отвечают за взаимодействие пользователя с продуктом. UI - это есть ли кнопка на экране, на которую можно нажать, а UX - это очевидно ли пользователю, что на кнопку можно нажать и удобно ли ему это сделать&#xA;&#xA;Термины, связанные с тестированием, будут дальше.&#xA;&#xA;Задачи тестировщика&#xA;&#xA;Важно понять, что тестировщик лишь информирует о качестве продукта. Тестировщик не формирует это качество и, главное, не отвечает за него. Он не может быть обвинён в том, что что-то плохо работает. Но тестировщик должен приложить все силы, чтобы предоставить максимально объективную оценку качества.&#xA;&#xA;Следовательно, тестировщик должен сообщать (читай - «записывать в багтрекер») обо всех, даже незначительных проблемах. Разумеется, это породит ворох задач, которые никогда не будут исправлены. Но знать о них всё равно нужно. Простое удерживание в голове знания о какой-нибудь мелочи заставляет ответственного разработчика учитывать её, когда он работает над областью, в которую эта проблема попадёт. Ответственный разработчик воспользуется возможностью устранить мелочь. Eсли это не создаёт новых проблем.&#xA;&#xA;Замечание: описанное выше роляет лишь при условии, что не используется Zero bug policy. Т.к. мы решили, что нам он не подходит, то альтернативное мнение и не описываю.&#xA;&#xA;Тестировщик может и должен полагаться на выработанные привычки взаимодействия с ПО и сообщать, что где-то UX сломан для текущей платформы или где-то UI «некрасивый», не смотря на субъективность. Но тестировщик должен показывать примерами, что такое хорошо. В идеале он должен давать ссылки на объяснения, почему так, а не иначе.&#xA;&#xA;QA не управляет разработчиками и наоборот. Попросить что-то проверить или посмотреть что-то вне очереди можно, но это работает в малых командах (наша как раз к таким относится). И только соблюдая этикет взаимодействия: принимающая сторона должна ответить, сделает это и когда или не сделает из-за, например, сильной загруженности. Также не является чем-то плохим и напоминание об обещании. Потому что мы можем просто забыть, что пообещали что-то глянуть — так бывает.&#xA;&#xA;Чтобы не было недопониманий. Тестировщик отвечает за то, на сколько хорошо (внимательно, глубоко, разносторонне) он проверяет продукт.&#xA;&#xA;Приоритизация&#xA;&#xA;В общем случае тестировщик присваивает заведённым дефектам только важность (severity). Однако иногда важность не отражает имиджевое влияние, влияние на «очень важного заказчика» или наоборот, не играет роли в текущей ситуации и тогда менеджер меняет приоритет. По умолчанию считаем, priority = severity. На приоритет ориентируется разработчик при планировании рабочего дня.&#xA;&#xA;Информация ниже не применима к нашему текущему багтрекеру, но может быть использована на созвонах, чтобы просто говорили числами.&#xA;&#xA;В общем случае значение чисел такое:&#xA;0-2 - критично или очень серьёзно. Блокирует релиз&#xA;   0 — редкое явление, означающее, что использовать сборку нельзя. И не важно, потому что она не запускается или потому что при её использовании ломается будущая совместимость. Это просто маркер, означающий «пока не сказали, что поправили, не ставьте промежуточные сборки»&#xA;3 - продукт может пойти в релиз, если это не привнесённая проблема. Если привнесённая, то релиз блокируется до тех пор, пока менеджер не понизит приоритет, например до 4. Допустимо делать релиз с 3 для привнесённых, если следом уже планируется хот-фикс&#xA;4 - релиз не блокируется, вне зависимости от того, привнесено это или нет. Однако, если привнесено, то в следующей итерации нужно либо поднять приоритет до 3, чтобы исправить (или снова отложить - так бывает, хотя и ставит под сомнение реальную важность), либо опустить до 5, чтобы забить болт&#xA;5-7 - разные уровни малозначимых проблем. 5-ки ещё могут подняться вверх во время триажа, но 6 и 7 - это просто кладбище, куда складываем то, что знаем, но чему в нашей жизни решения, скорее всего, не будет&#xA;&#xA;Расчёт важности&#xA;&#xA;Чтобы рассчитать важность, нужно ввести ранжирование сценариев (юз кейсов)&#xA;&#xA;использование | описание&#xA;---|---&#xA;обычное | типичный сценарий работы&#xA;--- | частый сценарий работы, хоть и не на каждый день&#xA;--- | сценарий, которого придерживается сколько-нибудь заметная доля пользователей, даже если нам это кажется странным или неудобным&#xA;--- | сценарий, который может возникать не часто, но по-прежнему является И ожидаемым, И допустимым. Например, смена часовых поясов или что собеседники никогда одновременно не появляются онлайн, или собеседник никогда не использует Wi-Fi и т.п.&#xA;не обычное | сценарий маловероятный, но при этом продукту нарочно плохо не делали. Например, пользователь не будет выходить в онлайн 8 месяцев, а потом появится&#xA;--- | редко возможное состояние системы, на которой работаем. Например, очень старая, но ещё поддерживаемая версия ОС&#xA;специальное | продукт используется в стресс-режиме. Например, пытается отправить много больших файлов одновременно на плохой сети&#xA;--- | само состояние системы стрессовое. Например, осталось мало свободного места или состояние сети на грани живого и может десятки раз в минуту переключаться&#xA;абсурдное | продукт используется в сценарии, который не закладывался. Например, отправка текста «Войны и Мира» в одном сообщении&#xA;--- | система находится в состоянии, которое не закладывалось. Например, используется сильно кастомизированная ОС: от запуска на ГУ автомобиля до васянского супер кастома&#xA;&#xA;«Абсурдный» не означает «бессмысленный». В основном это ситуации, которые просто не планировались, не обсуждались. Но то, что сегодня абсурдно, завтра может стать новой задачей. А может и не стать.&#xA;&#xA;функциональность|использование|важность&#xA;---|---|---:&#xA;ключевая | обычное | 1&#xA;--- | не обычное | 1&#xA;--- | специальное | 3&#xA;--- | абсурдное | 5&#xA;важная | обычное | 1&#xA;--- | не обычное | 3&#xA;--- | специальное | 5&#xA;--- | абсурдное | 7&#xA;вспомогательная | обычное | 2&#xA;--- | не обычное | 3&#xA;--- | специальное | 5&#xA;--- | абсурдное | 7&#xA;не функциональное | обычное | 3&#xA;--- | не обычное | 5&#xA;--- | специальное | 7&#xA;--- | абсурдное | 7&#xA;&#xA;Следующим этапом прибавляется или вычитается уровень влияния на пользователя конкретной проблемы. Вычитание означает, что проблема повышается в серьёзности, прибавление - понижается.&#xA;&#xA;тип | влияние&#xA;--- | ---:&#xA;отказ в обслуживании (падение, зависание, повторяющийся ANR) | -1&#xA;неудобно использовать продукт и нет обходного пути | 0&#xA;неудобно использовать продукт, но есть обходной путь | +1&#xA;не мешает пользователю вовсе | +2&#xA;&#xA;Да, серьёзность надписи Mikrosoft прямо на главном экране продукта - это 5: не функциональная область, обычное использование, не мешает пользователю вовсе. И тут менеджер уже должен менять приоритет. Тестировщик может попросить менеджера это сделать.&#xA;&#xA;Виды тестирования&#xA;&#xA;Глобально:&#xA;&#xA;Полное регрессионное&#xA;&#xA;Оно же «фул регрес»: продукт проверяется от и до без учёта того, что в нём менялось или не менялось. Включает как функциональное, так и не функциональное тестирование. Очень дорогое (в человекочасах), потому не может проводиться постоянно. Согласовываем фул регресс на 2-3 раза в год. Чаще нет смысла из-за во-первых дороговизны, во-вторых не накапливается достаточно изменений, которые бы могли задевать разные области.&#xA;&#xA;У фула две задачи:&#xA;сформулировать текущее состояние продукта и создать этим отправную точку будущих проверок. Чтобы не было «да туда 100 лет не заглядывали, может оно уже 10 релизов как не работает»&#xA;обнаружить накопившиеся проблемы, которые не были обнаружены в промежуточные проверки&#xA;&#xA;Регрессионное&#xA;&#xA;Обычный &#34;регресс&#34;. Разработчик ставит что-то в InTest и, если считает нужным, добавляет в комментариях, что ещё нужно проверить дополнительно к тому, что описано в самой задаче изначально. Вне зависимости от того, оставил разработчик свою просьбу или нет, тестировщик проверяет исправление/реализацию как того, что прописано в задаче, так и «окружающей функциональной области». Короткий интест может занять часы проверок, если задевает несколько областей разом.&#xA;&#xA;При регрессионном тестировании тестировщик также делает функциональные и часто, но не всегда, не функциональные тесты. Например, если правилось падение, то тратить время на вычитку текстов не нужно.&#xA;&#xA;Все промежуточные (между фул регрессами) тесты - это обычные регрессы. Потенциально, из-за того что проблемы могут появиться в местах, о которых ни тестировщик, ни разработчик не подумали, приходится несколько раз в год делать фул. Или раз в пару лет, если дела идут прям хорошо.&#xA;&#xA;Финальное&#xA;&#xA;Не является общепринятым термином, но его всё равно часто используют. Под финальным подразумевается достаточно поверхностный регресс после код фриза. Поверхностный он потому что проверка доработки замечаний, выявленных при регрессионном делается тоже обычным регрессионным. То есть финальное лишь отвечает на вопрос, успело ли что-то отъехать глобально. Такое бывает в сложных системах, когда для сборки, пригодный для финального теста, потеряли какой-нибудь коммит, перепутав ветки или что-то в таком роде. Как избегать эту проблему - это головная боль разработчиков, тестирование этого не решает.&#xA;&#xA;Регресс будет хоть и поверхностный, но остаётся итеративным. То есть если в финальном тестировании нашлась проблема, которую решают исправить к релизу, то после исправления делается регресс этой области. А то и перезапуск всего финального тестирования, если разработчик посчитает, что фикс был не точечный.&#xA;&#xA;Для финального тестирования создаётся набор тест кейсов, который называют импакт планом и в таком роде. Само формирование набора - это часть импакт анализа.&#xA;&#xA;ВАЖНО 1: в ситуации «потеряли коммит», когда финальное тестирование этого не обнаружило в виду низкого его погружения, QA не несёт за это ответственности. Потому что QA не отвечает за процессы других команд.&#xA;&#xA;ВАЖНО 2: и хотя фиксы после финального могут быть и их могут включить в релиз, нужно искать причины, почему эти фиксы понадобились вообще и устранять причины. Они хоть и могут быть, но это очень плохая практика. Лучше планировать сразу HF или даже MR. Ситуацию, когда финальное не находит вообще ничего, считаем маловероятной&#xA;&#xA;Импакт&#xA;&#xA;Чтобы проверять только то, что могло быть задето в релизе, оставив за скобками то, что точно не трогали, тестировщик собирает все сценарии, которые связаны с теми функциональными областями, которые правились в релизе. Дополнительно тестировщик спрашивает мнения разработчиков о том, что может быть задето и добавляет сценарии проверок этих областей (если вдруг оказалось, что разработчик добавил новых сведений). Это называется импакт анализ.&#xA;&#xA;Далее тестировщик проверяет эти сценарии. Это называется импакт тестирование или тестирование по импакту. Но все говорят просто импакт, подразумевая как раз это.&#xA;&#xA;Приёмочное&#xA;&#xA;Делается для RC. Это набор тестов, включающий базовые проверки всех функциональных областей продукта в обычных сценариях использования. К нему добавляются проверки по импакту. То есть приёмочное - это тоже, что и финальное, плюс базовые проверки других компонентов.&#xA;&#xA;Двойная работа требуется из-за того, что бывают ситуации, когда обфускаторы ломают то, что работало. Или разработчик использует другие версии тулкитов, отличные от тех, что на сборочном конвеере. Причины изменения поведений у RC могут быть разные и это должно устраняться не QA.&#xA;&#xA;В идеальном случае финальное тестирование не проводится. Сразу после перепроверки фиксов после фриза, выкатывается RC.&#xA;&#xA;В общих чертах:&#xA;&#xA;Функциональное: как работает техническая штука. Запускается ли вообще приложение, работает ли звонок, ходят ли сообщения. Здесь не учитывается UI и UX, даже если всё совсем плохо. Функциональное нужно, чтобы убедиться, нужно ли копать вообще или пока копать рано. Либо, если фича существовала раньше, проверяется, не сломалась ли она&#xA;&#xA;Не функциональное: подразумеваем UI и UX в основном. Потому что околотехнические тесты лучше выделить в свои виды. Главное, что здесь имеется в виду — проверяется, что уже работающая фича удобна, очевидна, красива. Нет никакой нужды делать нефункциональное до реализации фичи. Даже когда речь о «там просто баг, сейчас поправлю» - всё равно не нужно проверять. Потому что часто вдруг оказывается, что просто так не поправить и нужны значительные доработки или даже переделки. А значит время, затраченное на сверку с макетами было потрачено зря&#xA;&#xA;Локализационное: формально является не функциональным, т.к. тоже про UI, но выделяю отдельно, т.к. у него свой подход. Это проверка, что тексты не просто правильно написаны, а что они ещё и влезают. Отдельно оно проводится лишь когда добавляется новый перевод или было существенное изменение существующего перевода. В прочих же случаях оно полностью перекрывается не функциональным. Подводные камни локализационного:&#xA;&#xA;   длина слов в разных языках разная, а в некоторых языках слова принято сцеплять, выбрасывая пробелы. Т.к. пробелы для ОС являются триггером для переноса не влезающего слова, может получиться, что слова будут вылезать за пределы своих элементов&#xA;&#xA;   RLT. Например, арабские языки. Хотя тексты развернуть не проблема, часто стреляет то, что некоторые надписи являются картинками и про них тоже нужно помнить. Кроме того, нужно согласовывать, разворачивать ли интерфейс приложения (обычно нет)&#xA;      вторая проблема RTL в том, что один участник может собою развернуть других. К примеру, его имя написано с управляющим символом RTL юникода. Если его имя попадает в абзац текста (или, например, в перечисление «А, Б, В печатают…»), может развернуть всех&#xA;      стрелки «Далее» и «Назад» в мастере первоначальной настройки может развернуть, опять же&#xA;&#xA;   часто разработчики могут несколько раз вставить одно и тоже слово, скажем «Да», а потом найти, что оно уже есть и переиспользовать ранее существовавший ресурс. «Осиротевший» ресурс остаётся на месте и может получиться, что уточнили перевод сироты, а вот реально используемый потеряли&#xA;   &#xA;   смежная ситуация: переиспользуется ресурс, который в одном языке означает одно и тоже, но в при переводе нужно разделить ресурс на более чем одно значение. Например удалённый: remote и deleted&#xA;   &#xA;   переводы делаются, в основном, не видя реально приложения. Так что нужно проверять не только что фраза переведена, а что она переведена с учётом контекста&#xA;&#xA;   при расчёте сроков нужно держать в голове, что придётся все задетые ресурсы как-то вызывать. Это не просто «ну гляньте за полчаса». Некоторые ресурсы вообще нельзя будет вызвать со стороны тестирования без привлечения разработчиков и даже инфраструктуры&#xA;&#xA;Тестирование производительности: включает все виды проверок от просто «по ощущениям», до нагрузочных и стресс тестов. Расчёт потребляемого трафика тоже здесь. Не может быть обыденной проверкой, по типу функционального тестирования. Для перформанс тестов нужно заранее подготавливать окружение. А для этого нужно заранее понять, что хотим узнать. Для этого придётся проговаривать всё словами и, в итоге, сформулировать цели. Способы же проверки формулируются только после формулирования целей&#xA;&#xA;По пониманию продукта:&#xA;&#xA;Чёрный ящик: когда ничего не понятно, и нужно разобраться, как это работает. Выпускаемый нами самими продукт НИКОГДА не может проверяться как чёрный ящик. Каждый тестировщик должен разобраться в каждой фиче продукта и понимать, как именно это должно работать и как оно работает на самом деле. Если тестировщик не желает разбираться, тестировщик не должен работать в команде&#xA;&#xA;Белый ящик: когда тестировщик понимает, что к чему. В пределе, но не обязательно — читает и понимает исходный код. В целом достаточно того, что тестировщик представляет механизмы работы ОС и продукта. Это помогает предполагать опасные/сложные места и начинать проверку с них. Как правило, в простых местах разработчик не ошибается, а опасные как раз может не учесть. Как итог - ошибки находятся сразу же&#xA;&#xA;Задача лида - сделать продукт понятным тестировщику. Задача тестировщика - приложить усилия, чтобы разобраться в продукте и в его взаимодействии с ОС.&#xA;&#xA;Задачи&#xA;&#xA;Жизненный цикл задачи&#xA;&#xA;Вне зависимости от типа задачи - задача, пожелание, баг - она проходит один и тот же жизненный цикл.&#xA;&#xA;завели в баг трекере. Заводить может, понятно, не только тестировщик, а любой участник команды. При описании нужно помнить, что проверять может кто угодно. Нужно хоть как-то описать задачу, чтобы понять, о чём идёт речь и через год&#xA;&#xA;принятие решения о реализации. Вполне может быть, что задачу нельзя, невозможно, нет смысла и т.п. реализовывать и ответственное лицо (в основном разработчик, если речь про баги) может отклонить задачу или запросить больше информации. Нужно написать, почему именно отклонено или какую информацию нужно добавить и выставить в InTest. Разработчик не может закрыть баг, даже если не согласен. Его инструмент - отклонение с объяснением&#xA;&#xA;реализация, если принято решение о реализации&#xA;&#xA;отправка на проверку. По умолчанию все проверки делает QA, вне зависимости от того, кто задачу создал. Так что разработчик ставит InTest и отправляет на тестировщика&#xA;&#xA;проверка. Тестировщик, если может, проверяет реализацию. Если автор не он, то он общается с автором (если возможно) и всё равно проверяет сам. Если задача была очень специфична и явно не для QA, то тестировщик вешает её на заказчика со своим комментарием, почему это сделано.&#xA;&#xA;Интеграция новых методов из натива или переход с устаревших на их замену и подобные штуки от разработки не являются &#34;слишком специфичными&#34;, они всё равно в ответственности тестировщика. В этом случае тестировщик делает регресс по фиче, даже если визуально ничего не изменилось.&#xA;&#xA;Просьбы&#xA;&#xA;Нормальным и даже рекомендуемым поведением является оформление просьбы что-то проверить в виде задачи. Чаще всего просят тестировщика что-то сделать. На созвоне или в переписке о чём-то просишь и, если тестировщик говорит, что да, может это сделать, то завести ему соответствующую задачу и поставить в InTest.&#xA;&#xA;Благодаря такой формализации тестировщик и вряд ли забудет о задаче, так ещё сформулирует ответ в ней же. А значит все смогут этот ответ прочесть. К тому же всегда можно будет вернуться к задаче и вспомнить детали.&#xA;&#xA;Просьбы оформлять в виде задач в багтрекере - это хорошо и правильно.&#xA;&#xA;Триаж&#xA;&#xA;Задачи в баг трекере будут накапливаться. Некоторые будут решены, некоторые решены не будут. Раз-два в год, чаще нет смысла, нужно проводить триаж. То есть проверять, актуальны ли ещё задачи и нужно ли что-то поднять из подвала наружу.&#xA;&#xA;Этап 1. Тестировщики проверяют все открытые задачи.&#xA;&#xA;Те из них, которые более не актуальны, закрываются.&#xA;&#xA;Те, которые актуальны, обновляются с указанием, на какой версии проверено.&#xA;&#xA;Те, которые актуальны, но чуть изменилось воспроизведение (например с тех пор изменился экран или экран переехал и теперь надо иначе его вызывать), обновляются под новую реальность.&#xA;&#xA;Если удалось найти ещё способы получить эту же проблему, кроме той, что записано, это также добавляется.&#xA;&#xA;Если новое поведение проблемы таково, что её важность повышается, она добавляется в список проблем, на которые нужно обратить внимание.&#xA;&#xA;Этап 2. Лиды и PM рассматривают сначала список проблем. на которые нужно обратить внимание, даже если тег Triaged установлен. Если окажется, что проблема действительно стала более важной, тег снимается. Задача рассматривается как новая. Имеется в виду, что, возможно, нужно будет ещё и приоритет переопределить&#xA;&#xA;Далее просматривается список оставшихся в живых проблем без тега Triaged и принимаетя решение, что с ними делать.&#xA;&#xA;Если проблема такая, что точно никогда ничего делать с этим не будем, на неё ставится тег Triaged. Таким образом тестировщики её будут актуализировать каждый год, но на второй этап она никогда не попадёт (если у неё не изменилось поведение и она не попала в список &#34;обратите внимание&#34;).&#xA;&#xA;Если проблема такая, что её бы хорошо поправить, она добавляется в скоуп релиза. Релиз не обязательно ближайший. Это может быть отдельный релиз, MR, к примеру.&#xA;&#xA;Философия&#xA;&#xA;В этом разделе попытаюсь ответить на вопросы, которые возникают в головах и иногда проговариваются вслух.&#xA;&#xA;Почему тестировщик находит проблемы в ранее проверенном&#xA;&#xA;К примеру, почему в финальном тестировании находятся новые проблемы, хотя именно эти области и так проверялись раньше. Может возникнуть желание обвинить тестировщика в невнимательности.&#xA;&#xA;В самом простом случае тестировщик просто правда плохо работает. С такими нам не по пути. Но хороший тестировщик тоже допускает такие косяки. Основные причины:&#xA;&#xA;ранее устранённые проблемы освобождают время проверок. Скажем, из-за некой баги пришлось потратить 3 часа на её воспроизведение, на анализ. Эту проблему устранили и теперь как бы появилось «лишних» 3 часа в обычном рабочем дне, которые тестировщик непременно инвестирует сюда же - в проверки.&#xA;&#xA;Может звучать не правдоподобно, но это действительно самая популярная причина. Собственно, почти все обнаруженные на поздних этапах проблемы - это «лишнее» время. В том числе потому HF и MR  существуют и потому они планируются заранее, ещё до самого основного релиза.&#xA;&#xA;область была затронута после проверок. И хорошо, когда тестировщик или разработчик это понимают и перепроверяют, но так ведь не всегда бывает. К тому же проблема может быть такой, что в простом сценарии она не ловится и без честного регресса её не поймать&#xA;&#xA;устранение ошибки приводит к раскрытию другой. Не редка ситуация, когда одна ошибка маскирует другую&#xA;&#xA;люди устают. Могло быть так, что в прошлый раз тестировщик был уставшим и с рассеянным вниманием. Отличие от тех, с кем нам не по пути в том, что хороший тестировщик может иногда уставать и каждый раз это прям новость. &#34;Ничего себе, как так?!&#34;&#xA;&#xA;тестировщик потерял интерес. Это происходит со всеми. Когда проверяешь одно и тоже из раза в раз, пропадает чувство новизны. Нам надоедают новые компы и машины, чего уже говорить о просто программах&#xA;&#xA;Личное замечание. Оно наверняка считается сексистским и каждый с ним вправе не согласиться. Девушки теряют интерес сильно позже, чем парни. Они лучше выполняют одни и те же работы и сильно дольше остаются внимательными к деталям. Что, разумеется, не означает, что им не нужно давать новое.&#xA;&#xA;замыленный взгляд. Когда тысячу раз видел одно и тоже поведение, оно становится привычным. А вот пользователь может не согласиться. Когда тысячу раз делал одни и те же проверки, другие сценарии перестают приходить в голову, потому что другое применение уже даже не ожидаешь&#xA;&#xA;слишком хорошее знание продукта. Когда тестировщик слишком хорошо изучит продукт, он начинает предсказывать его поведение. Это очень помогает в обнаружении проблем новых фич, но мешает в обнаружении проблем в достаточно привычных сценариях. «Ну да, падение, если поворачивать телефон во время удаления контактов, ну а чего вы ждали, особенности работы». Только пользователи ждали не понимания причин, а чтобы просто не падало&#xA;&#xA;отрыв от своих пользователей. Не редко бывает, что пользователи используют продукт таким образом, каким тестировщик не использовал никогда и не догадывался, что кто-то так делает&#xA;&#xA;Почему не проверили вот это, это же было быстро&#xA;&#xA;Каждую отдельную ситуацию проверить быстро. Но секунды создают минуты, затем часы и дни. Отдельных сценариев прям много, прям сотни. А когда релиз делается ради фичи X, то фичу Y будут проверять сильно реже и вообще потом. Если нужно вклиниться в список задач тестировщика, лучше всего просто попросить об этом. А когда просишь - нужно убедиться, что просьба услышана.&#xA;&#xA;Повторюсь снова: не грех и напоминать о просьбе. У тестировщика тоже есть работа и жизнь и он может просто забыть об обещании. Напоминание его не оскорбит, зато поможет проекту&#xA;&#xA;Ну и лучше всего прочитать раздел Просьбы и сделать так, как там написано]]&gt;</description>
      <content:encoded><![CDATA[<p>Термины написаны не копи-пастом из вики, а человеческим языком. Группировка также не из вики и вообще не по ISO 9000 и в таком роде. Нам просто нужно подразумевать одно и тоже.</p>

<h2 id="вводные-термины">Вводные термины</h2>
<ul><li><p><strong>релиз кандидат</strong>, <code>release candidate</code>: сборка, смотрящая на прод серверы, без логов, с обфускацией, в финальном состоянии. В общем случае подразумевается, что в ней не будет никаких новых проблем выше 4-го уровня. Эта же сборка потом раздаётся пользователям</p></li>

<li><p><strong>код фриз</strong>, <code>code freeze</code>: этап, на котором в продукт и его компоненты не вносится никаких изменений. Каждая найденная проблема обсуждается, можно ли её отложить до следующего релиза или до хот-фикса. Проблемы от 4 уровня и ниже всегда переносятся на потом и пересборки из-за них быть не может. Даже если это совсем точечное изменение, даже если это кажется ерундой
</p></li>

<li><p><strong>хот фикс</strong>, <code>hot fix</code>: сборка с устранением проблем, накопленных ранее, но сумма которых не тянет на новую полноценную версию продукта. Хот-фиксы гарантировано имеют малый потенциальный урон (<code>impact</code>) и дёшевы в разработке и тестировании.</p></li></ul>

<p>Если урон большой — это уже не хот-фикс, а полноценный релиз с соответствующим выделением ресурсов и закладкой сроков. Отсюда следует, что нельзя даже простые задачи включать в <code>HF</code> просто потому что можем. Меньше задач – острее внимание</p>
<ul><li><strong>критикал фикс</strong>, <code>critical fix</code>: сборка с устранением одной конкретной проблемы, о которой на момент выпуска релиза не было известно. Это может быть и пропуск проблемы со стороны QA, и просто новые обстоятельства, например вынужденные переезд на другие серверы.</li></ul>

<p><code>HF</code> тоже может быть с устранением лишь одной проблемы. Принципиальное отличие <code>CF</code> от <code>HF</code> в том, что в <code>HF</code> о проблеме знали и решили, что она не может задерживать релиз, тогда как в <code>CF</code> о проблеме раньше не знали</p>
<ul><li><strong>мейтененс релиз</strong>, <code>maintenance release</code>: релиз продукта с устранением самых разных проблем, но без добавления новых фич. Планируется как полноценный релиз. Если <code>HF</code> жирнеет, то он превращается в <code>MR</code>.</li></ul>

<p><code>MR</code> ничем не отличается по работам от обычного релиза. Разница только в том, что в <code>MR</code> нет новых фич. Либо что-то есть, но это что-то было сделано только ради исправления проблем</p>

<p><code>UI/UX</code>: отвечают за взаимодействие пользователя с продуктом. UI – это есть ли кнопка на экране, на которую можно нажать, а UX – это очевидно ли пользователю, что на кнопку можно нажать и удобно ли ему это сделать</p>

<p>Термины, связанные с тестированием, будут дальше.</p>

<h2 id="задачи-тестировщика">Задачи тестировщика</h2>

<p>Важно понять, что тестировщик лишь информирует о качестве продукта. Тестировщик не формирует это качество и, главное, не отвечает за него. Он не может быть обвинён в том, что что-то плохо работает. Но тестировщик должен приложить все силы, чтобы предоставить максимально объективную оценку качества.</p>

<p>Следовательно, тестировщик должен сообщать (читай – «записывать в багтрекер») обо всех, даже незначительных проблемах. Разумеется, это породит ворох задач, которые никогда не будут исправлены. Но знать о них всё равно нужно. Простое удерживание в голове знания о какой-нибудь мелочи заставляет ответственного разработчика учитывать её, когда он работает над областью, в которую эта проблема попадёт. Ответственный разработчик воспользуется возможностью устранить мелочь. <strong>Eсли это не создаёт новых проблем</strong>.</p>

<p><strong>Замечание:</strong> описанное выше роляет лишь при условии, что не используется <code>Zero bug policy</code>. Т.к. мы решили, что нам он не подходит, то альтернативное мнение и не описываю.</p>

<p>Тестировщик может и должен полагаться на выработанные привычки взаимодействия с ПО и сообщать, что где-то <code>UX</code> сломан для текущей платформы или где-то <code>UI</code> «некрасивый», не смотря на субъективность. Но тестировщик должен показывать примерами, что такое хорошо. В идеале он должен давать ссылки на объяснения, почему так, а не иначе.</p>

<p><code>QA</code> не управляет разработчиками и наоборот. Попросить что-то проверить или посмотреть что-то вне очереди можно, но это работает в малых командах (наша как раз к таким относится). И только соблюдая этикет взаимодействия: принимающая сторона должна ответить, сделает это и когда или не сделает из-за, например, сильной загруженности. Также не является чем-то плохим и напоминание об обещании. Потому что мы можем просто забыть, что пообещали что-то глянуть — так бывает.</p>

<p>Чтобы не было недопониманий. Тестировщик отвечает за то, на сколько хорошо (внимательно, глубоко, разносторонне) он проверяет продукт.</p>

<h2 id="приоритизация">Приоритизация</h2>

<p>В общем случае тестировщик присваивает заведённым дефектам только важность (<code>severity</code>). Однако иногда важность не отражает имиджевое влияние, влияние на «очень важного заказчика» или наоборот, не играет роли в текущей ситуации и тогда <em>менеджер</em> меняет приоритет. По умолчанию считаем, <code>priority = severity</code>. На приоритет ориентируется разработчик при планировании рабочего дня.</p>

<p>Информация ниже не применима к нашему текущему багтрекеру, но может быть использована на созвонах, чтобы просто говорили числами.</p>

<p>В общем случае значение чисел такое:
– 0-2 – критично или очень серьёзно. Блокирует релиз
   – 0 — редкое явление, означающее, что использовать сборку нельзя. И не важно, потому что она не запускается или потому что при её использовании ломается будущая совместимость. Это просто маркер, означающий «пока не сказали, что поправили, не ставьте промежуточные сборки»
– 3 – продукт может пойти в релиз, если это не привнесённая проблема. Если привнесённая, то релиз блокируется до тех пор, пока менеджер не понизит приоритет, например до 4. Допустимо делать релиз с 3 для привнесённых, если следом уже планируется хот-фикс
– 4 – релиз не блокируется, вне зависимости от того, привнесено это или нет. Однако, если привнесено, то в следующей итерации нужно либо поднять приоритет до 3, чтобы исправить (или снова отложить – так бывает, хотя и ставит под сомнение реальную важность), либо опустить до 5, чтобы забить болт
– 5-7 – разные уровни малозначимых проблем. 5-ки ещё могут подняться вверх во время триажа, но 6 и 7 – это просто кладбище, куда складываем то, что знаем, но чему в нашей жизни решения, скорее всего, не будет</p>

<h3 id="расчёт-важности">Расчёт важности</h3>

<p>Чтобы рассчитать важность, нужно ввести ранжирование сценариев (юз кейсов)</p>

<table>
<thead>
<tr>
<th>использование</th>
<th>описание</th>
</tr>
</thead>

<tbody>
<tr>
<td>обычное</td>
<td>типичный сценарий работы</td>
</tr>

<tr>
<td>—-</td>
<td>частый сценарий работы, хоть и не на каждый день</td>
</tr>

<tr>
<td>—-</td>
<td>сценарий, которого придерживается сколько-нибудь заметная доля пользователей, даже если нам это кажется странным или неудобным</td>
</tr>

<tr>
<td>—-</td>
<td>сценарий, который может возникать не часто, но по-прежнему является И ожидаемым, И допустимым. Например, смена часовых поясов или что собеседники никогда одновременно не появляются онлайн, или собеседник никогда не использует <code>Wi-Fi</code> и т.п.</td>
</tr>

<tr>
<td>не обычное</td>
<td>сценарий маловероятный, но при этом продукту нарочно плохо не делали. Например, пользователь не будет выходить в онлайн 8 месяцев, а потом появится</td>
</tr>

<tr>
<td>—-</td>
<td>редко возможное состояние системы, на которой работаем. Например, очень старая, но ещё поддерживаемая версия ОС</td>
</tr>

<tr>
<td>специальное</td>
<td>продукт используется в стресс-режиме. Например, пытается отправить много больших файлов одновременно на плохой сети</td>
</tr>

<tr>
<td>—-</td>
<td>само состояние системы стрессовое. Например, осталось мало свободного места или состояние сети на грани живого и может десятки раз в минуту переключаться</td>
</tr>

<tr>
<td>абсурдное</td>
<td>продукт используется в сценарии, который не закладывался. Например, отправка текста «Войны и Мира» в одном сообщении</td>
</tr>

<tr>
<td>—-</td>
<td>система находится в состоянии, которое не закладывалось. Например, используется сильно кастомизированная ОС: от запуска на ГУ автомобиля до васянского супер кастома</td>
</tr>
</tbody>
</table>

<p>«Абсурдный» не означает «бессмысленный». В основном это ситуации, которые просто не планировались, не обсуждались. Но то, что сегодня абсурдно, завтра может стать новой задачей. А может и не стать.</p>

<table>
<thead>
<tr>
<th>функциональность</th>
<th>использование</th>
<th align="right">важность</th>
</tr>
</thead>

<tbody>
<tr>
<td>ключевая</td>
<td>обычное</td>
<td align="right">1</td>
</tr>

<tr>
<td>—-</td>
<td>не обычное</td>
<td align="right">1</td>
</tr>

<tr>
<td>—-</td>
<td>специальное</td>
<td align="right">3</td>
</tr>

<tr>
<td>—-</td>
<td>абсурдное</td>
<td align="right">5</td>
</tr>

<tr>
<td>важная</td>
<td>обычное</td>
<td align="right">1</td>
</tr>

<tr>
<td>—-</td>
<td>не обычное</td>
<td align="right">3</td>
</tr>

<tr>
<td>—-</td>
<td>специальное</td>
<td align="right">5</td>
</tr>

<tr>
<td>—-</td>
<td>абсурдное</td>
<td align="right">7</td>
</tr>

<tr>
<td>вспомогательная</td>
<td>обычное</td>
<td align="right">2</td>
</tr>

<tr>
<td>—-</td>
<td>не обычное</td>
<td align="right">3</td>
</tr>

<tr>
<td>—-</td>
<td>специальное</td>
<td align="right">5</td>
</tr>

<tr>
<td>—-</td>
<td>абсурдное</td>
<td align="right">7</td>
</tr>

<tr>
<td>не функциональное</td>
<td>обычное</td>
<td align="right">3</td>
</tr>

<tr>
<td>—-</td>
<td>не обычное</td>
<td align="right">5</td>
</tr>

<tr>
<td>—-</td>
<td>специальное</td>
<td align="right">7</td>
</tr>

<tr>
<td>—-</td>
<td>абсурдное</td>
<td align="right">7</td>
</tr>
</tbody>
</table>

<p>Следующим этапом прибавляется или вычитается уровень влияния на пользователя конкретной проблемы. Вычитание означает, что проблема повышается в серьёзности, прибавление – понижается.</p>

<table>
<thead>
<tr>
<th>тип</th>
<th align="right">влияние</th>
</tr>
</thead>

<tbody>
<tr>
<td>отказ в обслуживании (падение, зависание, повторяющийся <code>ANR</code>)</td>
<td align="right">-1</td>
</tr>

<tr>
<td>неудобно использовать продукт и нет обходного пути</td>
<td align="right">0</td>
</tr>

<tr>
<td>неудобно использовать продукт, но есть обходной путь</td>
<td align="right">+1</td>
</tr>

<tr>
<td>не мешает пользователю вовсе</td>
<td align="right">+2</td>
</tr>
</tbody>
</table>

<p>Да, серьёзность надписи <code>Mikrosoft</code> прямо на главном экране продукта – это <code>5</code>: не функциональная область, обычное использование, не мешает пользователю вовсе. И тут менеджер уже должен менять приоритет. Тестировщик может попросить менеджера это сделать.</p>

<h2 id="виды-тестирования">Виды тестирования</h2>

<h3 id="глобально">Глобально:</h3>

<p><strong>Полное регрессионное</strong></p>

<p>Оно же «фул регрес»: продукт проверяется от и до без учёта того, что в нём менялось или не менялось. Включает как функциональное, так и не функциональное тестирование. Очень дорогое (в человекочасах), потому не может проводиться постоянно. Согласовываем фул регресс на 2-3 раза в год. Чаще нет смысла из-за во-первых дороговизны, во-вторых не накапливается достаточно изменений, которые бы могли задевать разные области.</p>

<p>У фула две задачи:
– сформулировать текущее состояние продукта и создать этим отправную точку будущих проверок. Чтобы не было «да туда 100 лет не заглядывали, может оно уже 10 релизов как не работает»
– обнаружить накопившиеся проблемы, которые не были обнаружены в промежуточные проверки</p>

<p><strong>Регрессионное</strong></p>

<p>Обычный “регресс”. Разработчик ставит что-то в <code>InTest</code> и, если считает нужным, добавляет в комментариях, что ещё нужно проверить дополнительно к тому, что описано в самой задаче изначально. Вне зависимости от того, оставил разработчик свою просьбу или нет, тестировщик проверяет исправление/реализацию как того, что прописано в задаче, так и «окружающей функциональной области». Короткий интест может занять часы проверок, если задевает несколько областей разом.</p>

<p>При регрессионном тестировании тестировщик также делает функциональные и <strong>часто, но не всегда</strong>, не функциональные тесты. Например, если правилось падение, то тратить время на вычитку текстов не нужно.</p>

<p>Все промежуточные (между фул регрессами) тесты – это обычные регрессы. Потенциально, из-за того что проблемы могут появиться в местах, о которых ни тестировщик, ни разработчик не подумали, приходится несколько раз в год делать фул. Или раз в пару лет, если дела идут прям хорошо.</p>

<p><strong>Финальное</strong></p>

<p>Не является общепринятым термином, но его всё равно часто используют. Под финальным подразумевается достаточно поверхностный регресс после <code>код фриза</code>. Поверхностный он потому что проверка доработки замечаний, выявленных при регрессионном делается тоже обычным регрессионным. То есть финальное лишь отвечает на вопрос, успело ли что-то отъехать глобально. Такое бывает в сложных системах, когда для сборки, пригодный для финального теста, потеряли какой-нибудь коммит, перепутав ветки или что-то в таком роде. Как избегать эту проблему – это головная боль разработчиков, тестирование этого не решает.</p>

<p>Регресс будет хоть и поверхностный, но остаётся итеративным. То есть если в финальном тестировании нашлась проблема, которую решают исправить к релизу, то после исправления делается регресс этой области. А то и перезапуск всего финального тестирования, если разработчик посчитает, что фикс был не точечный.</p>

<p>Для финального тестирования создаётся набор тест кейсов, который называют <code>импакт планом</code> и в таком роде. Само формирование набора – это часть <code>импакт анализа</code>.</p>

<p><em><strong>ВАЖНО 1:</strong></em> в ситуации «потеряли коммит», когда финальное тестирование этого не обнаружило в виду низкого его погружения, <code>QA</code> не несёт за это ответственности. Потому что <code>QA</code> не отвечает за процессы других команд.</p>

<p><em><strong>ВАЖНО 2:</strong></em> и хотя фиксы после финального могут быть и их могут включить в релиз, нужно искать причины, почему эти фиксы понадобились вообще и устранять причины. Они хоть и могут быть, но это очень плохая практика. Лучше планировать сразу <code>HF</code> или даже <code>MR</code>. Ситуацию, когда финальное не находит вообще ничего, считаем маловероятной</p>

<p><strong>Импакт</strong></p>

<p>Чтобы проверять только то, что могло быть задето в релизе, оставив за скобками то, что точно не трогали, тестировщик собирает все сценарии, которые связаны с теми функциональными областями, которые правились в релизе. Дополнительно тестировщик спрашивает мнения разработчиков о том, что может быть задето и добавляет сценарии проверок этих областей (если вдруг оказалось, что разработчик добавил новых сведений). Это называется <strong>импакт анализ</strong>.</p>

<p>Далее тестировщик проверяет эти сценарии. Это называется <strong>импакт тестирование</strong> или <strong>тестирование по импакту</strong>. Но все говорят просто <strong>импакт</strong>, подразумевая как раз это.</p>

<p><strong>Приёмочное</strong></p>

<p>Делается для <code>RC</code>. Это набор тестов, включающий <strong>базовые</strong> проверки всех функциональных областей продукта в <strong>обычных</strong> сценариях использования. К нему добавляются проверки по импакту. То есть приёмочное – это тоже, что и финальное, плюс базовые проверки других компонентов.</p>

<p>Двойная работа требуется из-за того, что бывают ситуации, когда обфускаторы ломают то, что работало. Или разработчик использует другие версии тулкитов, отличные от тех, что на сборочном конвеере. Причины изменения поведений у <code>RC</code> могут быть разные и это должно устраняться не <code>QA</code>.</p>

<p>В идеальном случае <strong>финальное тестирование</strong> не проводится. Сразу после перепроверки фиксов после фриза, выкатывается <code>RC</code>.</p>

<h2 id="в-общих-чертах">В общих чертах:</h2>
<ul><li><p><strong>Функциональное</strong>: как работает техническая штука. Запускается ли вообще приложение, работает ли звонок, ходят ли сообщения. Здесь не учитывается <code>UI</code> и <code>UX</code>, даже если всё совсем плохо. Функциональное нужно, чтобы убедиться, нужно ли копать вообще или пока копать рано. Либо, если фича существовала раньше, проверяется, не сломалась ли она</p></li>

<li><p><strong>Не функциональное</strong>: подразумеваем <code>UI</code> и <code>UX</code> в основном. Потому что околотехнические тесты лучше выделить в свои виды. Главное, что здесь имеется в виду — проверяется, что уже работающая фича удобна, очевидна, красива. Нет никакой нужды делать нефункциональное до реализации фичи. Даже когда речь о «там просто баг, сейчас поправлю» – всё равно не нужно проверять. Потому что часто вдруг оказывается, что просто так не поправить и нужны значительные доработки или даже переделки. А значит время, затраченное на сверку с макетами было потрачено зря</p></li>

<li><p><strong>Локализационное</strong>: формально является не функциональным, т.к. тоже про <code>UI</code>, но выделяю отдельно, т.к. у него свой подход. Это проверка, что тексты не просто правильно написаны, а что они ещё и влезают. Отдельно оно проводится лишь когда добавляется новый перевод или было существенное изменение существующего перевода. В прочих же случаях оно полностью перекрывается не функциональным. Подводные камни локализационного:</p>
<ul><li><p>длина слов в разных языках разная, а в некоторых языках слова принято сцеплять, выбрасывая пробелы. Т.к. пробелы для ОС являются триггером для переноса не влезающего слова, может получиться, что слова будут вылезать за пределы своих элементов</p></li>

<li><p>RLT. Например, арабские языки. Хотя тексты развернуть не проблема, часто стреляет то, что некоторые надписи являются картинками и про них тоже нужно помнить. Кроме того, нужно согласовывать, разворачивать ли интерфейс приложения (обычно нет)</p>
<ul><li>вторая проблема RTL в том, что один участник может собою развернуть других. К примеру, его имя написано с управляющим символом RTL юникода. Если его имя попадает в абзац текста (или, например, в перечисление «А, Б, В печатают…»), может развернуть всех</li>
<li>стрелки «Далее» и «Назад» в мастере первоначальной настройки может развернуть, опять же</li></ul></li>

<li><p>часто разработчики могут несколько раз вставить одно и тоже слово, скажем «Да», а потом найти, что оно уже есть и переиспользовать ранее существовавший ресурс. «Осиротевший» ресурс остаётся на месте и может получиться, что уточнили перевод сироты, а вот реально используемый потеряли</p></li>

<li><p>смежная ситуация: переиспользуется ресурс, который в одном языке означает одно и тоже, но в при переводе нужно разделить ресурс на более чем одно значение. Например <code>удалённый</code>: <code>remote</code> и <code>deleted</code></p></li>

<li><p>переводы делаются, в основном, не видя реально приложения. Так что нужно проверять не только что фраза переведена, а что она переведена с учётом контекста</p></li>

<li><p>при расчёте сроков нужно держать в голове, что придётся все задетые ресурсы как-то вызывать. Это не просто «ну гляньте за полчаса». Некоторые ресурсы вообще нельзя будет вызвать со стороны тестирования без привлечения разработчиков и даже инфраструктуры</p></li></ul></li>

<li><p><strong>Тестирование производительности</strong>: включает все виды проверок от просто «по ощущениям», до нагрузочных и стресс тестов. Расчёт потребляемого трафика тоже здесь. Не может быть обыденной проверкой, по типу функционального тестирования. Для перформанс тестов нужно заранее подготавливать окружение. А для этого нужно заранее понять, что хотим узнать. Для этого придётся проговаривать всё словами и, в итоге, сформулировать цели. Способы же проверки формулируются только после формулирования целей</p></li></ul>

<h2 id="по-пониманию-продукта">По пониманию продукта:</h2>
<ul><li><p><strong>Чёрный ящик</strong>: когда ничего не понятно, и нужно разобраться, как это работает. Выпускаемый нами самими продукт НИКОГДА не может проверяться как чёрный ящик. Каждый тестировщик должен разобраться в каждой фиче продукта и понимать, как именно это должно работать и как оно работает на самом деле. Если тестировщик не желает разбираться, тестировщик не должен работать в команде</p></li>

<li><p><strong>Белый ящик</strong>: когда тестировщик понимает, что к чему. В пределе, но не обязательно — читает и понимает исходный код. В целом достаточно того, что тестировщик представляет механизмы работы ОС и продукта. Это помогает предполагать опасные/сложные места и начинать проверку с них. Как правило, в простых местах разработчик не ошибается, а опасные как раз может не учесть. Как итог – ошибки находятся сразу же</p></li></ul>

<p>Задача лида – сделать продукт понятным тестировщику. Задача тестировщика – приложить усилия, чтобы разобраться в продукте и в его взаимодействии с ОС.</p>

<h1 id="задачи">Задачи</h1>

<h2 id="жизненный-цикл-задачи">Жизненный цикл задачи</h2>

<p>Вне зависимости от типа задачи – задача, пожелание, баг – она проходит один и тот же жизненный цикл.</p>
<ul><li><p><strong>завели в баг трекере</strong>. Заводить может, понятно, не только тестировщик, а любой участник команды. При описании нужно помнить, что проверять может кто угодно. Нужно хоть как-то описать задачу, чтобы понять, о чём идёт речь и через год</p></li>

<li><p><strong>принятие решения о реализации</strong>. Вполне может быть, что задачу нельзя, невозможно, нет смысла и т.п. реализовывать и ответственное лицо (в основном разработчик, если речь про баги) может отклонить задачу или запросить больше информации. Нужно написать, почему именно отклонено или какую информацию нужно добавить и выставить в <code>InTest</code>. Разработчик <strong>не может закрыть баг</strong>, даже если не согласен. Его инструмент – отклонение с объяснением</p></li>

<li><p><strong>реализация</strong>, если принято решение о реализации</p></li>

<li><p><strong>отправка на проверку</strong>. По умолчанию все проверки делает QA, вне зависимости от того, кто задачу создал. Так что разработчик ставит <code>InTest</code> и отправляет на тестировщика</p></li>

<li><p><strong>проверка</strong>. Тестировщик, если может, проверяет реализацию. Если автор не он, то он общается с автором (если возможно) и всё равно проверяет сам. Если задача была очень специфична и явно не для QA, то тестировщик вешает её на заказчика со своим комментарием, почему это сделано.</p></li></ul>

<p>Интеграция новых методов из натива или переход с устаревших на их замену и подобные штуки от разработки не являются “слишком специфичными”, они всё равно в ответственности тестировщика. В этом случае тестировщик делает регресс по фиче, даже если визуально ничего не изменилось.</p>

<h2 id="просьбы">Просьбы</h2>

<p>Нормальным и даже рекомендуемым поведением является оформление просьбы что-то проверить в виде задачи. Чаще всего просят тестировщика что-то сделать. На созвоне или в переписке о чём-то просишь и, если тестировщик говорит, что да, может это сделать, то завести ему соответствующую задачу и поставить в <code>InTest</code>.</p>

<p>Благодаря такой формализации тестировщик и вряд ли забудет о задаче, так ещё сформулирует ответ в ней же. А значит все смогут этот ответ прочесть. К тому же всегда можно будет вернуться к задаче и вспомнить детали.</p>

<p>Просьбы оформлять в виде задач в багтрекере – это хорошо и правильно.</p>

<h2 id="триаж">Триаж</h2>

<p>Задачи в баг трекере будут накапливаться. Некоторые будут решены, некоторые решены не будут. Раз-два в год, чаще нет смысла, нужно проводить триаж. То есть проверять, актуальны ли ещё задачи и нужно ли что-то поднять из подвала наружу.</p>

<p><strong>Этап 1</strong>. Тестировщики проверяют все открытые задачи.</p>

<p>Те из них, которые более не актуальны, закрываются.</p>

<p>Те, которые актуальны, обновляются с указанием, на какой версии проверено.</p>

<p>Те, которые актуальны, но чуть изменилось воспроизведение (например с тех пор изменился экран или экран переехал и теперь надо иначе его вызывать), обновляются под новую реальность.</p>

<p>Если удалось найти ещё способы получить эту же проблему, кроме той, что записано, это также добавляется.</p>

<p>Если новое поведение проблемы таково, что её <code>важность</code> повышается, она <em>добавляется в список проблем, на которые нужно обратить внимание</em>.</p>

<p><strong>Этап 2</strong>. Лиды и PM рассматривают <em>сначала список проблем. на которые нужно обратить внимание</em>, даже если тег <code>Triaged</code> установлен. Если окажется, что проблема действительно стала более важной, тег снимается. Задача рассматривается как новая. Имеется в виду, что, возможно, нужно будет ещё и приоритет переопределить</p>

<p>Далее просматривается список оставшихся в живых проблем <strong>без тега <code>Triaged</code></strong> и принимаетя решение, что с ними делать.</p>

<p>Если проблема такая, что точно никогда ничего делать с этим не будем, на неё ставится тег <code>Triaged</code>. Таким образом тестировщики её будут актуализировать каждый год, но на второй этап она никогда не попадёт (если у неё не изменилось поведение и она не попала в список “обратите внимание”).</p>

<p>Если проблема такая, что её бы хорошо поправить, она добавляется в скоуп релиза. Релиз не обязательно ближайший. Это может быть отдельный релиз, <code>MR</code>, к примеру.</p>

<h1 id="философия">Философия</h1>

<p>В этом разделе попытаюсь ответить на вопросы, которые возникают в головах и иногда проговариваются вслух.</p>

<h3 id="почему-тестировщик-находит-проблемы-в-ранее-проверенном">Почему тестировщик находит проблемы в ранее проверенном</h3>

<p>К примеру, почему в финальном тестировании находятся новые проблемы, хотя именно эти области и так проверялись раньше. Может возникнуть желание обвинить тестировщика в невнимательности.</p>

<p>В самом простом случае тестировщик просто правда плохо работает. С такими нам не по пути. Но хороший тестировщик тоже допускает такие косяки. Основные причины:</p>
<ul><li><strong>ранее устранённые проблемы освобождают время проверок</strong>. Скажем, из-за некой баги пришлось потратить 3 часа на её воспроизведение, на анализ. Эту проблему устранили и теперь как бы появилось «лишних» 3 часа в обычном рабочем дне, которые тестировщик непременно инвестирует сюда же – в проверки.</li></ul>

<p>Может звучать не правдоподобно, но это действительно самая популярная причина. Собственно, почти все обнаруженные на поздних этапах проблемы – это «лишнее» время. В том числе потому <code>HF</code> и <code>MR</code>  существуют и потому они планируются заранее, ещё до самого основного релиза.</p>
<ul><li><p><strong>область была затронута после проверок</strong>. И хорошо, когда тестировщик или разработчик это понимают и перепроверяют, но так ведь не всегда бывает. К тому же проблема может быть такой, что в простом сценарии она не ловится и без честного регресса её не поймать</p></li>

<li><p><strong>устранение ошибки приводит к раскрытию другой</strong>. Не редка ситуация, когда одна ошибка маскирует другую</p></li>

<li><p><strong>люди устают</strong>. Могло быть так, что в прошлый раз тестировщик был уставшим и с рассеянным вниманием. Отличие от тех, с кем нам не по пути в том, что хороший тестировщик может иногда уставать и каждый раз это прям новость. “Ничего себе, как так?!”</p></li>

<li><p><strong>тестировщик потерял интерес</strong>. Это происходит со всеми. Когда проверяешь одно и тоже из раза в раз, пропадает чувство новизны. Нам надоедают новые компы и машины, чего уже говорить о просто программах</p></li></ul>

<p><em>Личное</em> замечание. Оно наверняка считается сексистским и каждый с ним вправе не согласиться. Девушки теряют интерес сильно позже, чем парни. Они лучше выполняют одни и те же работы и сильно дольше остаются внимательными к деталям. Что, разумеется, не означает, что им не нужно давать новое.</p>
<ul><li><p><strong>замыленный взгляд</strong>. Когда тысячу раз видел одно и тоже поведение, оно становится привычным. А вот пользователь может не согласиться. Когда тысячу раз делал одни и те же проверки, другие сценарии перестают приходить в голову, потому что другое применение уже даже не ожидаешь</p></li>

<li><p><strong>слишком хорошее знание продукта</strong>. Когда тестировщик слишком хорошо изучит продукт, он начинает предсказывать его поведение. Это очень помогает в обнаружении проблем новых фич, но мешает в обнаружении проблем в достаточно привычных сценариях. «Ну да, падение, если поворачивать телефон во время удаления контактов, ну а чего вы ждали, особенности работы». Только пользователи ждали не понимания причин, а чтобы просто не падало</p></li>

<li><p><strong>отрыв от своих пользователей</strong>. Не редко бывает, что пользователи используют продукт таким образом, каким тестировщик не использовал никогда и не догадывался, что кто-то так делает</p></li></ul>

<h3 id="почему-не-проверили-вот-это-это-же-было-быстро">Почему не проверили вот это, это же было быстро</h3>

<p>Каждую отдельную ситуацию проверить быстро. Но секунды создают минуты, затем часы и дни. Отдельных сценариев прям много, прям сотни. А когда релиз делается ради фичи X, то фичу Y будут проверять сильно реже и вообще потом. Если нужно вклиниться в список задач тестировщика, лучше всего просто попросить об этом. А когда просишь – нужно убедиться, что просьба услышана.</p>

<p>Повторюсь снова: не грех и напоминать о просьбе. У тестировщика тоже есть работа и жизнь и он может просто забыть об обещании. Напоминание его не оскорбит, зато поможет проекту</p>

<p>Ну и лучше всего прочитать раздел <code>Просьбы</code> и сделать так, как там написано</p>
]]></content:encoded>
      <guid>https://text.tchncs.de/umnik/o-testirovanii</guid>
      <pubDate>Thu, 08 Aug 2024 07:16:42 +0000</pubDate>
    </item>
    <item>
      <title>RuStore и поддержка разных архитектур</title>
      <link>https://text.tchncs.de/umnik/rustore-i-podderzhka-raznykh-arkhitektur</link>
      <description>&lt;![CDATA[А мужики знают,  что лежат в RuStore?&#xA;&#xA;    Не так давно в RuStore завезли Signal. И это (по крайней мере сейчас) оригинальное приложение. Я даже упоминал об этом на lor.sh, и люди посчитали, что это поддельное или пропатченное приложение. Но нет, обновление из RuStore без проблем установилось поверх существующего оригинального приложения, что означает, что это тоже оригинальное. Ну, либо VK смогли украсть закрытый ключ подписи, конечно.&#xA;!--more--&#xA;    Всё было ничего до недавнего времени, пока не появилось обновление Signal, несовместимое с текущей версией. И я испугался, что VK пытается сейчас уже раздавать подделку, из-за чего и сел разбираться.&#xA;&#xA;    Вытянул приложение с личного телефона, с эмулятора и из RuStore и сравнил их. Приложение в RuStore имеет оригинальную подпись производителя:&#xA;&#xA;RuStore при выкачивании apk даёт имя 0.apk&#xA;&#xA;    Да что там говорить, это буквально один и тот же файл, который я добыл из GPlay:&#xA;&#xA;X — это установленный из GPlay&#xA;&#xA;    Но что за файл? Почему люди подозревают, что что-то здесь не так, почему приложение не устанавливается и RuStore пишет сообщение о несовместимости?&#xA;&#xA;Выглядит крайне подозрительно. Оригинал ведь совместим&#xA;&#xA;Вполне справедливые подозрения в подделке&#xA;&#xA;    Дело в том, что приложение в RuStore было загружено из стороннего магазина — из Aptoide. Что, кстати, немного забавно, ведь сам RuStore защищается от того, чтобы из него приложениях могли тянуть.&#xA;&#xA;Правильно ли так делать?&#xA;&#xA;    Так вот в Aptoide была загружена версия более старшая, чем у пользователей, но под архитектуру Intel:&#xA;&#xA;Теперь понятно, почему не устанавливалось на телефоны&#xA;&#xA;    Таких смартфонов сейчас уже не осталось, на сколько я знаю, а значит это версия скорее для эмуляторов. Кто-то вытянул с эмулятора Signal и загрузил в Aptoide. А RuStore спёр её к себе. Только ошибка VK заключается в том, что они не умеют разделять версии по архитектуре процессора (важно для нативного кода) и просто всегда отдают самую старшую.&#xA;&#xA;    Итог закономерен — RuStore предлагает версию с бОльшим version code, но под другую архитектуру процессора. И у пользователей она не устанавливается. Понятное дело, что в GPlay такого нет и тот отдаёт всегда правильную. Но мало того, свободный F-Droid тоже умеет понимать архитектуру и отдаёт правильную. А бедная инди компания VK не смогла это учесть. В общем, хочу успокоить пользователей — приложение не поддельное. Это просто VK вот так работает.&#xA;&#xA;    Пока писал эту статью, произошли изменения:&#xA;&#xA;Aptoide убрал Signal под x8664&#xA;RuStore, видимо, убрал вслед за ними. Либо, как вариант, мне прилетела более старшая версия из GPlay и только поэтому RuStore перестал предлагать обновиться&#xA;&#xA;    Резюмируем. Signal в RuStore настоящий (пока?), но магазин пока не готов к реальности :)]]&gt;</description>
      <content:encoded><![CDATA[<p><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTsGw2uTWFaBVRhOjdNsLi4ypgzu8bEIVOo0v7LWtm4TFEekivBK0J0Qvb2ggasSSwfTmixgGC6H6n9UKlEhzFtWZaH8CQXQ3FcJmmP4Eo9tqSswiiV8Z7g_asEMdUDCwAyoZ7R-cFVKrruq2aw6H-v6KJV9LZAPrH3YZxdkGXs1xt4ORtNmUwgHF-SBmP/s956/Screenshot_20240326_120829.png" alt="А мужики знают,  что лежат в RuStore?"></p>

<p>    Не так давно в RuStore завезли Signal. И это (по крайней мере сейчас) оригинальное приложение. Я даже упоминал об этом на <a href="https://lor.sh/@umnik" rel="nofollow">lor.sh</a>, и люди посчитали, что это поддельное или пропатченное приложение. Но нет, обновление из RuStore без проблем установилось поверх существующего оригинального приложения, что означает, что это тоже оригинальное. Ну, либо VK смогли украсть закрытый ключ подписи, конечно.

    Всё было ничего до недавнего времени, пока не появилось обновление Signal, несовместимое с текущей версией. И я испугался, что VK пытается сейчас уже раздавать подделку, из-за чего и сел разбираться.</p>

<p>    Вытянул приложение с личного телефона, с эмулятора и из RuStore и сравнил их. Приложение в RuStore имеет оригинальную подпись производителя:</p>

<p><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAqCpM9db7P3qttOziHV0JRgNmLv1Dg4fuvi23ghwDX9cslRrnV5vporMrgWHKE_JmVY-hdvrBhLzI-NwTAQCuaMadkcmo2eqz2Gotbv9YheUGRxstPXM5HAhI7wlilDcvLPHsTEMsxlIfAJYSnOBj1WdMPOlh3IS8M04bLI4UIIqr9vIwuTay-5kyXKV8/s821/b3usy5Y.png" alt="RuStore при выкачивании apk даёт имя 0.apk"></p>

<p>    Да что там говорить, это буквально один и тот же файл, который я добыл из GPlay:</p>

<p><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZW-LJHZN1iKteLfaKlXPymtewhKccJIvFubT-RLLO1AKAjQVXeo_BsrS5cbD4K5rQ0xDe8TfaC0szZ7M8gbsL1eidAhMM-dNHuOAfeG8DHymH8bwNGl4eOhMP2Ypmjrs3SYVfDmNanSpaxbtnKa7bcmaut0iNYDt7Sv5PNvQhf5k0WKYK_J0s44gXIk_G/s664/Screenshot_20240326_114148.png" alt="X — это установленный из GPlay"></p>

<p>    Но что за файл? Почему люди подозревают, что что-то здесь не так, почему приложение не устанавливается и RuStore пишет сообщение о несовместимости?</p>

<p><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmlmC3QfIXBSVIzCeeCDqBrJ28K4ZV0WWJ693lOuopBRoqK_3ya2CSp1p4YKPwEpcQhpIkTAnyGl6pRxyRBIf1MyuOlbTq9xtoZSRTw43rM8WL2Mq7Zhf3EACkrENAikXkYxDcJaDPtZDRDEQ17g-5DPORVnmL7uO6e3a6FxrEi2_YygMd4sJvZEsUrRjg/s864/Screenshot_20240326-114308.png" alt="Выглядит крайне подозрительно. Оригинал ведь совместим"></p>

<p><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5lh3NY92IW6Ewe-AOMREgdj7uHo1SSl1Di03uhk-EeYrTYU7AKhkcC1P-9NQ9xVv1kSXWv5ilGQpS4i4_LKuStsfRyw7_a0ZKPyqSVwVuslBj3zjgHn3W1Zrr7PKmyUdX4bOnk3u7NqXR-jT4wnrVUeggxVKxl8MjyPEpOBg7SXt-D5-wWvfEinZ9jeVn/s1148/Screenshot_20240326_122932.png" alt="Вполне справедливые подозрения в подделке"></p>

<p>    Дело в том, что приложение в RuStore было загружено из стороннего магазина — из <a href="https://signal.ru.aptoide.com/app" rel="nofollow">Aptoide</a>. Что, кстати, немного забавно, ведь сам RuStore защищается от того, чтобы из него приложениях могли тянуть.</p>

<p><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHJrA0GlreGHH6rIBvMCKo1HhPxEf0dlyygcuyraOtI1ijHELB98r1lVdVYDsvUd7ihVKDJC_pOz0fq3xzcwWYtBBjwBYy80wAQK07Wmau07C_wKKHOhTHHH9DD4qgevpAIbSI4cwkj4CeiZ3u0PsU0Wp_e9hY9XojgkISMrWtLrC1sHcKTgAbTgf3Ba_f/s542/Screenshot_20240326_115416.png" alt="Правильно ли так делать?"></p>

<p>    Так вот в Aptoide была загружена версия более старшая, чем у пользователей, но под архитектуру Intel:</p>

<p><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKO2-nVhUwiie3285FdMx_aly-zqVS3mMfgM57mIbXqu98gAE0x4tExn1VORvR3MJy1A9qjHHUdZvI3GvB9jCCwWzw0eFFpcREFKCPtdDyiTVR9C-I3kRPqRSz6j91OMrG53ju7HpU2XXNnfwhQfB6Nklkfn7KXaADU8ZKxip4G1-hwUsY_N_Nob1YzVmx/s486/Screenshot_20240326_123951.png" alt="Теперь понятно, почему не устанавливалось на телефоны"></p>

<p>    Таких смартфонов сейчас уже не осталось, на сколько я знаю, а значит это версия скорее для эмуляторов. Кто-то вытянул с эмулятора Signal и загрузил в Aptoide. А RuStore спёр её к себе. Только ошибка VK заключается в том, что они не умеют разделять версии по архитектуре процессора (важно для нативного кода) и просто всегда отдают самую старшую.</p>

<p>    Итог закономерен — RuStore предлагает версию с бОльшим version code, но под другую архитектуру процессора. И у пользователей она не устанавливается. Понятное дело, что в GPlay такого нет и тот отдаёт всегда правильную. Но мало того, свободный F-Droid тоже умеет понимать архитектуру и отдаёт правильную. А бедная инди компания VK не смогла это учесть. В общем, хочу успокоить пользователей — приложение не поддельное. Это просто VK вот так работает.</p>

<p>    Пока писал эту статью, произошли изменения:</p>
<ul><li>Aptoide убрал Signal под x86_64</li>

<li><p>RuStore, видимо, убрал вслед за ними. Либо, как вариант, мне прилетела более старшая версия из GPlay и только поэтому RuStore перестал предлагать обновиться</p>

<p>Резюмируем. Signal в RuStore настоящий (пока?), но магазин пока не готов к реальности :)</p></li></ul>
]]></content:encoded>
      <guid>https://text.tchncs.de/umnik/rustore-i-podderzhka-raznykh-arkhitektur</guid>
      <pubDate>Tue, 26 Mar 2024 10:00:50 +0000</pubDate>
    </item>
    <item>
      <title>О паролях и парольных фразах</title>
      <link>https://text.tchncs.de/umnik/o-paroliakh-i-parol-nykh-frazakh</link>
      <description>&lt;![CDATA[В бложике описал известную проблему консольного клиента mariadb, который не может сожрать пароль, длинее 80 символов: https://lor.sh/@umnik/111828511992647563&#xA;&#xA;Это привело к небольшому, но полезному спору. На одной стороне я, с фразой в более 90 символов, на другой стороне уважаемый (не ирония, не шутка) в своих кругах человек, считающий, что это бессмысленно. Кстати, рекомендую подписаться на канал этого человека, если вы связаны с ИБ, он правда хорош (нет, не реклама :); да и какая реклама, если у него почти 8k человек): https://t.me/infosecmemes&#xA;!--more--&#xA;Предполагаю, что оппонент отталкивается от, в общем-то, правильного утверждения, что 18+ символов — это великолепный пароль, который уже не перебрать за разумное время.&#xA;&#xA;О парольных фразах&#xA;&#xA;Однако у меня не пароль, а парольная фраза (пассфраза). В чём разница:&#xA;&#xA;все слова, составляющие фразу - словарные. И хотя руками я их почти не ввожу, но если придётся — не будет с этим проблем. Читаешь следующее слово, скажем синий и просто пишешь, не ломая пальцы, вводя всякие !&#34;№;%:?*¡½^@#$¿⅛′˝ типичных паролей. Более того, читать можно много слов за раз: синий верблюд летит на запад. А ещё нет проблем использовать пассфразы в скриптах, т.к. не приходится переживать за экранирования&#xA;для пассфраз запоминаемость не является плохим свойством! Вместе с ассоциативностью связи с целевым ресурсом, это позволит вспомнить пассфразу без привлечения менеджеров паролей. Скажем, есть у вас контейнер VeraCrypt. Создали ассоциацию с Вера и сразу извлекаете из своей памяти пароль: Вера, Надежда, Любовь и мать их София. Жили в Риме. День памяти - 30 сентября.&#xA;&#xA;В общем-то всё такое же можно применить и к паролям, но:&#xA;&#xA;паролям характерно требовать использование разных регистров букв, чисел, иногда специальных символов. В пассфразах же главное — это БОЛЬШАЯ (с точки зрения паролей) длина, а не сложность. Пассфраза в 18 символов - это очень плохая пассфраза, никуда не годится&#xA;паролям характеро быть плохо запоминаемыми. Если пароль вводится каждый день и несколько раз в день - запомните без проблем. Но забудете, когда перестанете использовать. Личный пример: когда-то я работал в компании с доменными политиками и вводил доменный пароль много раз в день. Конечно я помнил свой последний пароль ещё несколько недель после увольнения. Но сейчас не могу вспомнить даже в совсем общих чертах, даже примерно. Не смогу даже сказать, был ли там восклицательный знак или цифра 3&#xA;&#xA;О рекомендациях NIST&#xA;&#xA;Предлагаю просто обратиться к рекомендациям NIST. Опираться буду на ещё черновую версию NIST SP 800-63 Digital Identity Guidelines. Если кому-то надо текущую, а не черновую, то -4 в ссылке замените на -3. Но всё равно эта черновая всё же станет стандартом, а ссылка не изменится.&#xA;&#xA;Нам нужен NIST Special Publication 800-63B&#xA;&#xA;Запоминаемый секрет — это то, что мы привыкли называть паролями или, если речь о цифрах, - пинами. Это всё то, что вы знаете (или способны заучить, будучи обычным человеком). Секретам нужно быть достаточно сложными, чтобы их было сложно распознать. См. раздел 5.1.&#xA;&#xA;минимальная длина должна быть не менее 8 символов&#xA;секреты длиной от 64 символов обязаны приниматься и корректно обрабатываться&#xA;   ограничения сверху NIST не накладывает, но наоборот, говорит, что должно принимать от пользователя столько, сколько пользователю удобно&#xA;должны приниматься все печатные символы ASCII, пробелы, а также символы юникода&#xA;допустимо (то есть не запрещено, но и не обязательно) отбрасывать вайтспейсы в начале и в конце ввода, как защиту от возможных опечаток. Но тогда и проверка на длину должна быть после отбрасывания&#xA;допустимо проверять пароль в обоих регистрах для первого символа, как ещё один способ исправления опечаток. Обращаю внимание - проверять оба регистра, а не безусловно приводить первый символ к какому-то регистру&#xA;проверять нужно каждый символ секрета, отсечка по длине недопустима&#xA;ЗАПРЕЩЕНО требовать секреты в смешанных регистрах&#xA;ЗАПРЕЩЕНО требовать специальные символы&#xA;ЗАПРЕЩЕНО требовать периодической смены секретов&#xA;   но если была утечка или выявлена компроментация - необходимо требовать смену секрета&#xA;&#xA;detailssummaryЗдесь жесть для тех, кто хочет шевеления волос на жопе/summary&#xA;&#xA;символы юникода считаются по code point, а не по code unit и не по графемам или ещё как-то&#xA;   что только усложняет лично мне понимание. Я бы хотел считать по графемам. Потому что 🐻‍❄️ — это один, два, три или четыре code points? Ведь ваш любимый ЯП и RFC по юникоду могут вкладывать разные смыслы в термин. В общем, я бы считал полярного медведя одним символом, потому что это тоже просто такая вот буква такого вот алфавита. Но чтобы было ещё хуже, вот:&#xA;   символы юникода должны быть нормализованы по формам KD (совместимая декомпозиция, NFKD) или KC (совместимая композиция, NFKD). См. рис. 6: https://www.unicode.org/reports/tr15/&#xA;      в NFKD символы упрощаются до похожих, но привычных. Скажем ¼ приводится к 1, / и 4, а ™ к t и m&#xA;      в NFKC, в дополнение к NFKD, ещё выполняется композиция, то есть обратная операция. Сначала декомпозируем для упрощения, а потом снова композируем для сведения. В вики в примере символ が сначала стал か и  ゙, а потом снова が. И если вам кажется, что NFKC просто ничего не делает в конечном итоге, то нет. Потому что ẛ̣ NFKD разложил на s, ̣ и `̇, а NFKC собрал в ṩ, см. всё тот же https://www.unicode.org/reports/tr15/&#xA;при этом вы, как разработчик ПО, где вот эти все чудеса происходят, обязаны предупредить пользователя, что вводимые им символы могут быть представлены иным способом, что может повлиять на успешность аутентификации&#xA;/details&#xA;&#xA;запрещено сохранять подсказки о пароле, доступные без должной проверки&#xA;   на мой взгляд, требование NIST не запрещает прямо показывать подсказки, но запрещает показывать их, если уж совсем никак пользователь себя не показал. Например, пользователь уже залогинен, пытается изменять настройки и вы запрашиваете пароль ещё раз для проверки. Сейчас показать подсказку можно. Но если он не был залогинен и пытается войти - подсказку нельзя показывать&#xA;запрещено вовсе в качестве подсказок запрашивать данные, которые можно узнать, типа клички первого домашнего животного&#xA;задаваемые пароли необходимо проверять по базе предсказуемых и переиспользуемых, но дополнительно МОЖНО (но не является обязательным) делать некоторые другие проверки, типа:&#xA;   есть в утечках&#xA;   словарные слова&#xA;   повторяемые символы и очевидные последовательности (aaaa, qwerty)&#xA;   слова, специфичные для окружения. например, название самого сервиса (mail.ru), логин и производные от логина&#xA;если пароль в чёрном списке, нужно прямо сказать об этом пользователю. Просто так посылать его нельзя&#xA;запрещается использовать чрезмерно большие чёрные списки. Что бы под этим не подразумевал NIST&#xA;сервис обязан иметь механизмы защиты от перебора (ограничение на попытки)&#xA;   само ограничение NIST ставит большим для нормального пользователя и маленьким для реального перебора: не более 100 попыток&#xA;разрешены механизмы детекта ботов, троттлинг запросов, ограничение по IP, метаданным и т.п.&#xA;   когда пользователь успешно вошёл, все &#34;накопленные&#34; счётчики недоверий должны быть сброшены для этого IP адреса&#xA;необходимо позволять использовать менеджеры паролей. Важно здесь то, что НЕОБХОДИМО РАЗРЕШАТЬ фичу вставки текста&#xA;необходимо разрешать показ секрета за звёздочками&#xA;   разрешать нужно не только пока кнопка мыши/палец держат кнопку, а именно переключение состояний&#xA;   запрещено сбрасывать состояние &#34;видимо&#34;, пока идёт ввод&#xA;для мобильных устройств разрешено (не требуется, не запрещено) кратковременно показывать вводимый символ и затем скрывать его за звёздочкой&#xA;&#xA;Для запоминаемых секретов NIST не выдвигает никаких требований к энтропии самих секретов, перекладывая отвественность на бэкэнд при их хранении (и к алгоритмам шифрования ещё)&#xA;&#xA;Почему так?&#xA;&#xA;Некоторые требования NIST выглядят странными. Ну как так - пароль без требования к разным регистрам букв, без требования чисел и спецсимволов? Но NIST отталкивается от человеческой природы. Ну вот лень нам порою делать правильно. NIST предлагает не по башке бить за это, а принять природу и поменять подход на такой, что даже если человек ленив, он всё равно сделает нормально.&#xA;&#xA;Ведь нет никакого запрета принимать специальные символы. Более того, их обязательно нужно уметь принимать.&#xA;&#xA;С другой стороны мы понимаем, что если не просить разнообразия символов, получим совсем говно. Однако:&#xA;&#xA;совсем говно должно отсекаться чёрными списками + правилами запрета повторений и последовательностей&#xA;длина паролей ограничивается снизу. Нет никаких запретов требовать от 16 символов, например. Главное, что не менее 8 и нет ограничений сверху&#xA;&#xA;Такие мягкие рамки подведут пользователя к как раз парольным фразам и менеджерам паролей. Второе опустим, а вот профиты первого:&#xA;&#xA;простота запоминания приведёт к тому, что пользователь не будет писать фразу на бумажке и класть под клавиатуру&#xA;он не будет перепробовать десять вариантов, как же он задавал, вторая заглавная или третья, или ещё как-то&#xA;пользователю будет не сложно запоминать даже достаточно длинные фразы&#xA;пользователю не нужно разбираться, 0 это или О. I это или l&#xA;их проще копировать. Выделение простых слов не вызывает проблем&#xA;их можно легко передать голосом другому человеку&#xA;   сколько угодно можно говорить, что диктовать пароль никогда не пригодится, но это до первой необходимости объяснить что-то своей матери&#xA;&#xA;Пример выше с Верой - это более 70 символов, но слушатель радио &#34;Вера&#34; уже запомнил его.&#xA;&#xA;Есть у парольных фраз ещё одно очень важное преимущество - их легко писать на &#34;проблемных&#34; устройствах. Например, попытаться залогиниться в веб сервисе на телевизоре или какой-нибудь PlayStation без подключения клавиатур и подобного. Потому что и в современных телевизорах, и в приставках, есть подсказки слов их остаётся только выбирать из предлагаемых.&#xA;&#xA;NIST прямо указывает, что нужно принимать 64+ символа и это нужно для фраз: https://pages.nist.gov/800-63-4/sp800-63b.html#memorizedsecrets При том что для русского языка это всего в среднем 9 слов и 8 пробелов между ними (при средней длине слова в 6 букв).&#xA;&#xA;Но парольные фразы не идеальны, есть у  них и проблемы, часть из которых худо-бедно можно приуменьшить:&#xA;&#xA;они, блин, длинные&#xA;   не считая менеджеров паролей, тут немного помогают клавиатуры смарт-устройств, которые без проблем позволяют добить слова. При чём это дёшево и работало даже на древних тупофонах и называлось T9 (земля ему пуховик)&#xA;эти же самые клавиатуры умных устройств могут заучивать последовательности слов (такое бывает, если софт писан жопой и автор не соблюдает правил ОС, под которую пишет)&#xA;   достаточно большое количество слов (9+ для русского языка при 64+ символах) во фразе помогает снизить или вовсе убрать урон&#xA;   от говнософта не спасут и пароли. Было время, когда Samsung устройства на Android охотно подсказывали пароли, потому что заучивали всё, что пишут с них, включая поля паролей. И понять, что это пароль всё же сильно проще, чем понять, что это одно из слов парольной фразы (кстати, это слово может быть и из серидины фразы)&#xA;парольные фразы тоже бывают очевидными и предсказуемыми&#xA;   NIST нигде не говорит, что стоп списки паролей не должны применяться и к фразам&#xA;   здесь, кстати, меньше 64 символов&#xA;&#xA;Фразы лучше паролей?&#xA;&#xA;Нет. Пароли - это почти также круто, как Чечня. Но людям тяжело делать хорошие пароли и соблюдать в целом правила и эти люди стали ипользовать дыры парольных политик для облегчения жизни себе и, как итог, злоумышленникам. Фразы стали лишь ответом на использование этих дыр.&#xA;&#xA;То есть если лично ты делаешь всё по красоте - 18 символов пароля с самыми извращёнными символами из юникода и вообще не знаешь этот пароль, а хранишь его в православном KeePass, на который ещё и минимум 2 фактора навешано; если ещё и на сами сервисы вешаешь вторые факторы, то нет никакой нужны использовать фразы.&#xA;&#xA;А я перешёл на фразы (когда это возможно) из-за ерунды - не смог однажды в скрипт передать пароль. То есть в итоге сделал, но пришлось внимательно расставлять экранирования. Это, кстати, было ещё во времена Windows и это было в batch. Если вам приходилось писать скрипты на batch, то вы поняли глубину моей душевной травмы.&#xA;&#xA;Но зачем настолько длинные, зачем 91 символ (с чего всё и началось)? Да не за чем. Просто стояло число 11 в генераторе и он сделал 11 слов. Вот и получилась такая длина - просто совпадение. Было бы 10, то я бы мог и не попасть на изначальную проблему mariadb клиента. Таким образом вся статья родилась из-за того, что просто стояло число 11 и я его не менял. Мне ведь всё равно, 90 там символов или 200. А с точки зрения NIST важно, что их больше 64]]&gt;</description>
      <content:encoded><![CDATA[<p>В бложике описал известную проблему консольного клиента mariadb, который не может сожрать пароль, длинее 80 символов: <a href="https://lor.sh/@umnik/111828511992647563" rel="nofollow">https://lor.sh/@umnik/111828511992647563</a></p>

<p>Это привело к небольшому, но полезному спору. На одной стороне я, с фразой в более 90 символов, на другой стороне уважаемый (не ирония, не шутка) в своих кругах человек, считающий, что это бессмысленно. Кстати, рекомендую подписаться на канал этого человека, если вы связаны с ИБ, он правда хорош (нет, не реклама :); да и какая реклама, если у него почти 8k человек): <a href="https://t.me/infosecmemes" rel="nofollow">https://t.me/infosecmemes</a>

Предполагаю, что оппонент отталкивается от, в общем-то, правильного утверждения, что 18+ символов — это великолепный пароль, который уже не перебрать за разумное время.</p>

<h3 id="о-парольных-фразах">О парольных фразах</h3>

<p>Однако у меня не пароль, а парольная фраза (пассфраза). В чём разница:</p>
<ul><li>все слова, составляющие фразу – словарные. И хотя руками я их почти не ввожу, но если придётся — не будет с этим проблем. Читаешь следующее слово, скажем <code>синий</code> и просто пишешь, не ломая пальцы, вводя всякие <code>!&#34;№;%:?*¡½^@#$¿⅛′˝</code> типичных паролей. Более того, читать можно много слов за раз: <code>синий верблюд летит на запад</code>. А ещё нет проблем использовать пассфразы в скриптах, т.к. не приходится переживать за экранирования</li>
<li>для пассфраз запоминаемость не является плохим свойством! Вместе с ассоциативностью связи с целевым ресурсом, это позволит вспомнить пассфразу без привлечения менеджеров паролей. Скажем, есть у вас контейнер <code>VeraCrypt</code>. Создали ассоциацию с <code>Вера</code> и сразу извлекаете из своей памяти пароль: <code>Вера, Надежда, Любовь и мать их София. Жили в Риме. День памяти - 30 сентября</code>.</li></ul>

<p>В общем-то всё такое же можно применить и к паролям, но:</p>
<ul><li>паролям характерно <em>требовать</em> использование разных регистров букв, чисел, иногда специальных символов. В пассфразах же главное — это БОЛЬШАЯ (с точки зрения паролей) длина, а не сложность. Пассфраза в 18 символов – это очень плохая пассфраза, никуда не годится</li>
<li>паролям характеро быть плохо запоминаемыми. Если пароль вводится каждый день и несколько раз в день – запомните без проблем. Но забудете, когда перестанете использовать. Личный пример: когда-то я работал в компании с доменными политиками и вводил доменный пароль много раз в день. Конечно я помнил свой последний пароль ещё несколько недель после увольнения. Но сейчас не могу вспомнить даже в совсем общих чертах, даже примерно. Не смогу даже сказать, был ли там восклицательный знак или цифра <code>3</code></li></ul>

<h3 id="о-рекомендациях-nist">О рекомендациях NIST</h3>

<p>Предлагаю просто обратиться к рекомендациям <a href="https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D1%81%D1%82%D0%B8%D1%82%D1%83%D1%82_%D1%81%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BE%D0%B2_%D0%B8_%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B9" rel="nofollow"><code>NIST</code></a>. Опираться буду на ещё черновую версию <a href="https://pages.nist.gov/800-63-4/" rel="nofollow"><code>NIST SP 800-63 Digital Identity Guidelines</code></a>. Если кому-то надо текущую, а не черновую, то <code>-4</code> в ссылке замените на <code>-3</code>. Но всё равно эта черновая всё же станет стандартом, а ссылка не изменится.</p>

<p>Нам нужен <a href="https://pages.nist.gov/800-63-4/sp800-63b.html" rel="nofollow"><code>NIST Special Publication 800-63B</code></a></p>

<p><strong>Запоминаемый секрет</strong> — это то, что мы привыкли называть паролями или, если речь о цифрах, – пинами. Это всё то, что вы знаете (или способны заучить, будучи обычным человеком). Секретам нужно быть достаточно сложными, чтобы их было сложно распознать. <a href="https://pages.nist.gov/800-63-4/sp800-63b.html#reqauthtype" rel="nofollow">См. раздел 5.1.</a></p>
<ul><li>минимальная длина должна быть не менее 8 символов</li>
<li>секреты длиной от 64 символов обязаны приниматься и корректно обрабатываться
<ul><li>ограничения сверху NIST не накладывает, но наоборот, говорит, что должно принимать от пользователя столько, сколько пользователю удобно</li></ul></li>
<li>должны приниматься все печатные символы ASCII, пробелы, а также символы юникода</li>
<li>допустимо (то есть не запрещено, но и не обязательно) отбрасывать вайтспейсы в начале и в конце ввода, как защиту от возможных опечаток. Но тогда и проверка на длину должна быть после отбрасывания</li>
<li>допустимо проверять пароль в обоих регистрах для <em>первого</em> символа, как ещё один способ исправления опечаток. Обращаю внимание – проверять оба регистра, а не безусловно приводить первый символ к какому-то регистру</li>
<li>проверять нужно каждый символ секрета, отсечка по длине недопустима</li>
<li>ЗАПРЕЩЕНО требовать секреты в смешанных регистрах</li>
<li>ЗАПРЕЩЕНО требовать специальные символы</li>
<li>ЗАПРЕЩЕНО требовать периодической смены секретов
<ul><li>но если была утечка или выявлена компроментация – необходимо требовать смену секрета</li></ul></li></ul>

<p><details><summary>Здесь жесть для тех, кто хочет шевеления волос на жопе</summary></p>
<ul><li>символы юникода считаются по code point, а не по code unit и не по графемам или ещё как-то
<ul><li>что только усложняет лично мне понимание. Я бы хотел считать по графемам. Потому что <code>🐻‍❄️</code> — это один, два, три или четыре code points? Ведь ваш любимый ЯП и RFC по юникоду могут вкладывать разные смыслы в термин. В общем, я бы считал полярного медведя одним символом, потому что это тоже просто такая вот буква такого вот алфавита. Но чтобы было ещё хуже, вот:</li>
<li>символы юникода должны быть нормализованы по формам KD (совместимая декомпозиция, NFKD) или KC (совместимая композиция, NFKD). См. рис. 6: <a href="https://www.unicode.org/reports/tr15/" rel="nofollow">https://www.unicode.org/reports/tr15/</a>
<ul><li>в NFKD символы упрощаются до похожих, но привычных. Скажем ¼ приводится к <code>1</code>, <code>/</code> и <code>4</code>, а <code>™</code> к <code>t</code> и <code>m</code></li>
<li>в NFKC, в дополнение к NFKD, ещё выполняется композиция, то есть обратная операция. Сначала декомпозируем для упрощения, а потом снова композируем для сведения. В вики в примере символ <code>が</code> сначала стал <code>か</code> и <code>゙</code>, а потом снова <code>が</code>. И если вам кажется, что NFKC просто ничего не делает в конечном итоге, то нет. Потому что <code>ẛ̣</code> NFKD разложил на <code>s</code>, <code>̣</code> и `<code>̇</code>, а NFKC собрал в <code>ṩ</code>, см. всё тот же <a href="https://www.unicode.org/reports/tr15/" rel="nofollow">https://www.unicode.org/reports/tr15/</a></li></ul></li></ul></li>

<li><p>при этом вы, как разработчик ПО, где вот эти все чудеса происходят, обязаны предупредить пользователя, что вводимые им символы могут быть представлены иным способом, что может повлиять на успешность аутентификации
</details></p></li>

<li><p>запрещено сохранять подсказки о пароле, доступные без должной проверки</p>
<ul><li><em>на мой взгляд</em>, требование NIST не запрещает прямо показывать подсказки, но запрещает показывать их, если уж совсем никак пользователь себя не показал. Например, пользователь уже залогинен, пытается изменять настройки и вы запрашиваете пароль ещё раз для проверки. Сейчас показать подсказку можно. Но если он не был залогинен и пытается войти – подсказку нельзя показывать</li></ul></li>

<li><p>запрещено вовсе в качестве подсказок запрашивать данные, которые можно узнать, типа клички первого домашнего животного</p></li>

<li><p>задаваемые пароли необходимо проверять по базе предсказуемых и переиспользуемых, но дополнительно МОЖНО (но не является обязательным) делать некоторые другие проверки, типа:</p>
<ul><li>есть в утечках</li>
<li>словарные слова</li>
<li>повторяемые символы и очевидные последовательности (<code>aaaa</code>, <code>qwerty</code>)</li>
<li>слова, специфичные для окружения. например, название самого сервиса (mail.ru), логин и производные от логина</li></ul></li>

<li><p>если пароль в чёрном списке, нужно прямо сказать об этом пользователю. Просто так посылать его нельзя</p></li>

<li><p>запрещается использовать чрезмерно большие чёрные списки. Что бы под этим не подразумевал NIST</p></li>

<li><p>сервис обязан иметь механизмы защиты от перебора (ограничение на попытки)</p>
<ul><li>само ограничение NIST ставит большим для нормального пользователя и маленьким для реального перебора: не более 100 попыток</li></ul></li>

<li><p>разрешены механизмы детекта ботов, троттлинг запросов, ограничение по IP, метаданным и т.п.</p>
<ul><li>когда пользователь успешно вошёл, все “накопленные” счётчики недоверий должны быть сброшены <em>для этого IP адреса</em></li></ul></li>

<li><p>необходимо позволять использовать менеджеры паролей. Важно здесь то, что НЕОБХОДИМО РАЗРЕШАТЬ фичу вставки текста</p></li>

<li><p>необходимо разрешать показ секрета за звёздочками</p>
<ul><li>разрешать нужно не только пока кнопка мыши/палец держат кнопку, а именно переключение состояний</li>
<li>запрещено сбрасывать состояние “видимо”, пока идёт ввод</li></ul></li>

<li><p>для мобильных устройств разрешено (не требуется, не запрещено) кратковременно показывать вводимый символ и затем скрывать его за звёздочкой</p></li></ul>

<p>Для запоминаемых секретов NIST не выдвигает никаких требований к энтропии самих секретов, перекладывая отвественность на бэкэнд при их хранении (и к алгоритмам шифрования ещё)</p>

<h3 id="почему-так">Почему так?</h3>

<p>Некоторые требования NIST выглядят странными. Ну как так – пароль без требования к разным регистрам букв, без требования чисел и спецсимволов? Но NIST отталкивается от человеческой природы. Ну вот лень нам порою делать правильно. NIST предлагает не по башке бить за это, а принять природу и поменять подход на такой, что даже если человек ленив, он всё равно сделает нормально.</p>

<p>Ведь нет никакого запрета принимать специальные символы. Более того, их обязательно нужно уметь принимать.</p>

<p>С другой стороны мы понимаем, что если не просить разнообразия символов, получим совсем говно. Однако:</p>
<ul><li>совсем говно должно отсекаться чёрными списками + правилами запрета повторений и последовательностей</li>
<li>длина паролей ограничивается снизу. Нет никаких запретов требовать от 16 символов, например. Главное, что не менее 8 и нет ограничений сверху</li></ul>

<p>Такие мягкие рамки подведут пользователя к как раз парольным фразам и менеджерам паролей. Второе опустим, а вот профиты первого:</p>
<ul><li>простота запоминания приведёт к тому, что пользователь не будет писать фразу на бумажке и класть под клавиатуру</li>
<li>он не будет перепробовать десять вариантов, как же он задавал, вторая заглавная или третья, или ещё как-то</li>
<li>пользователю будет не сложно запоминать даже достаточно длинные фразы</li>
<li>пользователю не нужно разбираться, 0 это или О. I это или l</li>
<li>их проще копировать. Выделение простых слов не вызывает проблем</li>
<li>их можно легко передать голосом другому человеку
<ul><li>сколько угодно можно говорить, что диктовать пароль никогда не пригодится, но это до первой необходимости объяснить что-то своей матери</li></ul></li></ul>

<p>Пример выше с Верой – это более 70 символов, но слушатель радио “Вера” уже запомнил его.</p>

<p>Есть у парольных фраз ещё одно очень важное преимущество – их легко писать на “проблемных” устройствах. Например, попытаться залогиниться в веб сервисе на телевизоре или какой-нибудь PlayStation без подключения клавиатур и подобного. Потому что и в современных телевизорах, и в приставках, есть подсказки слов их остаётся только выбирать из предлагаемых.</p>

<p>NIST прямо указывает, что нужно принимать 64+ символа и это нужно для фраз: <a href="https://pages.nist.gov/800-63-4/sp800-63b.html#memorizedsecrets" rel="nofollow">https://pages.nist.gov/800-63-4/sp800-63b.html#memorizedsecrets</a> При том что для русского языка это всего в среднем 9 слов и 8 пробелов между ними (при средней длине слова в 6 букв).</p>

<p>Но парольные фразы не идеальны, есть у  них и проблемы, часть из которых худо-бедно можно приуменьшить:</p>
<ul><li>они, блин, длинные
<ul><li>не считая менеджеров паролей, тут немного помогают клавиатуры смарт-устройств, которые без проблем позволяют добить слова. При чём это дёшево и работало даже на древних тупофонах и называлось T9 (земля ему пуховик)</li></ul></li>
<li>эти же самые клавиатуры умных устройств могут заучивать последовательности слов (такое бывает, если софт писан жопой и автор не соблюдает правил ОС, под которую пишет)
<ul><li>достаточно большое количество слов (9+ для русского языка при 64+ символах) во фразе помогает снизить или вовсе убрать урон</li>
<li>от говнософта не спасут и пароли. Было время, когда Samsung устройства на Android охотно подсказывали пароли, потому что заучивали всё, что пишут с них, включая поля паролей. И понять, что это пароль всё же сильно проще, чем понять, что это одно из слов парольной фразы (кстати, это слово может быть и из серидины фразы)</li></ul></li>
<li>парольные фразы тоже бывают <a href="https://duckduckgo.com/?q=%22%D1%81%D0%BE%D1%80%D0%BE%D0%BA+%D1%82%D1%8B%D1%81%D1%8F%D1%87+%D0%BE%D0%B1%D0%B5%D0%B7%D1%8C%D1%8F%D0%BD%22&amp;t=ffab&amp;ia=web" rel="nofollow">очевидными и предсказуемыми</a>
<ul><li>NIST нигде не говорит, что стоп списки паролей не должны применяться и к фразам</li>
<li>здесь, кстати, меньше 64 символов</li></ul></li></ul>

<h3 id="фразы-лучше-паролей">Фразы лучше паролей?</h3>

<p>Нет. Пароли – это почти также круто, как Чечня. Но людям тяжело делать хорошие пароли и соблюдать в целом правила и эти люди стали ипользовать дыры парольных политик для облегчения жизни себе и, как итог, злоумышленникам. Фразы стали лишь ответом на использование этих дыр.</p>

<p>То есть если лично ты делаешь всё по красоте – 18 символов пароля с самыми извращёнными символами из юникода и вообще не знаешь этот пароль, а хранишь его в православном KeePass, на который ещё и минимум 2 фактора навешано; если ещё и на сами сервисы вешаешь вторые факторы, то нет никакой нужны использовать фразы.</p>

<p>А я перешёл на фразы (когда это возможно) из-за ерунды – не смог однажды в скрипт передать пароль. То есть в итоге сделал, но пришлось внимательно расставлять экранирования. Это, кстати, было ещё во времена Windows и это было в batch. Если вам приходилось писать скрипты на batch, то вы поняли глубину моей душевной травмы.</p>

<p>Но зачем настолько длинные, зачем 91 символ (с чего всё и началось)? Да не за чем. Просто стояло число 11 в генераторе и он сделал 11 слов. Вот и получилась такая длина – просто совпадение. Было бы 10, то я бы мог и не попасть на изначальную проблему mariadb клиента. Таким образом вся статья родилась из-за того, что просто стояло число 11 и я его не менял. Мне ведь всё равно, 90 там символов или 200. А с точки зрения NIST важно, что их больше 64</p>
]]></content:encoded>
      <guid>https://text.tchncs.de/umnik/o-paroliakh-i-parol-nykh-frazakh</guid>
      <pubDate>Sun, 28 Jan 2024 10:20:40 +0000</pubDate>
    </item>
    <item>
      <title>Обход режима MODE_IGNORED в app-op</title>
      <link>https://text.tchncs.de/umnik/obkhod-rezhima-mode_ignored-v-app-op</link>
      <description>&lt;![CDATA[Подробное объяснение уязвимости CVE-2022-20551, исправленной в Android в феврале 2023 года.&#xA;&#xA;Об AppOpsManager&#xA;&#xA;Отслеживаем (логирование) и контроль доступа (разрешение, запрет) к критичным API системы происходит через механизм app-opов. App-opы (давайте просто app-ops во множественном числе и app-op в единственном) покрывают большой набор функциональности — от рантайм пермишенов до монитора состояния батарейки. Управление же всеми этими фичами, внутри, происходит через AppOpsManager&#xA;!--more--&#xA;Что именно можно отслеживать и как этим управлять — это вы можете увидеть по ссылке выше. Здесь же нас интересуют именно режимы контроля.&#xA;&#xA;Контроль доступа&#xA;&#xA;Всего таких режимов четыре:&#xA;&#xA;MODEDEFAULT — режим &#34;поведения по умолчанию&#34;, которое напрямую документацией не описано. Просто &#34;может отличаться от одного app-op к другому&#34;. Спасибо, ничего не понятно, но очень интересно.&#xA;MODEALLOWED — режим, в котором доступ разрешается&#xA;MODEERRORED — режим, в котором доступ не просто запрещается, а ещё бросается SecurityException при обращении&#xA;MODEIGNORED — режим, в котором и доступ не предоставляется, так ещё и ничего не возвращается&#xA;&#xA;Разрешение и запрет с ошибкой выглядят прям очень знакомым, не так ли? Эти режимы доступны пользователю в интерфейсе Android, они позволяют понимать приложению, одобрил пользователь какой-то пермишен или отказал. Но это для пользователя. Для производителей и прошивок, и MDM решений, есть вот этот классный режим игнорирования. Если вы сами производитель какого-то MDM решения, то это разрешение ну очень полезно для вас.&#xA;&#xA;В режиме игнорирования условный диктофон просто не узнает, что у него нет доступа к микрофону — ведь исключения SecurityException не вылетает. И будет считать, что запись идёт. То есть вам, как производителю MDM или защищённой прошивки, выгодно переводить app-ops приложений именно в игнор. Потому что очень наглые приложения начнут настаивать предоставить им доступ.&#xA;&#xA;Кстати, пользователь тоже может управлять app-ops и у него есть полтора способа. Сначала я написал &#34;обычный пользователь&#34;, потому убрал это прилагательное, всё же пользователь должен быть подготовлен на столько, что способен использовать adb. Об этих способах расскажу ниже, когда опишу уязвимость.&#xA;&#xA;Уязвимость CVE-2022-20551&#xA;&#xA;История обнаружения&#xA;&#xA;Мой коллега и руководитель обнаружил, что WhatsApp в режиме MODEIGNORED продолжает записывать голосовые сообщения. Хоть они и выглядели как запись без звука (что было бы правильным поведением) — просто прямая линия, — но звук на самом деле записывался и голосовое можно было прослушать. Но полбеды в том, что запись выглядела как запись без звука. Индикатор Android о доступе к микрофону не включался и в истории доступа к микрофону WhatsApp не появлялся. Будто он микрофон никогда и не использовал. На меня упала задача посмотреть, что вообще не так.&#xA;&#xA;Проверка на других мессенджерах, в т.ч. Telegram, показала, что такое поведение происходит только у WhatsApp. Проверял и на приложениях-диктофонах и они тоже работали правильно. Признаюсь, мы решили, что это не совпадение, что только WhatsApp себя так вёл. И наше предположение только усиливалось со временем. И, не знаю как другие члены команды, но я по-прежнему считаю, что эта уязвимость была для кого надо уязвимость.&#xA;&#xA;Выяснив, что только WhatsApp ведёт себя так странно, решили передать информацию об уязвимости в Google. А до фикса — отказаться в своём решении от режима игнорирования, заменив на исключение. Лучше пусть приложения видят, что у них нет прав и требуют их предоставить, чем втихую получат доступ. Да, разумеется проверили, что при режиме исключения запись ломалась и у WhatsApp тоже.&#xA;&#xA;Проталкивание проблемы&#xA;&#xA;Aug 19, 2022 08:50PM — это точное время, когда я оформил баг 243152409 в багтрекере Google. Т.к. это проблема безопасности, то оформлял через специальную форму и полученный баг не публичный, попасть туда могу я и сотрудники Google. В этом баге было описано, как WhatsApp обходит режим игнорирования. Я приложил запись видео и сценарий воспроизведения. Ну и информацию о системе, разумеется — при оформлении проблем безопасности эти поля обязательны. Даже точную версию мессенджера указал, на случай, если WhatsApp резко изменят поведение. Это была последняя доступная версия на тот момент.&#xA;&#xA;Казалось бы. Вот вам приложение, вот вам инструкция воспроизведения, как выставить режим игнорирования, вот вам даже видеозапись. Однако Aug 27, 2022 12:15AM получаю ответ: Status: Won&#39;t Fix (Infeasible). И объяснение, что мы не считаем это проблемой. Цитировать переписку не буду, ну мало ли. Можете поверить мне наслово. Но там была строка &#34;The Resolution Notes label has been set to NSBC (Not Security Bulletin Class) to reflect this assessment&#34;. Зафиксируем, что 27 августа 22 года воспроизведение на реальном ПО посчитали &#34;working as intended&#34;.&#xA;&#xA;Сообщил нашей команде о том, что Google положил болт на проблему. Это подкинуло дровишек в топку &#34;это дыра - для кого надо дыра, не лезьте&#34;. Но дожать надо. Решили предоставить им PoC, который не имеет ничего лишнего, кроме эксплуатации уязвимости. Забегая вперёд скажу, что сценарий его использования такой же, как и WhatsApp. То есть мессенджера было совершенно точно достаточно.&#xA;&#xA;Наш сотрудник Артём (фамилию не скажу, но лишний раз подчеркну наше всеобщее уважение к нему) разобрал WhatsApp и провёл исследование, как же мессенджеру удаётся обходить ограничение, тогда как все другие этого сделать не могут.&#xA;&#xA;12 сентября Артём всё же докопался до истины. Оказалось, что при использовании OpenSLES режим игнорирования просто не работает. Далее Артём написал PoC, основанный прям на демке самого Google по работе с OpenSLES. Ну то есть Гугл буквально зажали в углу: демонстрация использования уязвимости была сделана на их собственном примере работы с технологией.&#xA;&#xA;Sep 13, 2022 04:52PM я добавляю в ишую со статусом &#34;вонт фикс&#34; новое сообщение. Цитирую его целиком и прикрепляю PoC, чтобы вы могли проверить свои собственные прошивки. Если у вас установлены февральские (от февраля 23 года) обновления, то проблема не будет воспроизводится. Если же не установлены — словите описанное ниже поведение. И важно, проверять нужно на Android 12 и новее, потому что в версиях ниже не было визуального индикатора, который бы показывал, что сейчас идёт прослушивание через микрофон. То есть проблема есть и на 11 и ниже, просто пользователь в принципе не мог раньше понять, что что-то происходит.&#xA;&#xA;Added PoC. It uses OpenSLES&#xA;&#xA;Install app&#xA;Run app&#xA;Tap on Record button&#xA;Allow access while using the app&#xA;Speak something during 5 seconds → We see the microphone access indicator&#xA;Tap Play button → We hear ourself&#xA;adb shell pm list packages -U | grep nativeaudio → package:com.example.nativeaudio uid:10060&#xA;adb shell cmd appops set 10060 RECORDAUDIO ignore&#xA;Tap Record button&#xA;Speak something during 5 seconds → We not see indicator&#xA;Tap Play button&#xA;&#xA;Expected: silent  &#xA;Actual: we hear ourself&#xA;&#xA;PoC можно скачать здесь.&#xA;&#xA;Через час после этого Google отписал &#34;спасибо за новую инфу, мы рассмотрим эти данные&#34;.&#xA;&#xA;Sep 23, 2022 01:04AM сотрудник Google написал новое сообщение, где признал проблему: &#34;Based on our published severity assessment matrix (1) it was rated as Moderate severity&#34;. Единичка - это ссылка на матрицу: &#34;(1) Severity Matrix: https://source.android.com/security/overview/updates-resources#severity&#34;.&#xA;&#xA;Oct 8, 2022 06:50AM — гугловцы сообщают, что назначено такое-то вознаграждение.&#xA;&#xA;Nov 10, 2022 08:48PM — гугловцы пишут, что мы всё ещё работаем над исправлением&#xA;&#xA;Jan 6, 2023 09:31PM — новое обновление статуса. Уведомили, что деняк будет выплачено больше, потому что &#34;After conducting additional review of the security issue in this report, we have revised the severity to High&#34;. Я думаю, что у них из отпуска вернулся кто-то, у кого голова не только чтобы в неё есть. И он объяснил остальным, что вы чего вообще, это не какое-то приватное API. Это API мы даём специально для обеспечения безопасности и его используют в том числе Samsung.&#xA;&#xA;Далее ещё несколько переписок по формальностям чистым. Типа, заполните вот эти документы, заполните вот эти. И, наконец, Feb 13, 2023 10:35PM происходит главное: Marked as fixed.&#xA;&#xA;Эта ошибка для своих&#xA;&#xA;Почему я считаю, что эта ошибка была кому надо ошибка. Вы вправе считать иначе и предлагать мне шапочку из фольги — дело ваше.&#xA;&#xA;Предоставленное полное описание проблемы с демонстрацией на видео и чёткой инструкцией, но конкретно на WhatsApp они вообще не посчитали проблемой: &#34;Based on our review, this issue has been determined to not be a security vulnerability and is working as intended&#34;&#xA;Как только это же самое сделали на другом приложении, они проблему признали&#xA;Мало того, они признали, что это проблема высокой важности по их собственной системе оценок&#xA;Можно было бы посчитать, что у них не получилось воспроизвести на WhatsApp, но это не так. Посмотрите на фикс: они прямо в нём написали, что проверять надо на WhatsApp: &#34;Test: verify app ops work with WhatsApp&#34;. То есть всё у них получилось воспроизвести&#xA;&#xA;Возможно, конечно, я перегибаю палку. Вполне вероятно, что проверял человек, который увидел в WhatsApp прямую линию на записи и просто не прослушал запись, решив, что голосовое сообщение не записалась. А в PoC прямых линий не рисовали и они таки убедились, что всё работает. Но тогда получается, что Security Team в Google не тянули с исправлением, а просто забили болт на проверку.&#xA;&#xA;Какой вариант выбираете: забили болт или тянули с фиксом, потому что уязвимость пока что нужна была?&#xA;&#xA;App-opp у себя&#xA;&#xA;Если вам нравится идея режима игнорирования, вам не обязательно (покупать?) и ставить MDM решение от стороннего производителя. У вас есть полтора пути. Полтора, потому что путь в итоге один, просто &#34;второй&#34; способ — это через GUI, но внутри тоже самое, что и &#34;первый&#34;.&#xA;&#xA;Первый способ вы уже видели на PoC. Получаем UID приложения и выставляем ему режим через adb. Второй — использовать приложение, которому поднимете привилегии через тот же adb. Я сам проверял на Permission Manager X и что-то даже работало. Но я не ходил с ним. Просто проверил, что, прикольно, срабатывает и на этом всё.&#xA;&#xA;Моя телега: https://t.me/mydaybug]]&gt;</description>
      <content:encoded><![CDATA[<p>Подробное объяснение уязвимости <a href="https://nvd.nist.gov/vuln/detail/CVE-2022-20551" rel="nofollow">CVE-2022-20551</a>, исправленной в Android в <a href="https://source.android.com/docs/security/bulletin/2023-02-01" rel="nofollow">феврале 2023 года</a>.</p>

<h2 id="об-appopsmanager"><strong>Об AppOpsManager</strong></h2>

<p>Отслеживаем (логирование) и контроль доступа (разрешение, запрет) к критичным API системы происходит через механизм <code>app-op</code>ов. <code>App-op</code>ы (давайте просто <code>app-ops</code> во множественном числе и <code>app-op</code> в единственном) покрывают большой набор функциональности — от рантайм пермишенов до монитора состояния батарейки. Управление же всеми этими фичами, внутри, происходит через <a href="https://developer.android.com/reference/android/app/AppOpsManager" rel="nofollow">AppOpsManager</a>

Что именно можно отслеживать и как этим управлять — это вы можете увидеть по ссылке выше. Здесь же нас интересуют именно режимы контроля.</p>

<h3 id="контроль-доступа"><strong>Контроль доступа</strong></h3>

<p>Всего таких режимов четыре:</p>
<ul><li><code>MODE_DEFAULT</code> — режим “поведения по умолчанию”, которое напрямую документацией не описано. Просто “может отличаться от одного <code>app-op</code> к другому”. Спасибо, ничего не понятно, но очень интересно.</li>
<li><code>MODE_ALLOWED</code> — режим, в котором доступ разрешается</li>
<li><code>MODE_ERRORED</code> — режим, в котором доступ не просто запрещается, а ещё бросается <a href="https://developer.android.com/reference/java/lang/SecurityException" rel="nofollow">SecurityException</a> при обращении</li>
<li><code>MODE_IGNORED</code> — режим, в котором и доступ не предоставляется, так ещё и ничего не возвращается</li></ul>

<p>Разрешение и запрет с ошибкой выглядят прям очень знакомым, не так ли? Эти режимы доступны пользователю в интерфейсе Android, они позволяют понимать приложению, одобрил пользователь какой-то пермишен или отказал. Но это для пользователя. Для производителей и прошивок, и <a href="https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%BC%D0%B8_%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0%D0%BC%D0%B8" rel="nofollow">MDM</a> решений, есть вот этот классный режим игнорирования. Если вы сами <a href="https://www.samsung.com/us/business/solutions/services/mobility-software/knox-manage/" rel="nofollow">производитель какого-то MDM решения</a>, то это разрешение ну очень полезно для вас.</p>

<p>В режиме игнорирования условный диктофон просто не узнает, что у него нет доступа к микрофону — ведь исключения <code>SecurityException</code> не вылетает. И будет считать, что запись идёт. То есть вам, как производителю <code>MDM</code> или защищённой прошивки, выгодно переводить <code>app-ops</code> приложений именно в игнор. Потому что очень наглые приложения начнут настаивать предоставить им доступ.</p>

<p>Кстати, пользователь тоже может управлять <code>app-ops</code> и у него есть полтора способа. Сначала я написал “обычный пользователь”, потому убрал это прилагательное, всё же пользователь должен быть подготовлен на столько, что способен использовать <code>adb</code>. Об этих способах расскажу ниже, когда опишу уязвимость.</p>

<h2 id="уязвимость-cve-2022-20551"><strong>Уязвимость CVE-2022-20551</strong></h2>

<h3 id="история-обнаружения"><strong>История обнаружения</strong></h3>

<p>Мой коллега и руководитель обнаружил, что WhatsApp в режиме <code>MODE_IGNORED</code> продолжает записывать голосовые сообщения. Хоть они и выглядели как запись без звука (что было бы правильным поведением) — просто прямая линия, — но звук на самом деле записывался и голосовое можно было прослушать. Но полбеды в том, что запись выглядела как запись без звука. Индикатор Android о доступе к микрофону не включался и в истории доступа к микрофону WhatsApp не появлялся. Будто он микрофон никогда и не использовал. На меня упала задача посмотреть, что вообще не так.</p>

<p>Проверка на других мессенджерах, в т.ч. Telegram, показала, что такое поведение происходит только у WhatsApp. Проверял и на приложениях-диктофонах и они тоже работали правильно. Признаюсь, мы решили, что это не совпадение, что только WhatsApp себя так вёл. И наше предположение только усиливалось со временем. И, не знаю как другие члены команды, но я по-прежнему считаю, что эта уязвимость была для кого надо уязвимость.</p>

<p>Выяснив, что только WhatsApp ведёт себя так странно, решили передать информацию об уязвимости в Google. А до фикса — отказаться в своём решении от режима игнорирования, заменив на исключение. Лучше пусть приложения видят, что у них нет прав и требуют их предоставить, чем втихую получат доступ. Да, разумеется проверили, что при режиме исключения запись ломалась и у WhatsApp тоже.</p>

<h3 id="проталкивание-проблемы"><strong>Проталкивание проблемы</strong></h3>

<p><code>Aug 19, 2022 08:50PM</code> — это точное время, когда я оформил баг <code>243152409</code> в багтрекере Google. Т.к. это проблема безопасности, то оформлял через специальную форму и полученный баг не публичный, попасть туда могу я и сотрудники Google. В этом баге было описано, как WhatsApp обходит режим игнорирования. Я приложил запись видео и сценарий воспроизведения. Ну и информацию о системе, разумеется — при оформлении проблем безопасности эти поля обязательны. Даже точную версию мессенджера указал, на случай, если WhatsApp резко изменят поведение. Это была последняя доступная версия на тот момент.</p>

<p>Казалось бы. Вот вам приложение, вот вам инструкция воспроизведения, как выставить режим игнорирования, вот вам даже видеозапись. Однако <code>Aug 27, 2022 12:15AM</code> получаю ответ: <code>Status: Won&#39;t Fix (Infeasible)</code>. И объяснение, что мы не считаем это проблемой. Цитировать переписку не буду, ну мало ли. Можете поверить мне наслово. Но там была строка “The Resolution Notes label has been set to NSBC (Not Security Bulletin Class) to reflect this assessment”. Зафиксируем, что 27 августа 22 года воспроизведение на реальном ПО посчитали “working as intended”.</p>

<p>Сообщил нашей команде о том, что Google положил болт на проблему. Это подкинуло дровишек в топку “это дыра – для кого надо дыра, не лезьте”. Но дожать надо. Решили предоставить им PoC, который не имеет ничего лишнего, кроме эксплуатации уязвимости. Забегая вперёд скажу, что сценарий его использования такой же, как и WhatsApp. То есть мессенджера было совершенно точно достаточно.</p>

<p>Наш сотрудник Артём (фамилию не скажу, но лишний раз подчеркну наше всеобщее уважение к нему) разобрал WhatsApp и провёл исследование, как же мессенджеру удаётся обходить ограничение, тогда как все другие этого сделать не могут.</p>

<p><code>12 сентября</code> Артём всё же докопался до истины. Оказалось, что при использовании <a href="https://developer.android.com/ndk/guides/audio/opensl" rel="nofollow">OpenSLES</a> режим игнорирования просто не работает. Далее Артём написал PoC, основанный прям на демке самого Google по работе с <code>OpenSLES</code>. Ну то есть Гугл буквально зажали в углу: демонстрация использования уязвимости была сделана на их собственном примере работы с технологией.</p>

<p><code>Sep 13, 2022 04:52PM</code> я добавляю в ишую со статусом “вонт фикс” новое сообщение. Цитирую его целиком и прикрепляю PoC, чтобы вы могли проверить свои собственные прошивки. Если у вас установлены февральские (от февраля 23 года) обновления, то проблема не будет воспроизводится. Если же не установлены — словите описанное ниже поведение. И важно, проверять нужно на Android 12 и новее, потому что в версиях ниже не было визуального индикатора, который бы показывал, что сейчас идёт прослушивание через микрофон. То есть проблема есть и на 11 и ниже, просто пользователь в принципе не мог раньше понять, что что-то происходит.</p>

<p>Added PoC. It uses OpenSLES</p>
<ol><li>Install app</li>
<li>Run app</li>
<li>Tap on Record button</li>
<li>Allow access while using the app</li>
<li>Speak something during 5 seconds → We see the microphone access indicator</li>
<li>Tap Play button → We hear ourself</li>
<li>adb shell pm list packages -U | grep nativeaudio → package:com.example.nativeaudio uid:<strong>10060</strong></li>
<li>adb shell cmd appops set <strong>10060</strong> RECORD_AUDIO ignore</li>
<li>Tap Record button</li>
<li>Speak something during 5 seconds → We not see indicator</li>
<li>Tap Play button</li></ol>

<p>Expected: silent<br>
Actual: we hear ourself</p>

<p>PoC можно скачать <a href="https://github.com/DMyachin/appop_bypass_demo" rel="nofollow">здесь</a>.</p>

<p>Через час после этого Google отписал “спасибо за новую инфу, мы рассмотрим эти данные”.</p>

<p><code>Sep 23, 2022 01:04AM</code> сотрудник Google написал новое сообщение, где признал проблему: “Based on our published severity assessment matrix (1) it was rated as Moderate severity”. Единичка – это ссылка на матрицу: “(1) Severity Matrix: <a href="https://source.android.com/security/overview/updates-resources#severity" rel="nofollow">https://source.android.com/security/overview/updates-resources<a href="/umnik/tag:severity" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">severity</span></a></a>”.</p>

<p><code>Oct 8, 2022 06:50AM</code> — гугловцы сообщают, что назначено такое-то вознаграждение.</p>

<p><code>Nov 10, 2022 08:48PM</code> — гугловцы пишут, что мы всё ещё работаем над исправлением</p>

<p><code>Jan 6, 2023 09:31PM</code> — новое обновление статуса. Уведомили, что деняк будет выплачено больше, потому что “After conducting additional review of the security issue in this report, <strong>we have revised the severity to High</strong>”. Я думаю, что у них из отпуска вернулся кто-то, у кого голова не только чтобы в неё есть. И он объяснил остальным, что вы чего вообще, это не какое-то приватное API. Это API мы даём специально для обеспечения безопасности и его используют в том числе Samsung.</p>

<p>Далее ещё несколько переписок по формальностям чистым. Типа, заполните вот эти документы, заполните вот эти. И, наконец, <code>Feb 13, 2023 10:35PM</code> происходит главное: <code>Marked as fixed</code>.</p>

<h4 id="эта-ошибка-для-своих"><strong>Эта ошибка для своих</strong></h4>

<p>Почему я считаю, что эта ошибка была кому надо ошибка. Вы вправе считать иначе и предлагать мне шапочку из фольги — дело ваше.</p>
<ul><li>Предоставленное полное описание проблемы с демонстрацией на видео и чёткой инструкцией, но конкретно на WhatsApp они вообще не посчитали проблемой: “Based on our review, this issue has been determined to not be a security vulnerability and is working as intended”</li>
<li>Как только это же самое сделали на другом приложении, они проблему признали</li>
<li>Мало того, они признали, что это проблема высокой важности по их собственной системе оценок</li>
<li>Можно было бы посчитать, что у них не получилось воспроизвести на WhatsApp, но это не так. <a href="https://android.googlesource.com/platform/frameworks/av/+/23f552f22abd6bf336484c7085efd46bebd67d89" rel="nofollow">Посмотрите на фикс</a>: они прямо в нём написали, что проверять надо на WhatsApp: “Test: verify app ops work with WhatsApp”. То есть всё у них получилось воспроизвести</li></ul>

<p>Возможно, конечно, я перегибаю палку. Вполне вероятно, что проверял человек, который увидел в WhatsApp прямую линию на записи и просто не прослушал запись, решив, что голосовое сообщение не записалась. А в PoC прямых линий не рисовали и они таки убедились, что всё работает. Но тогда получается, что Security Team в Google не тянули с исправлением, а просто забили болт на проверку.</p>

<p>Какой вариант выбираете: забили болт или тянули с фиксом, потому что уязвимость пока что нужна была?</p>

<h3 id="app-opp-у-себя"><strong>App-opp у себя</strong></h3>

<p>Если вам нравится идея режима игнорирования, вам не обязательно (покупать?) и ставить MDM решение от стороннего производителя. У вас есть полтора пути. Полтора, потому что путь в итоге один, просто “второй” способ — это через GUI, но внутри тоже самое, что и “первый”.</p>

<p>Первый способ вы уже видели на PoC. Получаем <code>UID</code> приложения и выставляем ему режим через <code>adb</code>. Второй — <a href="https://cloudflare.f-droid.org/search/?q=AppOps" rel="nofollow">использовать приложение</a>, которому поднимете привилегии через тот же <code>adb</code>. Я сам проверял на <a href="https://cloudflare.f-droid.org/en/packages/com.mirfatif.permissionmanagerx/" rel="nofollow">Permission Manager X</a> и что-то даже работало. Но я не ходил с ним. Просто проверил, что, прикольно, срабатывает и на этом всё.</p>

<p>Моя телега: <a href="https://t.me/mydaybug" rel="nofollow">https://t.me/mydaybug</a></p>
]]></content:encoded>
      <guid>https://text.tchncs.de/umnik/obkhod-rezhima-mode_ignored-v-app-op</guid>
      <pubDate>Sun, 19 Mar 2023 16:12:15 +0000</pubDate>
    </item>
    <item>
      <title>Какие изменения Android 14 могут вас задеть</title>
      <link>https://text.tchncs.de/umnik/eto-prosto-podbivka-spiska-izmenenii-s-poiasneniiami-chtoby-ne-skakat-po-stat-ia</link>
      <description>&lt;![CDATA[Это просто подбивка списка изменений с пояснениями, чтобы не скакать по статьям на официальном сайте. Хотя правильнее, конечно, читать оригинал.&#xA;&#xA;Изменения, касающиеся всех приложений&#xA;&#xA;Здесь собраны изменения, которые задевают приложения, даже если их таргет ниже 14. Называется новая версия, если что, Android Upside-down cake — &#34;перевёрнутый&#34; пирог или &#34;вверх ногами&#34; или &#34;наизнанку&#34; — как угодно. В общем, суть в том, что после выпекания этот пирог переворачивают и то, что раньше было верхом пирога становится его дном.&#xA;&#xA;!--more--&#xA;&#xA;Core функциональность&#xA;&#xA;Разрешение SCHEDULEEXACTALARM больше не выдаётся автоматически&#xA;&#xA;Exact alarms — это когда нужно выполнить задачу в строго заданное время, ни раньше, ни позже. К примеру — напомнить о встрече. Начиная с Android 14 для большинства устанавливаемых приложений (очевидно, не касается уже установленных), таргет которых начинается с 13, пермишен SCHEDULEEXACTALARM автоматически выдаваться больше не будет. В общем, теперь нужно спрашивать его явно.&#xA;&#xA;details&#xA;summaryО чём речь/summary&#xA;&#xA;SCHEDULEEXACTALARM появилось в API level 31 (это S, он же 12)&#xA;без этого разрешения запланированные задачи будут выполняться не в строго заданное время, а когда ОС разрешит&#xA;его нужно (теперь, когда представили - не нужно было) запрашивать. Сценарий будет не как с runtime permission — диалог — а как разрешение на установку приложений, когда пользователь на отдельном экране дёргает переключатель&#xA;этого экрана может не быть вовсе. Вообще все экраны &#34;специальных разрешений&#34; имеют пометку, что производитель прошивки может его убирать. Имейте в виду.&#xA;и пользователь, и ОС могут переключатель выставить в отключенное состояние, отозвав разрешение&#xA;  отзыв разрешения автоматически удаляет все запланированные задачи&#xA;в API level 33 (это TIRAMISU, он же 13) у этого разрешения появилась альтернатива USEEXACTALARM&#xA;  это разрешение выдаётся автоматически&#xA;  пользователь не может его отозвать&#xA;  вас выбросят из Google Play за использование этого разрешения, если приложение не является будильником или чем-то подобным, чему реально нужно срабатывать секунда в секунду. Я смотрел весь сериал только из-за этой гифки&#xA;  /details&#xA;&#xA;---&#xA;&#xA;Контекстно-зарегистрированные бродкасты ставятся в очередь для кешированных приложений&#xA;&#xA;Если приложение перешло в состояние &#34;кешировано&#34; (то есть оно не на переднем плане и не убито системой и становится кандидатом на отстрел), то контекстные бродкасты складываются в очередь. Если приложение не будет отстрелено системой и пользователь снова к нему обратиться, то лежащие в очереди бродкасты будут доставлены, если контекст позволяет.&#xA;&#xA;details&#xA;summaryО чём речь/summary&#xA;&#xA;Контекстно-зарегистрированные бродкасты, это те, которые были зареганы в контексте чего-то. Например, в контексте активити. То есть если активити приложения умерло, то и бродкаст больше не придёт. Если бродкаст был зареган в апликейшен контексте, то будет доставлен, пока жив хоть какой-то компонент приложения&#xA;&#xA;/details&#xA;&#xA;---&#xA;&#xA;Приложения могут убить только собственные фоновые процессы&#xA;&#xA;Метод killBackgroundProcesses()) может убить теперь только фоновые процессы того приложения, из которого был вызван. Наконец сдохнет большинство &#34;оптимизаторов батареи&#34;. К сожалению, во-первых только сторонние, во-вторых не все. Вендорский шлак так и будет существовать, а разработчики стороннего ПО то и дело будут ссылаться на https://dontkillmyapp.com/&#xA;&#xA;details&#xA;summaryО чём речь/summary&#xA;&#xA;это древняя апишка, которая защищена разрешением KILLBACKGROUNDPROCESSES. Само её существование для сторонних приложений — бред какой-то&#xA;эта апишка не позволяла убивать системные приложения, только сторонние&#xA;патч безопасности от 1 декабря 2022 уже ограничил работу пермишена KILLBACKGROUNDPROCESSES — стало нельзя убивать сторонние процессы&#xA;теперь это ограничение, которое раньше было только фиксом безопасности, затащили в ОС. Другими словами, изменение произошло в конце прошлого года на всех актуальных версиях ОС&#xA;некоторые оптимизаторы использовали не эту апишку, а работали хитрее через Accessibility Service. Так что готовьтесь к тому, что шлак массово будет переходить на это, очень опасное, API&#xA;/details&#xA;&#xA;---&#xA;&#xA;Безопасность&#xA;&#xA;Поднят минимальный таргет для устанавливаемых приложений&#xA;&#xA;Приложения с targetSdkVersion ниже 23 (это Android 6) больше не могут быть установлены. То есть в Android 14 теперь все приложения будут поддерживать runtime permission, либо не будут работать вовсе. Если приложение с более низким таргетом было установлено, когда на ваше устройство прилетел Android 14, то для него будет сделано исключение и оно продолжит работать. Но вот переустановить его уже нельзя будет.&#xA;&#xA;---&#xA;&#xA;Поле Media owner package name может быть изменено&#xA;&#xA;К хранилищу медиа можно делать запросы поля OWNERPACKAGENAME, в котором будет (или не будет — может быть NULL) указано имя пакета, который сохранил определённый медиа файл. Начиная с Android 14 значение этого поля будет подменяться для всех приложений кроме (должно быть выполнено хоть одно условие):&#xA;&#xA;приложение, которое сохранило этот файл, входит в список приложений, которые всегда видимы другим&#xA;приложение, которое запросило это поле, имеет разрешение QUERYALLPACKAGES&#xA;&#xA;details&#xA;summaryО чём речь/summary&#xA;&#xA;Ничего не понятно, правда?&#xA;&#xA;запросы к медиа хранилищам делаются как запросы к БД. Пусть они и обёрнуты в некое API, сути это не меняет&#xA;запросить можно в том числе &#34;а кто создал этот файл&#34;: OWNERPACKAGENAME. В ответ придёт или имя пакета приложения, или NULL&#xA;Google решили, что через такие запросы можно понять, какие приложения установлены на устройстве. И это, надо сказать, разумно. Вполне себе тянет на утечку по сторонним каналам. А ведь уже давно запрос списка установленных приложений защищается пермишеном QUERYALLPACKAGES&#xA;сложив два и два, Google сделали так. Если приложение, которое пытается узнать владельца файла через эту апишку, не владеет разрешением QUERYALLPACKAGES, то проверяется, является ли владелец файла всегда видимым приложением&#xA;  это всякие системные приложения — они ведь всегда есть, чего их скрывать&#xA;  приложения, которые установило ваше собственное приложение. Оно и так знает, что установило, чего скрывать&#xA;  приложение, которое вызывало ваше через startActivityForResult(). Это ведь оно вас позвало, оно и так уже призналось в своём существовании&#xA;  всякое другое, типа контент провайдеров, клавиатур. Подробнее тут, если надо&#xA;в итоге, если владелец не входит в список всегда видимых &amp;&amp; запрашивающий не владеет QUERYALLPACKAGES, то он не сможет узнать владельца. Как именно подменяется владелец я не смотрел. Да и не важно, хоть там будет просто android написано, хоть там будет NULL. Главное, что нельзя таким образом составить список установленных приложений&#xA;/details&#xA;&#xA;---&#xA;&#xA;User experience&#xA;&#xA;Давайте уже согласимся, что говорить &#34;юикс&#34; нормально, а говорить &#34;пользовательский опыт&#34; — это ментальное заболевание. Впрочем, лично мне нравится говорить &#34;привычки&#34;, хотя в реальной речи стараюсь не использовать это слово. Оно нравится мне, но другие как-то так не говорят и боюсь, что буду сбивать с толку других&#xA;&#xA;Взаимодействие с несмахиваемыми уведомлениями&#xA;&#xA;В Android 14 пользователь может смахивать уведомления, которые ранее были не смахиваемыми, но в конкретных случаях. Если уведомление сделано не смахиваемым установкой флага FLAGONGOINGEVENT, то пользователь теперь может всё-таки его смахнуть. Флаг выставляется, например, через NotificationCompat.Builder#setOngoing(boolean)).&#xA;&#xA;Такие уведомления всё равно не будут смахиваться, если:&#xA;&#xA;телефон заблокирован. Ну то есть на экране блокировки&#xA;пользователь нажал кнопку очистки уведомлений. То есть случайно потерять не получится&#xA;&#xA;Поведение не меняется, если:&#xA;&#xA;уведомление создано с использованием MediaStyle API — то есть явно для плееров&#xA;политики запрещают это действие&#xA;&#xA;details&#xA;summaryО чём речь/summary&#xA;&#xA;Подавляющее большинство моих знакомых (и я сам) в первую очередь подумали — касается ли это foreground service? Если вы знаете ответ заранее — снимаю шляпу.&#xA;&#xA;мы привыкли, что уведомления фореграунд сервисов не смахивались, в общем-то&#xA;в Android 13 поведение изменилось. Уведомления от фореграундов стало можно смахивать&#xA;чтобы всё же закрепить уведомление, нужно ручками выставлять флаг Notification#FLAGONGOINGEVENT, о котором говорилось выше. По умолчанию билдер за вас его не выставит&#xA;в Android 14 уже пошли дальше и флаг тоже почикали&#xA;/details&#xA;&#xA;---&#xA;&#xA;Предоставление частичного доступа к фото и видео&#xA;&#xA;Если вам достаточно фото пикера, то можно пропускать.&#xA;&#xA;В Android 13 появились пермишены доступа к изображениям (READMEDIAIMAGES) и видео (READMEDIAVIDEO). В Android 14 диалог запроса разрешения изменился:&#xA;&#xA;появилась кнопка для выбранных фото и видео. Пользователи могут указать вполне конкретные фото и видео, к которым приложению можно иметь доступ&#xA;кнопка всегда разрешающая доступ к выбранному типу медиа&#xA;кнопка, которая не даёт разрешения&#xA;&#xA;Ну и видно, что разрешение READMEDIAAUDIO не задето.&#xA;&#xA;details&#xA;summaryО чём речь/summary&#xA;&#xA;в Android 13 добавились новые разрешения на доступ к медиа, которые нужно использовать вместо READEXTERNALSTORAGE: READMEDIAIMAGES, READMEDIAVIDEO и READMEDIAAUDIO&#xA;если приложение, которое работает с этими разрешениями, будет установлено в Android 14, то диалог запроса разрешений изменится — добавится новая кнопка&#xA;  то есть мы понимаем, что минимально возможный таргет будет Android 13. Ведь до этого таких разрешений не было&#xA;теперь пользователь может нажать новую кнопку и дать доступ не ко всем картинкам, а к конкретным&#xA;если пользователь сделает выбор конкретных, то это разрешение сработает примерно как one time permission — то есть будет выдано на текущую жизнь прилаги. После отстрела и нового запроса разрешения диалог появится вновь&#xA;разрешение всего и запрет всего работают как раньше&#xA;это поведение можно сделать немного прозрачнее в первую очередь для себя самого, благодаря новому пермишену READMEDIAVISUALUSERSELECTED, но оно доступно только для target 14. Впрочем, в этом случае лучше использовать именно пикер, а не изобретать свой велосипед&#xA;/details&#xA;&#xA;---&#xA;&#xA;Специальные возможности&#xA;&#xA;Масштабирование шрифта до 200%&#xA;&#xA;Система позволит задавать масштабирование шрифта до 200%. Будьте добры убедиться, что ваше приложение к этому готово.&#xA;&#xA;Признаюсь, я ни разу не видел приложений, которые готовы хотя бы к небольшому увеличению размеров шрифтов. Всё сразу начинает ехать, перестаёт влезать. В общем, дизайнеры будут класть болт на людей со слабым зрением на 200% яростнее.&#xA;&#xA;---&#xA;&#xA;Изменения, стреляющие для target на 14 и выше&#xA;&#xA;Некоторые из изменений ниже касаются приложений с таргетом и ниже 14. Но поддержка 14 позволяет управлять поведением более точно.&#xA;&#xA;Core функциональность&#xA;&#xA;Для foreground services требуется указание типа&#xA;&#xA;Для приложений с targetSdkVersion на Android 14 для каждого foreground service нужно указывать его тип из заранее предопределённого списка. Если для приложения нельзя выбрать логичный тип из списка, то нужно переехать на WorkManager или специально созданный user-initiated data transfer job. Не уверен, что это нужно переводить. Вроде понятно, что речь идёт о задачах, которые инициировал сам пользователь.&#xA;&#xA;details&#xA;summaryО чём речь/summary&#xA;&#xA;для таргета на Android 10 для сервисов в манифесте стало нужно указывать тип android:foregroundServiceType для некоторых задач: камеры, геолокации. Если сервис не использовался для этих целей, то и тип не нужен&#xA;для таргета на Android 14 тип указать обязан и никак иначе. На выбор даётся более десятка типов (звонки, камера, локация, здоровье, микрофон и другое). Фореграунд сервиса без типа быть теперь не может&#xA;если для какого-то сервиса не подходит ни один тип, то у вас два пути:&#xA;  переход на WorkManager. С этим, думаю, всё понятно, ему лет сто уже. Если не знакомы — ознакомьтесь, сбросьте часть рутины. Но добавите новую зависимость. А мы знаем, что Google делает со своими либами каждые несколько лет&#xA;  переход на &#34;задачи передачи данных, инициированных пользователем&#34;: user-initiated data transfer jobs&#xA;пользовательские задачи — это всякие длинные задачи, которые пользователь инициировал явно, но которые не подходят по списку типов. К примеру, скачивание файла с удалённого ресурса или копирование файлов на внешний носитель&#xA;  трансфер джобы обязывают объявить пермишен RUNLONGJOBS. Читайте так: в следующей версии или через пару тоже начнут ограничивать. Да и Google Play может начать делать кислые щи&#xA;есть некоторая защита от того, что вы впишете тип хоть какой-нибудь, чтобы от вас отстали. Для этого каждому типу сопоставлено разрешение, которое нужно объявить в манифесте. А лепить разрешения &#34;чтобы отстали&#34; уже не хочется&#xA;есть отдельный тип Short service, который может быть полезен для реально коротких задач. Он не требует отдельного разрешения. Однако жизнь этого сервиса ограничена ~3 минутами, которые начинают тикать с вызова startForeground() и заканчивают в момент остановки сервиса (можно selfStop(), можно stopForeground(). Если не уложились в 3 минуты и не остановили сервис, ловите ANR. Кроме того одновременно может работать только один короткоживущий сервис. Попытка запустить ещё один приведёт к исключению ForegroundServiceStartNotAllowedException&#xA;/details&#xA;&#xA;---&#xA;&#xA;Безопасность&#xA;&#xA;Ограничения неявных и отложенных интентов&#xA;&#xA;Мы все говорим &#34;интент&#34;. А вот говорите вы &#34;отложенный&#34; или &#34;пендинг&#34;?&#xA;&#xA;Приложения с таргетом на Android 14 получают изменённое поведение взаимодействия со своими собственными компонентами:&#xA;&#xA;больше нельзя послать неявный интент не экспортированному компоненту — поймаешь исключение&#xA;при попытке создать отложенный мутабельный интент, не указав компонент или хотя бы пакет явно, снова словите исключение&#xA;&#xA;details&#xA;summaryО чём речь/summary&#xA;&#xA;Вроде и понятно, а вроде не очень, да?&#xA;&#xA;компонентам приложения (активити, сервисы, вот это всё) в манифесте нужно выставлять флаг экспорта android:exported&#xA;документация нам говорила, что экспортированные (android:exported=&#34;true&#34;) компоненты доступны всем приложениями на подёргать. Если хотите экспортированный, но защищённый, для вас есть специальный механизм разрешений&#xA;если компонент не экспортированный, то дёргать его можно только изнутри этого же приложения (более широко — от этого же UID). И привилегированные системные компоненты ещё могли войти в этот сарай (отсылка для поехавших). Если же левое приложение попытается дёрнуть такой компонент, то получит исключение, что нет такого&#xA;&#xA;Повторим ещё раз. Изнутри приложения можно дёргать свои собственные не экспортированные компоненты. Никаких ограничений тут нет&#xA;&#xA;многие разработчики делали не экспортированные, например, активити и для него создавали фильтр вида my.mega.app.action.NAME. Ну и далее из кода context.startActivity(my.mega.app.action.NAME)&#xA;однако (это частный пример) авторы вредоносных приложений стали создавать экраны, которые выглядят точно также, как те, на которые они нацелились. И создавали такие же фильтры. Теперь система не знает, кому послать интент, он же не явный. Выбор из настоящего экрана и поддельного перекладывается на пользователя и тот может сделать неправильный выбор. То есть внешние приложения по-прежнему не могут вызвать не экспортированные компоненты, но могли прикинуться теми приложениями&#xA;теперь, если таргет Android 14, для вызова своего собственного не экспортированного компонента нужно создавать явный интент. Что не позволит уже уйти этому интенту не в те ворота&#xA;/details&#xA;&#xA;---&#xA;&#xA;Бродкаст ресиверы, зарегистрированные в рантайме, должны явно указать эспортированность&#xA;&#xA;Контекстные ресиверы (о них было выше) в приложениях с таргетом на Android 14 обязаны явно указать, экспортированы они (RECEIVEREXPORTED) или нет (RECEIVERNOTEXPORTED). При регистрации слушателя системных бродкастов (к примеру переход в режим полёта или установка приложения) это указание не требуется. Всё равно системные послать кто угодно не может — считается, что защита уже есть.&#xA;&#xA;---&#xA;&#xA;Более безопасная динамическая загрузка кода&#xA;&#xA;Если приложение имеет таргет Android 14 и использует динамическую загрузку кода, то есть буквально передаёт внешнюю либу загрузчику, то теперь нужно помечать файл с этим кодом доступным только для чтения: File#setReadOnly())&#xA;&#xA;Ну и отдельно Google просит (но не проверяет) явно пересоздавать эти файлы. Не проверять, что раз файл есть, то не перекачивать. А прям удалять и качать его снова. Видимо идея в том, чтобы вам не подложили левый файл и вы не приняли его за свой собственный. Ну и просят проверять подпись файла.&#xA;&#xA;В общем-то суть сводится к старой истории, когда одно приложение качало недостающие компоненты со своего сайта в общедоступную папку, а троян на устройстве пользователя просто клал заранее подготовленный файл и приложение жрало его как родной.&#xA;&#xA;---&#xA;&#xA;Новые ограничения запуска активити из фона&#xA;&#xA;Для приложений с таргетом на Android 14, система накладывает ограничения на запуск активити из фона:&#xA;&#xA;отправитель, посылающий PendingIntent другому приложению, должен явно указать), позволяет ли он запускать себя из фона&#xA;когда видимое приложение использует метод bindService() и, собственно, биндится к сервису другого приложения, которое сейчас в фоне, оно должно сообщить, можно ли теперь тому фоновому сервису запускать активити инициатора. Для этого есть флаг BINDALLOWACTIVITYSTARTS&#xA;&#xA;details&#xA;summaryО чём речь/summary&#xA;&#xA;Запутанно из-за всех этих &#34;оно&#34;, &#34;его&#34;. Кто, кому, чего? Признаюсь, перечитывал описание раз 10 и каждый раз понимал по-разному.&#xA;&#xA;Сначала с PendingIntent&#xA;&#xA;это такой вид интента, который можно передать другому приложению так, будто ты его внутри себя перебрасываешь. И получатель теперь может дёргать твои компоненты от твоего имени. То есть создаёшь интент на запуск экрана. Оборачиваешь его в пендинг интент и передаёшь этот пендинг внешнему приложению. Теперь внешнее приложение может запустить твой экран от твоего же имени&#xA;при создании объекта отложенного интента нужно заранее решить, позволяем ли получателю поднимать наши экраны из фона. Можем разрешить, запретить или оставить на усмотрение системы&#xA;метод пришёл на смену setPendingIntentBackgroundActivityLaunchAllowed), который появился в 13 и сдох в 14. Впрочем, его нигде и не афишировали. И судя по исходникам, он вообще скрыт. Видимо планировали, но не доделали&#xA;&#xA;Теперь с биндингом к сервису&#xA;&#xA;наше приложение видимо пользователю&#xA;есть другое приложение, которое предоставляет сервис и сейчас в фоне где-то&#xA;наше приложение биндится к сервису второго приложения&#xA;раньше это второе приложение получало возможность запускать активити из фона. Типа, ко мне же подключилось видимое приложение&#xA;теперь поведение изменилось. Разрешение на запуск активити не предоставляется. Приложение, которое биндится, должно явно передать BINDALLOWACTIVITYSTARTS&#xA;/details&#xA;&#xA;---&#xA;&#xA;Обновлены ограничения не SDK интерфейсов&#xA;&#xA;Начиная с Android 9 урезают доступ к разным API. Часть держат в белом списке, часть в сером (типа, готовьтесь, можем отрезать), к части доступ заблокировали. Каждый релиз список пополняется. Вот, снова пополнили. Сейчас он весит больше 50 Мегабайт в csv формате.&#xA;&#xA;Пример одной строки, как эти ограничения описаны:&#xA;&#xA;Landroid/Manifest$permission&#x9;-  BINDCOMPANIONDEVICESERVICE:Ljava/lang/String&#x9;&#x9;public-api&#x9;sdk&#x9;system-api&#x9;test-api&#xA;&#xA;В этих ограничениях меня забавляет то, что куча либ самого Google, из джет пака, обращаются к серым API.&#xA;&#xA;---&#xA;&#xA;Не знаю как вам, а мне изучение было полезным. А то я уже несколько релизов пропустил.&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>Это просто подбивка списка изменений с пояснениями, чтобы не скакать по статьям на официальном сайте. Хотя правильнее, конечно, читать оригинал.</p>

<h1 id="изменения-касающиеся-всех-приложений">Изменения, касающиеся всех приложений</h1>

<p>Здесь собраны изменения, которые задевают приложения, даже если их таргет ниже <code>14</code>. Называется новая версия, если что, <code>Android Upside-down cake</code> — “перевёрнутый” пирог или “вверх ногами” или “наизнанку” — как угодно. В общем, суть в том, что после выпекания этот пирог переворачивают и то, что раньше было верхом пирога становится его дном.</p>



<h2 id="core-функциональность">Core функциональность</h2>

<h3 id="разрешение-schedule-exact-alarm-больше-не-выдаётся-автоматически"><strong>Разрешение <code>SCHEDULE_EXACT_ALARM</code> больше не выдаётся автоматически</strong></h3>

<p><code>Exact alarms</code> — это когда нужно выполнить задачу в строго заданное время, ни раньше, ни позже. К примеру — напомнить о встрече. Начиная с Android 14 для большинства устанавливаемых приложений (очевидно, не касается уже установленных), таргет которых начинается с 13, пермишен <a href="https://developer.android.com/reference/android/Manifest.permission#SCHEDULE_EXACT_ALARM" rel="nofollow"><code>SCHEDULE_EXACT_ALARM</code></a> автоматически выдаваться больше не будет. В общем, теперь нужно спрашивать его явно.</p>

<p><details>
<summary>О чём речь</summary></p>
<ul><li><code>SCHEDULE_EXACT_ALARM</code> появилось в <code>API level 31</code> (это <code>S</code>, он же <code>12</code>)</li>
<li>без этого разрешения запланированные задачи будут выполняться не в строго заданное время, а когда ОС разрешит</li>
<li>его нужно (теперь, когда представили – не нужно было) запрашивать. Сценарий будет не как с <code>runtime permission</code> — диалог — а как разрешение на установку приложений, когда пользователь на отдельном экране дёргает переключатель</li>
<li>этого экрана может не быть вовсе. Вообще все экраны “специальных разрешений” имеют пометку, что производитель прошивки может его убирать. Имейте в виду.</li>
<li>и пользователь, и ОС могут переключатель выставить в отключенное состояние, отозвав разрешение
<ul><li>отзыв разрешения автоматически удаляет все запланированные задачи</li></ul></li>
<li>в <code>API level 33</code> (это <code>TIRAMISU</code>, он же <code>13</code>) у этого разрешения появилась альтернатива <a href="https://developer.android.com/reference/android/Manifest.permission#USE_EXACT_ALARM" rel="nofollow"><code>USE_EXACT_ALARM</code></a>
<ul><li>это разрешение выдаётся автоматически</li>
<li>пользователь не может его отозвать</li>
<li>вас выбросят из Google Play за использование этого разрешения, если приложение не является будильником или чем-то подобным, чему реально нужно срабатывать секунда в секунду. <a href="https://tenor.com/view/lost-girl-ksenia-solo-tick-tick-time-bomb-bomb-gif-3883905" rel="nofollow">Я смотрел весь сериал только из-за этой гифки</a>
</details></li></ul></li></ul>

<hr>

<h3 id="контекстно-зарегистрированные-бродкасты-ставятся-в-очередь-для-кешированных-приложений"><strong>Контекстно-зарегистрированные бродкасты ставятся в очередь для кешированных приложений</strong></h3>

<p>Если приложение перешло в состояние “кешировано” (то есть оно не на переднем плане и не убито системой и становится кандидатом на отстрел), то контекстные бродкасты складываются в очередь. Если приложение не будет отстрелено системой и пользователь снова к нему обратиться, то лежащие в очереди бродкасты будут доставлены, если контекст позволяет.</p>

<p><details>
<summary>О чём речь</summary></p>

<p>Контекстно-зарегистрированные бродкасты, это те, которые были зареганы в контексте чего-то. Например, в контексте активити. То есть если активити приложения умерло, то и бродкаст больше не придёт. Если бродкаст был зареган в апликейшен контексте, то будет доставлен, пока жив хоть какой-то компонент приложения</p>

<p></details></p>

<hr>

<h3 id="приложения-могут-убить-только-собственные-фоновые-процессы"><strong>Приложения могут убить только собственные фоновые процессы</strong></h3>

<p>Метод <a href="https://developer.android.com/reference/android/app/ActivityManager#killBackgroundProcesses(java.lang.String)" rel="nofollow"><code>killBackgroundProcesses()</code></a> может убить теперь только фоновые процессы того приложения, из которого был вызван. Наконец сдохнет большинство “оптимизаторов батареи”. К сожалению, во-первых только сторонние, во-вторых не все. Вендорский шлак так и будет существовать, а разработчики стороннего ПО то и дело будут ссылаться на <a href="https://dontkillmyapp.com/" rel="nofollow">https://dontkillmyapp.com/</a></p>

<p><details>
<summary>О чём речь</summary></p>
<ul><li>это древняя апишка, которая защищена разрешением <code>KILL_BACKGROUND_PROCESSES</code>. Само её существование для сторонних приложений — бред какой-то</li>
<li>эта апишка не позволяла убивать системные приложения, только сторонние</li>
<li>патч безопасности от 1 декабря 2022 уже ограничил работу пермишена <code>KILL_BACKGROUND_PROCESSES</code> — стало нельзя убивать сторонние процессы</li>
<li>теперь это ограничение, которое раньше было только фиксом безопасности, затащили в ОС. Другими словами, изменение произошло в конце прошлого года на всех актуальных версиях ОС</li>
<li>некоторые оптимизаторы использовали не эту апишку, а работали хитрее через <code>Accessibility Service</code>. Так что готовьтесь к тому, что шлак массово будет переходить на это, очень опасное, API
</details></li></ul>

<hr>

<h2 id="безопасность">Безопасность</h2>

<h3 id="поднят-минимальный-таргет-для-устанавливаемых-приложений"><strong>Поднят минимальный таргет для устанавливаемых приложений</strong></h3>

<p>Приложения с <code>targetSdkVersion</code> ниже 23 (это <code>Android 6</code>) больше не могут быть установлены. То есть в <code>Android 14</code> теперь все приложения будут поддерживать <code>runtime permission</code>, либо не будут работать вовсе. Если приложение с более низким таргетом было установлено, когда на ваше устройство прилетел <code>Android 14</code>, то для него будет сделано исключение и оно продолжит работать. Но вот переустановить его уже нельзя будет.</p>

<hr>

<h3 id="поле-media-owner-package-name-может-быть-изменено"><strong>Поле Media owner package name может быть изменено</strong></h3>

<p>К хранилищу медиа можно делать запросы поля <a href="https://developer.android.com/reference/android/provider/MediaStore.MediaColumns#OWNER_PACKAGE_NAME" rel="nofollow"><code>OWNER_PACKAGE_NAME</code></a>, в котором будет (или не будет — может быть <code>NULL</code>) указано имя пакета, который сохранил определённый медиа файл. Начиная с <code>Android 14</code> значение этого поля будет подменяться для всех приложений кроме (должно быть выполнено хоть одно условие):</p>
<ul><li>приложение, которое сохранило этот файл, входит в список приложений, которые всегда видимы другим</li>
<li>приложение, которое запросило это поле, имеет разрешение <a href="https://developer.android.com/reference/android/Manifest.permission#QUERY_ALL_PACKAGES" rel="nofollow"><code>QUERY_ALL_PACKAGES</code></a></li></ul>

<p><details>
<summary>О чём речь</summary></p>

<p>Ничего не понятно, правда?</p>
<ul><li>запросы к медиа хранилищам делаются как запросы к БД. Пусть они и обёрнуты в некое API, сути это не меняет</li>
<li>запросить можно в том числе “а кто создал этот файл”: <a href="https://developer.android.com/reference/android/provider/MediaStore.MediaColumns#OWNER_PACKAGE_NAME" rel="nofollow"><code>OWNER_PACKAGE_NAME</code></a>. В ответ придёт или имя пакета приложения, или <code>NULL</code></li>
<li>Google решили, что через такие запросы можно понять, какие приложения установлены на устройстве. И это, надо сказать, разумно. Вполне себе тянет на утечку по сторонним каналам. А ведь уже давно запрос списка установленных приложений защищается пермишеном <code>QUERY_ALL_PACKAGES</code></li>
<li>сложив два и два, Google сделали так. Если приложение, которое пытается узнать владельца файла через эту апишку, не владеет разрешением <code>QUERY_ALL_PACKAGES</code>, то проверяется, является ли владелец файла всегда видимым приложением
<ul><li>это всякие системные приложения — они ведь всегда есть, чего их скрывать</li>
<li>приложения, которые установило ваше собственное приложение. Оно и так знает, что установило, чего скрывать</li>
<li>приложение, которое вызывало ваше через <code>startActivityForResult()</code>. Это ведь оно вас позвало, оно и так уже призналось в своём существовании</li>
<li>всякое другое, типа контент провайдеров, клавиатур. <a href="https://developer.android.com/training/package-visibility/automatic" rel="nofollow">Подробнее тут, если надо</a></li></ul></li>
<li>в итоге, если владелец не входит в список всегда видимых <code>&amp;&amp;</code> запрашивающий не владеет <code>QUERY_ALL_PACKAGES</code>, то он не сможет узнать владельца. Как именно подменяется владелец я не смотрел. Да и не важно, хоть там будет просто <code>android</code> написано, хоть там будет <code>NULL</code>. Главное, что нельзя таким образом составить список установленных приложений
</details></li></ul>

<hr>

<h2 id="user-experience">User experience</h2>

<p>Давайте уже согласимся, что говорить “юикс” нормально, а говорить “пользовательский опыт” — это ментальное заболевание. Впрочем, лично мне нравится говорить “привычки”, хотя в реальной речи стараюсь не использовать это слово. Оно нравится мне, но другие как-то так не говорят и боюсь, что буду сбивать с толку других</p>

<h3 id="взаимодействие-с-несмахиваемыми-уведомлениями"><strong>Взаимодействие с несмахиваемыми уведомлениями</strong></h3>

<p>В <code>Android 14</code> пользователь может смахивать уведомления, которые ранее были не смахиваемыми, но в конкретных случаях. Если уведомление сделано не смахиваемым установкой флага <a href="https://developer.android.com/reference/android/app/Notification#FLAG_ONGOING_EVENT" rel="nofollow"><code>FLAG_ONGOING_EVENT</code></a>, то пользователь теперь может всё-таки его смахнуть. Флаг выставляется, например, через <a href="https://developer.android.com/reference/androidx/core/app/NotificationCompat.Builder#setOngoing(boolean)" rel="nofollow"><code>NotificationCompat.Builder#setOngoing(boolean)</code></a>.</p>

<p>Такие уведомления всё равно не будут смахиваться, если:</p>
<ul><li>телефон заблокирован. Ну то есть на экране блокировки</li>
<li>пользователь нажал кнопку очистки уведомлений. То есть случайно потерять не получится</li></ul>

<p>Поведение не меняется, если:</p>
<ul><li>уведомление создано с использованием <a href="https://developer.android.com/reference/androidx/media/app/NotificationCompat.MediaStyle" rel="nofollow"><code>MediaStyle API</code></a> — то есть явно для плееров</li>
<li>политики запрещают это действие</li></ul>

<p><details>
<summary>О чём речь</summary></p>

<p>Подавляющее большинство моих знакомых (и я сам) в первую очередь подумали — касается ли это <code>foreground service</code>? Если вы знаете ответ заранее — снимаю шляпу.</p>
<ul><li>мы привыкли, что уведомления фореграунд сервисов не смахивались, в общем-то</li>
<li>в <code>Android 13</code> поведение изменилось. Уведомления от фореграундов стало можно смахивать</li>
<li>чтобы всё же закрепить уведомление, нужно ручками выставлять флаг <code>Notification#FLAG_ONGOING_EVENT</code>, о котором говорилось выше. По умолчанию билдер за вас его не выставит</li>
<li>в <code>Android 14</code> уже пошли дальше и флаг тоже почикали
</details></li></ul>

<hr>

<h3 id="предоставление-частичного-доступа-к-фото-и-видео"><strong>Предоставление частичного доступа к фото и видео</strong></h3>

<p>Если вам достаточно <a href="https://developer.android.com/training/data-storage/shared/photopicker" rel="nofollow">фото пикера</a>, то можно пропускать.</p>

<p>В <code>Android 13</code> появились пермишены доступа к изображениям (<code>READ_MEDIA_IMAGES</code>) и видео (<code>READ_MEDIA_VIDEO</code>). В <code>Android 14</code> диалог запроса разрешения изменился:</p>
<ul><li>появилась кнопка для <strong>выбранных фото и видео</strong>. Пользователи могут указать вполне конкретные фото и видео, к которым приложению можно иметь доступ</li>
<li>кнопка <strong>всегда разрешающая доступ</strong> к выбранному типу медиа</li>
<li>кнопка, которая <strong>не даёт разрешения</strong></li></ul>

<p>Ну и видно, что разрешение <code>READ_MEDIA_AUDIO</code> не задето.</p>

<p><details>
<summary>О чём речь</summary></p>
<ul><li>в <code>Android 13</code> добавились новые разрешения на доступ к медиа, которые нужно использовать вместо <code>READ_EXTERNAL_STORAGE</code>: <code>READ_MEDIA_IMAGES</code>, <code>READ_MEDIA_VIDEO</code> и <code>READ_MEDIA_AUDIO</code></li>
<li>если приложение, которое работает с этими разрешениями, будет установлено в <code>Android 14</code>, то диалог запроса разрешений изменится — добавится новая кнопка
<ul><li>то есть мы понимаем, что минимально возможный таргет будет <code>Android 13</code>. Ведь до этого таких разрешений не было</li></ul></li>
<li>теперь пользователь может нажать новую кнопку и дать доступ не ко всем картинкам, а к конкретным</li>
<li>если пользователь сделает выбор конкретных, то это разрешение сработает примерно как <code>one time permission</code> — то есть будет выдано на текущую жизнь прилаги. После отстрела и нового запроса разрешения диалог появится вновь</li>
<li>разрешение всего и запрет всего работают как раньше</li>
<li>это поведение можно сделать немного прозрачнее в первую очередь для себя самого, благодаря новому пермишену <code>READ_MEDIA_VISUAL_USER_SELECTED</code>, но оно доступно только для <code>target 14</code>. Впрочем, в этом случае лучше использовать именно пикер, а не изобретать свой велосипед
</details></li></ul>

<hr>

<h2 id="специальные-возможности">Специальные возможности</h2>

<h3 id="масштабирование-шрифта-до-200"><strong>Масштабирование шрифта до 200%</strong></h3>

<p>Система позволит задавать масштабирование шрифта до 200%. Будьте добры убедиться, что ваше приложение к этому готово.</p>

<p>Признаюсь, я ни разу не видел приложений, которые готовы хотя бы к небольшому увеличению размеров шрифтов. Всё сразу начинает ехать, перестаёт влезать. В общем, дизайнеры будут класть болт на людей со слабым зрением на 200% яростнее.</p>

<hr>

<h1 id="изменения-стреляющие-для-target-на-14-и-выше">Изменения, стреляющие для target на 14 и выше</h1>

<p>Некоторые из изменений ниже касаются приложений с таргетом и ниже <code>14</code>. Но поддержка <code>14</code> позволяет управлять поведением более точно.</p>

<h2 id="core-функциональность-1">Core функциональность</h2>

<h3 id="для-foreground-services-требуется-указание-типа"><strong>Для foreground services требуется указание типа</strong></h3>

<p>Для приложений с <code>targetSdkVersion</code> на <code>Android 14</code> для <em>каждого</em> <code>foreground service</code> нужно указывать его тип из заранее предопределённого списка. Если для приложения нельзя выбрать логичный тип из списка, то нужно переехать на <code>WorkManager</code> или специально созданный <code>user-initiated data transfer job</code>. Не уверен, что это нужно переводить. Вроде понятно, что речь идёт о задачах, которые инициировал сам пользователь.</p>

<p><details>
<summary>О чём речь</summary></p>
<ul><li>для таргета на <code>Android 10</code> для сервисов в манифесте стало нужно указывать тип <a href="https://developer.android.com/guide/topics/manifest/service-element#foregroundservicetype" rel="nofollow"><code>android:foregroundServiceType</code></a> для некоторых задач: камеры, геолокации. Если сервис не использовался для этих целей, то и тип не нужен</li>
<li>для таргета на <code>Android 14</code> тип указать обязан и никак иначе. На выбор даётся более десятка типов (звонки, камера, локация, здоровье, микрофон и другое). Фореграунд сервиса без типа быть теперь не может</li>
<li>если для какого-то сервиса не подходит ни один тип, то у вас два пути:
<ul><li>переход на <a href="https://developer.android.com/topic/libraries/architecture/workmanager" rel="nofollow"><code>WorkManager</code></a>. С этим, думаю, всё понятно, ему лет сто уже. Если не знакомы — ознакомьтесь, сбросьте часть рутины. Но добавите новую зависимость. А мы знаем, что <code>Google</code> делает со своими либами каждые несколько лет</li>
<li>переход на “задачи передачи данных, инициированных пользователем”: <a href="https://developer.android.com/about/versions/14/changes/user-initiated-data-transfers" rel="nofollow"><code>user-initiated data transfer jobs</code></a></li></ul></li>
<li>пользовательские задачи — это всякие длинные задачи, которые пользователь инициировал явно, но которые не подходят по списку типов. К примеру, скачивание файла с удалённого ресурса или копирование файлов на внешний носитель
<ul><li>трансфер джобы обязывают объявить пермишен <code>RUN_LONG_JOBS</code>. Читайте так: в следующей версии или через пару тоже начнут ограничивать. Да и <code>Google Play</code> может начать делать кислые щи</li></ul></li>
<li>есть некоторая защита от того, что вы впишете тип хоть какой-нибудь, чтобы от вас отстали. Для этого каждому типу сопоставлено разрешение, которое нужно объявить в манифесте. А лепить разрешения “чтобы отстали” уже не хочется</li>
<li>есть отдельный тип <code>Short service</code>, который может быть полезен для реально коротких задач. Он не требует отдельного разрешения. Однако жизнь этого сервиса ограничена ~3 минутами, которые начинают тикать с вызова <code>startForeground()</code> и заканчивают в момент остановки сервиса (можно <code>selfStop()</code>, можно <code>stopForeground()</code>. Если не уложились в 3 минуты и не остановили сервис, ловите <code>ANR</code>. Кроме того одновременно может работать только один короткоживущий сервис. Попытка запустить ещё один приведёт к исключению <code>ForegroundServiceStartNotAllowedException</code>
</details></li></ul>

<hr>

<h2 id="безопасность-1">Безопасность</h2>

<h3 id="ограничения-неявных-и-отложенных-интентов"><strong>Ограничения неявных и отложенных интентов</strong></h3>

<p>Мы все говорим “интент”. А вот говорите вы “отложенный” или “пендинг”?</p>

<p>Приложения с таргетом на <code>Android 14</code> получают изменённое поведение взаимодействия <em>со своими собственными компонентами</em>:</p>
<ul><li>больше нельзя послать неявный интент не экспортированному компоненту — поймаешь исключение</li>
<li>при попытке создать отложенный мутабельный интент, не указав компонент или хотя бы пакет явно, снова словите исключение</li></ul>

<p><details>
<summary>О чём речь</summary></p>

<p>Вроде и понятно, а вроде не очень, да?</p>
<ul><li>компонентам приложения (активити, сервисы, вот это всё) в манифесте нужно выставлять флаг экспорта <a href="https://developer.android.com/guide/topics/manifest/activity-element#exported" rel="nofollow"><code>android:exported</code></a></li>
<li>документация нам говорила, что экспортированные (<code>android:exported=&#34;true&#34;</code>) компоненты доступны всем приложениями на подёргать. Если хотите экспортированный, но защищённый, для вас есть специальный механизм разрешений</li>
<li>если компонент не экспортированный, то дёргать его можно только изнутри этого же приложения (более широко — от этого же <code>UID</code>). И привилегированные системные компоненты ещё могли войти в этот сарай (отсылка для поехавших). Если же левое приложение попытается дёрнуть такой компонент, то получит исключение, что нет такого</li></ul>

<p>Повторим ещё раз. Изнутри приложения можно дёргать свои собственные не экспортированные компоненты. Никаких ограничений тут нет</p>
<ul><li>многие разработчики делали не экспортированные, например, активити и для него создавали фильтр вида <code>my.mega.app.action.NAME</code>. Ну и далее из кода <code>context.startActivity(my.mega.app.action.NAME)</code></li>
<li>однако (<strong>это частный пример</strong>) авторы вредоносных приложений стали создавать экраны, которые выглядят точно также, как те, на которые они нацелились. И создавали такие же фильтры. Теперь система не знает, кому послать интент, он же не явный. Выбор из настоящего экрана и поддельного перекладывается на пользователя и тот может сделать неправильный выбор. То есть внешние приложения по-прежнему не могут вызвать не экспортированные компоненты, но могли прикинуться теми приложениями</li>
<li>теперь, если таргет <code>Android 14</code>, для вызова своего собственного не экспортированного компонента нужно создавать явный интент. Что не позволит уже уйти этому интенту не в те ворота
</details></li></ul>

<hr>

<h3 id="бродкаст-ресиверы-зарегистрированные-в-рантайме-должны-явно-указать-эспортированность"><strong>Бродкаст ресиверы, зарегистрированные в рантайме, должны явно указать эспортированность</strong></h3>

<p>Контекстные ресиверы (о них было выше) в приложениях с таргетом на <code>Android 14</code> обязаны явно указать, экспортированы они (<code>RECEIVER_EXPORTED</code>) или нет (<code>RECEIVER_NOT_EXPORTED</code>). При регистрации слушателя системных бродкастов (к примеру переход в режим полёта или установка приложения) это указание не требуется. Всё равно системные послать кто угодно не может — считается, что защита уже есть.</p>

<hr>

<h3 id="более-безопасная-динамическая-загрузка-кода"><strong>Более безопасная динамическая загрузка кода</strong></h3>

<p>Если приложение имеет таргет <code>Android 14</code> и использует динамическую загрузку кода, то есть буквально передаёт внешнюю либу загрузчику, то теперь нужно помечать файл с этим кодом доступным только для чтения: <a href="https://developer.android.com/reference/java/io/File#setReadOnly()" rel="nofollow"><code>File#setReadOnly()</code></a></p>

<p>Ну и отдельно <code>Google</code> просит (но не проверяет) явно пересоздавать эти файлы. Не проверять, что раз файл есть, то не перекачивать. А прям удалять и качать его снова. Видимо идея в том, чтобы вам не подложили левый файл и вы не приняли его за свой собственный. Ну и просят проверять подпись файла.</p>

<p>В общем-то суть сводится к старой истории, когда одно приложение качало недостающие компоненты со своего сайта в общедоступную папку, а троян на устройстве пользователя просто клал заранее подготовленный файл и приложение жрало его как родной.</p>

<hr>

<h3 id="новые-ограничения-запуска-активити-из-фона"><strong>Новые ограничения запуска активити из фона</strong></h3>

<p>Для приложений с таргетом на <code>Android 14</code>, система накладывает ограничения на запуск активити из фона:</p>
<ul><li>отправитель, посылающий <code>PendingIntent</code> другому приложению, <a href="https://developer.android.com/reference/android/app/ActivityOptions#setPendingIntentBackgroundActivityStartMode(int)" rel="nofollow">должен явно указать</a>, позволяет ли он запускать себя из фона</li>
<li>когда видимое приложение использует метод <code>bindService()</code> и, собственно, биндится к сервису другого приложения, которое сейчас в фоне, оно должно сообщить, можно ли теперь тому фоновому сервису запускать активити инициатора. Для этого есть флаг <code>BIND_ALLOW_ACTIVITY_STARTS</code></li></ul>

<p><details>
<summary>О чём речь</summary></p>

<p>Запутанно из-за всех этих “оно”, “его”. Кто, кому, чего? Признаюсь, перечитывал описание раз 10 и каждый раз понимал по-разному.</p>

<h4 id="сначала-с-pendingintent"><strong>Сначала с <code>PendingIntent</code></strong></h4>
<ul><li>это такой вид интента, который можно передать другому приложению так, будто ты его внутри себя перебрасываешь. И получатель теперь может дёргать твои компоненты от твоего имени. То есть создаёшь интент на запуск экрана. Оборачиваешь его в пендинг интент и передаёшь этот пендинг внешнему приложению. Теперь внешнее приложение может запустить твой экран от твоего же имени</li>
<li>при создании объекта отложенного интента нужно заранее решить, позволяем ли получателю поднимать наши экраны из фона. Можем разрешить, запретить или оставить на усмотрение системы</li>
<li>метод пришёл на смену <a href="https://developer.android.com/reference/android/app/ActivityOptions#setPendingIntentBackgroundActivityLaunchAllowed(boolean)" rel="nofollow"><code>setPendingIntentBackgroundActivityLaunchAllowed</code></a>, который появился в <code>13</code> и сдох в <code>14</code>. Впрочем, его нигде и не афишировали. И судя по исходникам, он вообще скрыт. Видимо планировали, но не доделали</li></ul>

<h4 id="теперь-с-биндингом-к-сервису"><strong>Теперь с биндингом к сервису</strong></h4>
<ul><li>наше приложение видимо пользователю</li>
<li>есть другое приложение, которое предоставляет сервис и сейчас в фоне где-то</li>
<li>наше приложение биндится к сервису второго приложения</li>
<li>раньше это второе приложение получало возможность запускать активити из фона. Типа, ко мне же подключилось видимое приложение</li>
<li>теперь поведение изменилось. Разрешение на запуск активити не предоставляется. Приложение, которое биндится, должно явно передать <code>BIND_ALLOW_ACTIVITY_STARTS</code>
</details></li></ul>

<hr>

<h2 id="обновлены-ограничения-не-sdk-интерфейсов">Обновлены ограничения не SDK интерфейсов</h2>

<p>Начиная с <code>Android 9</code> урезают доступ к разным API. Часть держат в белом списке, часть в сером (типа, готовьтесь, можем отрезать), к части доступ заблокировали. Каждый релиз список пополняется. Вот, снова пополнили. Сейчас он весит больше 50 Мегабайт в <code>csv</code> формате.</p>

<p>Пример одной строки, как эти ограничения описаны:</p>

<p><code>Landroid/Manifest$permission   -&gt;BIND_COMPANION_DEVICE_SERVICE:Ljava/lang/String       public-api  sdk system-api  test-api</code></p>

<p>В этих ограничениях меня забавляет то, что куча либ самого <code>Google</code>, из джет пака, обращаются к серым <code>API</code>.</p>

<hr>

<p>Не знаю как вам, а мне изучение было полезным. А то я уже несколько релизов пропустил.</p>
]]></content:encoded>
      <guid>https://text.tchncs.de/umnik/eto-prosto-podbivka-spiska-izmenenii-s-poiasneniiami-chtoby-ne-skakat-po-stat-ia</guid>
      <pubDate>Sun, 12 Mar 2023 21:00:38 +0000</pubDate>
    </item>
  </channel>
</rss>