что такое accessibility service на андроид

Android Accessibility Suite: что это за программа

На каждом смартфоне имеются приложения, предустановленные производителем по умолчанию. Чаще всего это сервисы Google и фирменные софт разработчика. Понять предназначение конкретной утилиты бывает сложно, поэтому пользователи обращаются за помощью в Интернет. Давайте разберемся, для чего нужна программа Android Accessibility Suite, а также как она настраивается и удаляется.

Что такое Android Accessibility Suite

что такое accessibility service на андроидAndroid Accessibility Suite – официальное приложение от Google, представляющее собой инструмент для людей с ограниченными возможностями. До недавнего обновления программа называлась TalkBack и выполняла аналогичную функцию. Через настройки утилиты можно включить голосовое дублирование всех действий на экране, активировать упрощенную систему управления смартфоном и добавить голосовые команды. Сервис полностью бесплатный и доступен для скачивания в Google Play.

Для чего нужен Android Accessibility Suite

Возможности программы действительно впечатляют, поэтому рекомендуем ознакомиться с ее основными функциями:

На этом возможности Android Accessibility Suite не заканчиваются, поэтому при желании можно установить программу и разобраться самостоятельно.

Как удалить или отключить Android Accessibility Suite

что такое accessibility service на андроид

Отключить программу Android Accessibility Suite возможно через настройки смартфона. Чтобы не допустить ошибок – воспользуйтесь пошаговой инструкцией:

Если нужная кнопка отсутствует, то значит софт является системным и не подлежит остановке. Единственный вариант – удаление программы. До недавнего времени для этого нужно было иметь на телефоне root-права, но сейчас достаточно компьютера и утилиты ADB Run. Первым делом активируем в настройках смартфона откладку по USB:

что такое accessibility service на андроид

Теперь подключаем телефон к компьютеру через USB-кабель. Обратите внимание, что на ПК должны быть установлены драйвера для конкретной модели устройства. На Windows 10 это делается автоматически, а на более ранних версиях операционной системы выполняется ручная инсталляция. Также в панели уведомлений телефона выберите режим «Передача файлов». Открываем программу ADB Run и вводим команду с кодом «12». Нажимаем «Enter».

что такое accessibility service на андроид

На следующем этапе вводим команду «7» и нажимаем «Enter».

что такое accessibility service на андроид

Теперь заходим в настройки телефона и просматриваем имя пакета приложения. На смартфоне Xiaomi это делается через нажатие по значку «!». Зачастую название пакета Android Accessibility Suite такое: com.google.android.marvin.talkback.

что такое accessibility service на андроид

Вводим данную информацию в программу и нажимаем «Enter».

что такое accessibility service на андроид

При успешном выполнении процедуры в рабочей области ADB Run появится сообщение «Success». После деинсталляции выберите параметр «Безопасное извлечение устройства», и перезагрузите смартфон. Удаление сервиса Android Accessibility Suite положительно отразится на скорости работы телефона.

Подводя итоги отметим, что программа Android Accessibility Suite будет по-настоящему полезна только людям с ограниченными возможностями. Среднестатистическому пользователю приложение никак не пригодится.

Источник

Что такое Android Accessibility Suite?

что такое accessibility service на андроид

За последние пару десятилетий технологии сильно продвинулись вперед, особенно если говорить о телефонах. Сегодня практически у всех есть смартфон: мы используем их каждый день и уже не можем представить свою жизнь без них. Да, они удобны и просты в использовании для многих людей, однако не для всех.

Многие люди с ограниченными возможностями не могут сполна использовать определенные технологии, если они не оснащены функциями универсального доступа.

Именно для этого и служит Android Accessibility Suite – инструмент, упрощающий процесс использования устройств на базе Android для людей с ограниченными возможностями. Ниже мы разместили все, что вам нужно знать о данной технологии.

Что такое Android Accessibility Suite?

что такое accessibility service на андроид

Android Accessibility Suite – набор различных приложений Google, предназначенных для людей с ограниченными возможностями зрения, слуха, речи и другими физическими недостатками.

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

Меню специальных возможностей

что такое accessibility service на андроид

Меню специальных возможностей предоставляет собой большое экранное меню управления многими функциями смартфона. С помощью него вы можете заблокировать телефон, регулировать громкость и яркость, делать скриншоты, получать доступ к помощнику Google и многое другое.

Озвучивание при нажатии

что такое accessibility service на андроид

Функция Select to Speak (озвучивание при нажатии) в Android Accessibility Suite призвана помочь слабовидящим. Когда она включена, вы можете выбрать определенный объект на экране, чтобы услышать его описание.

Вы можете коснуться объекта, например, текста или изображения. Чтобы услышать названия нескольких элементов, нужно провести пальцем по экрану. А если нажать значок «Воспроизвести», то вы услышите названия всех элементов.

TalkBaCK

что такое accessibility service на андроид

Программа чтения с экрана TalkBack позволяет взаимодействовать со смартфоном с помощью нажатий и речи. Инструмент описывает действия пользователя, чтобы он знал, что делает на своем телефоне. Кроме того, вы также можете управлять смартфоном с помощью жестов.

TalkBack предоставляет доступ к клавиатуре Брайля, с помощью которого можно вводить символы 6-точечного шрифта, касаясь экрана (в настоящее время поддерживается лишь английский шрифт).

TalkBack также хорошо работает с BrailleBack: подключите дисплей Брайля к устройству через Bluetooth, и на нем будет показано содержимое экрана; вместе эти два приложения сочетают азбуку Брайля, чтобы вы могли легко взаимодействовать со своим устройством.

Switch Access

что такое accessibility service на андроид

Функция позволяет управлять Android устройством с помощью клавиатуры или одного или нескольких переключателей. Вы можете использовать переключатель для выбора элементов, просмотра содержимого, ввода текста и т.д.

Практически все, что поддерживает USB или Bluetooth, можно подключить к смартфону и использовать вместо сенсорного экрана.

Диспетчер вашего телефона

что такое accessibility service на андроид

Приложение Phone Companion (диспетчер телефона) в основном предназначено для людей, которые хотят получить мгновенный доступ ко всем любимым функциям телефона прямо с компьютера.

Если включить данную службу, она позволяет управлять всеми приложениями телефона прямо с ПК. Таким образом, вы можете использовать Android клавиатуру для навигации, но слышать обратную связь через динамики ПК.

Источник

Android Accessibility Suite что это за программа и нужна ли она?

Во всех только что купленных устройствах есть предустановленные программы. Когда мы первый раз запускаем смартфон, мы видим перед собой набор приложений. Многие из них нам незнакомы и даже после их запуска не сразу можно определить, для чего оно. Одним из таких приложений является Android Accessibility Suite. Что это за программа и нужна ли она на вашем мобильном устройстве, вы сможете узнать, прочитав эту статью.

что такое accessibility service на андроид

Подробнее о приложении Android Accessibility Suite

Когда приложение появилось впервые на устройствах и в маркетах для загрузки, оно называлось иначе — TalkBack. Со временем разработчики подкорректировали название и переименовали его в Android Accessibility Suite. Оно более ясно раскрывает суть его назначение. В переводе значит — набор доступа Андроид. Приложение предназначено для людей с ограниченными возможностями. С его помощью люди смогут эффективнее использовать свой смартфон или планшет на операционной системе Android. Рассмотрим основные функции программы:

Новые функции в Android Accessibility Suite

С момента выхода первой версии TalkBack с приложением произошло немало изменений. Новые функции были добавлены для еще большего удобства при работе с мобильным устройством.

Настройки программы Accessibility Suite

Чтобы включить возможность чтения голосом текста в приложении Accessibility Suite, нужно просто зажать всю качельку (регулятор громкости) с обеих сторон. Их нужно так держать около 3 секунд. Если не удалось активировать эту функцию с первого раза, сделайте еще одну попытку. Когда окно функции откроется, вам нужно будет подтвердить, что вы действительно её активируете. Для того, чтобы это сделать в настройках:

Часто людям с ограниченным возможностями необходим более крупный шрифт. Поэтому приложение Android Accessibility Suite является очень нужным и практичным. В приложении размер окна или его части можно увеличивать при помощи настроенных жестов. К примеру, по умолчанию в приложении вы можете увеличить размер экрана, нажав 3 раза на нужном месте. Для возврата прежнего размера, снова сделайте то же самое. В программе Accessibility Suite можно увеличить размер экрана при помощи значка с человечком. Нажмите его и затем коснитесь нужного места на экране.

Субтитры являются еще одной вспомогательной и полезной функцией. В мобильном приложении их также можно включить. Их можно еще и редактировать: устанавливать шрифт, язык, стиль.

Полезно ли приложение Accessibility Suite

Для пользователей, у которых есть проблемы со здоровьем, говорить о том, нужна ли программа Android Accessibility Suite не приходится. Многие функции являются необходимыми в разных ситуациях. Нужен только пользователь, который сможет настроить приложение. Соответственно, если человек не имеет проблем со здоровьем, в приложении для него нет никаких полезных функций. Поэтому его можно просто отключить.

Как отключить или удалить приложение Accessibility Suite

Если вы устанавливали приложение отдельно, то его очень просто можно удалить.

После этих действия программа полностью удалится из вашего смартфона или планшета. Удалится также кэш и прочие файлы, которые устанавливало на ваше устройство приложение. В том случае, если оно было предустановлено разработчиком, то программу таким образом не удалить. Чтобы оно не работало вместе другими приложениями в фоновом режиме, вы может его только выключить. Для этого:

Если у вас в устройстве есть root-права, вы сможете удалить приложение из телефона совсем.

Отзывы о приложении Android Accessibility Suite

На странице приложения Accessibility Suite в маркете Play Google люди оставляют отзывы о данном приложении. Среди них есть как те, кто благодарит разработчиков, так и те, кто крайне недоволен этим приложением. Пользователи утверждают, что помощник Android содержит вирусы. После того, как программу Accessibility Suite удаляют по ненадобности, оно восстанавливается снова.

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

Источник

Автоматизируем работу с программами на Android при помощи Accessibility Service

что такое accessibility service на андроид

Содержание статьи

Понажимай эти кнопки за меня

Еще в XIX веке Гегель сказал: «Машиноподобный труд нужно отдать машинам». И тут с одним из творцов немецкой классической философии трудно поспорить: вряд ли Георг Вильгельм Фридрих отказался бы от автоматизации таких действий, как отключение звука и нажатие кнопки «Пропустить рекламу» при просмотре ролика в YouTube или получение ежедневных бонусов за посещение приложения. Тем более что для всего этого у нас уже есть готовый инструментарий!

Как мы говорили в предыдущей статье, Accessibility Service может получать события, происходящие на экране, но он же может и вызывать их. Например, находить нужные элементы в приложении и кликать по ним.

Ставить чужое приложение с подобной функциональностью опасно — все мы знаем репутацию Google Play и примерно представляем себе, что такое приложение может сделать с твоим банковским клиентом на телефоне. Поэтому выхода два: либо декомпилировать чужое ПО и смотреть, куда именно оно нажимает, либо пилить свое, строго под поставленные задачи.

Для исследовательских целей я создал приложение, которое будет само в себя кликать из собственного сервиса :).

Подготовка к работе сервиса

Чтобы наш сервис начал работу, ему нужно предоставить права в специальном разделе настроек. Как перенаправить туда пользователя, ты уже знаешь из первой статьи. Дополнительно мы сами можем перепроверить, есть ли эти права у приложения.

Здесь accessibilityservice_id — это строка вида «имя пакета/.сервис», у нас это ru.androidtools.selfclicker/.ClickService.

Вот описание сервиса из манифеста:

Параметр label отвечает за название приложения в настройках сервиса спецвозможностей. В разделе meta-data задается указание на описание нужных функций для работы сервиса. Вот файл serviceconfig:

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

Полное описание этих параметров, как всегда, есть в документации.

что такое accessibility service на андроид checkAccess() вернул false!

Xakep #271. Сила четырех байтов

Жизненным циклом сервиса управляет система. Сами остановить сервис мы не можем. ОС самостоятельно выгрузит ненужные сервисы — к примеру, зачем крутить сервис для приложения, которое не запущено?

Мы можем привязать сервис к строго нужному приложению. Как только мы дали разрешение на работу, у сервиса вызовется метод onServiceConnected. У него мы должны вызвать метод setServiceInfo() с параметром AccessibilityServiceInfo. За фильтрацию приложений, с которыми работает сервис, отвечает строковый массив packageNames.

Работаем с событиями AccessibilityEvent

После раздачи всех разрешений нам надо запустить нужное приложение. Если мы знаем его имя пакета, сделать это несложно:

Для запуска приложения с чистого листа используем флаг Intent.FLAG_ACTIVITY_CLEAR_TOP. В противном случае приложение может вернуться на экран со старым состоянием, очень далеким от стартового экрана.

Теперь нужно обрабатывать события в методе onAccessibilityEvent. У события есть тип, он поможет определить, что произошло (например, сменилось окно, кликнули по элементу, элемент получил фокус). Чтобы получить источник события AccessibilityNodeInfo, надо у объекта события вызвать метод getSource().

Источник имеет много полезных свойств, помогающих в работе: текст, ID, имя класса. У него могут быть родительский и дочерние элементы.

Он может быть кликабельным isClickable(), и, чтобы щелкнуть по нему, как нормальный пользователь, нужно вызвать метод performAction(AccessibilityNodeInfo.ACTION_CLICK).

Если мы хотим более глобальных действий, например нажать клавишу «Назад» на устройстве, то следует вызвать метод performGlobalAction() с нужным параметром.

Чтобы найти на экране требующуюся AccessibilityNodeInfo, мы можем вызвать один из методов: поиск по ID (findAccessibilityNodeInfosByViewId) и поиск по тексту (findAccessibilityNodeInfosByText). Будь готов к тому, что он вернет нам массив элементов или вообще ни одного.

Потренируемся на кошках, точнее — на окошках

Вот разметка нашего подопытного экрана:

У некоторых элементов есть ID и текст, у других только текст, некоторые некликабельны.

Иногда обработчики кликов устанавливают на области, превышающие своими размерами элемент с текстом или картинкой.

Поизучаем эту задачу с помощью метода debugClick.

Вот что вышло в лог:

Чтобы воспроизвести последовательность кликов, нужно сначала изучить элементы, которые будут нажиматься. Но иногда также важна и последовательность их нажатий.

Для нажатий на первые две кнопки можно использовать findAccessibilityNodeInfosByText и findAccessibilityNodeInfosByViewId. Если текст у элементов повторяется, дополнительно можно проверять на ClassName или родителя.

Чтобы кликнуть в наш LinearLayout, нужно получить его AccessibilityNodeInfo, ID у него нет, но есть дочерние элементы TextView и Button, у которых есть текст.

Для начала нам нужно получить один из них, а потом кликнуть в его родителя.

Бывают и обратные ситуации, когда есть родитель, а кликаем мы в дочерние. Для этого используй nodeInfo.getChildCount() и обращайся к элементу в цикле по ID nodeInfo.getChild(id) (если не ошибаюсь, нумерация ID идет с нуля).

Начинать работу сервиса лучше с события смены окна:

Если весь алгоритм действий уже готов, то можно запускать сервис автоматически через AlarmManager, например раз в сутки.

Отменить запуск можно вот так:

Заключение

Класс AccessibilityService позволит избавиться от рутинных операций на твоем Android-устройстве. Его возможностей достаточно, чтобы реализовать почти любую задачу, главное — дать разрешения и найти кликабельный элемент на экране.

Источник

Android accessibility — волк в овечьей шкуре? Лекция Яндекса

Месяц назад на очередной Droid Party старший разработчик Данила Фетисов подробно разобрал принцип действия службы, которая отвечает за accessibility-функции Android. Вы узнаете о том, как использовать её для улучшения доступности своих проектов, а также об опасной уязвимости под названием clickjacking.

— Меня зовут Данила Фетисов, я из московского офиса Яндекса, конкретнее — из Такси, конкретнее — из Таксометра. Сегодня мы с вами поговорим о том, что же такое Android accessibility и почему же я такую святую штучку для людей с ограниченными возможностями решил назвать волком в овечьей шкуре.

что такое accessibility service на андроид

Итак, план доклада. Сначала мы с вами посмотрим, как эту штуку можно применять, создавать и настраивать. Может быть, расскажу парочку лайфхаков, продуктовых ништяков. И потом о самом интересном — о том, почему же эта штука является опасной.
что такое accessibility service на андроид
Как вообще мы можем это применять? Вообще что это такое, для тех, кто не знает? В системе происходят какие-либо события, они падают нам в сервис, и мы их обрабатываем.

Раз нам что-то падает, мы можем взять оттуда контент и озвучить с помощью того же Yandex SpeechKit, Google Text-to-Speech или еще чего нибудь, что вам нравится. Но что самое интересное, мы можем не просто получить, но и закинуть событие системы. Еще можно что-нибудь сказать. Закинул событие, нажал кнопочку, и прямо все отлично, радуешься жизни.

Если говорить про эти два пункта, они, по сути, являются дефолтными. Google и запустил эту фичу для того, чтобы вашим приложением могли пользоваться люди с ограниченными возможностями. Но как все знают, мы, разработчики, скучать не хотим: садимся, смотрим код и думаем: как же можно применить? И пошло-поехало.

Автоматизация, тестирование с помощью имитации действий пользователя, контекстная реклама. Сами понимаете: раз мы получаем контент с экрана, то мы можем понимать, как третировать этого пользователя.

Что еще интересного? Обработка USSD-запросов. К сожалению, нормальный API появилась только с 26-го SDK, и разработчикам как-то нужно выживать. И вы представьте, они серьезно парсят USSD-запросы, парсят UI при помощи AccessibilityService.

Шестой пункт — многоточие. Почему? Потому что после этого доклада у вас примерно сложится понимание, как это применять и для чего. А дальше буквально открываете свой поток фантазии, берете чашечку чаю, кофе, и погнали кодить свои крутые фичи.

С чего начать? Следующий слайд будет до боли банальным.
что такое accessibility service на андроид

Берем сервис, наследуем от AccessibilityService и радуемся жизни.

Закидываем потом этот сервис в Manifest, и что же тут интересного? По сути, обычная запись сервиса. Но обратите внимание на поле label. Сейчас я не буду рассказывать, что это такое. Запомните, это будет чуть позже.
что такое accessibility service на андроид
что такое accessibility service на андроид

Дальше по Manifest у нас просто файлик конфигов, тоже ничего интересного.
что такое accessibility service на андроид

А сам файлик конфигов немножечко пострашнее выглядит. Из того, что вам понадобится, скорее всего, процентов 85–90 — это поле настройки фильтра для входящих событий.

Допустим, здесь стоит, что мы хотим получать абсолютно все события. Вы можете поставить фильтр только на клики, на изменение контента или на что-то еще.

Далее — фильтр на пакеты приложений. Для чего это нужно? Вы сами прекрасно понимаете, что получать события от абсолютно всех приложений в системе было бы слишком для одного приложения. Поэтому Google решил это как-то ограничить. Добавил фильтр.

Далее description. Было поле label, а теперь используют description. По сути, они создают пару, которая затем расскажет пользователю, для чего нужно включить ваш сервис.

И последний пункт: нужен или не нужен контент из текущего открытого окна. Если вы хотите просто понимать, что произошло какое-то событие, ставьте false и не мучайте лишний раз пользователя.
что такое accessibility service на андроид

Включение сервиса. К сожалению, чтобы включить эту штукенцию, вам придется помучить полдьзователя и заставить его пройти через семь кругов ада настроек, условно говоря.

Сначала открываем ему специальные возможности. Крутой AccessibilityService — это как раз таки и есть тот label из manifest, о котором я вам говорил на предыдущих слайдах.
что такое accessibility service на андроид

Дальше. Пользователю нужно выбрать ваш сервис, и тут он начинает читать description, зачем же вы хотите включить этот сервис и получить определенный контроль над устройством.
что такое accessibility service на андроид

Окей, включает. Но не тут-то было. Вылезает какой-то страшный диалог, который говорит: «Чувак, если ты сейчас включишь, мы захватим полный контроль над твоим приложением, условно говоря, будет все страшно». Пользователи не всегда все это читают, просто кликают «ОК», чтобы мы от них отстали. Так что живем.

Ну, что же, где же обработка событий по факту у нас получается? Следующий слайд немножко поумнее первого слайда про сервис, но тем не менее.
что такое accessibility service на андроид

Вот наш DummyAccessibilityService, и мы закидываем туда два метода, в котором будем все писать. По сути, interrupt — такой метод, в котором вы должны почистить ваши ссылочки, остановить подписки или что-нибудь еще.

Самое интересное — это класс AccessibilityEvent, который к нам падает. Что же мы можем из него достать?
что такое accessibility service на андроид
Для начала мы можем понять, что же, на самом деле, произошло у вас в системе. Берем EventType, и что тут достаем?

А достаем, что у нас какая-то Activity там открылась, или Dialog, или Popup, или вообще нотификация свалилась. Прямо все туда падает на window_state_changed.

Далее понимаем, что контент у какой-то вьюхи изменился. Подвинули ее, закинули какую-то строчку в text view или что-нибудь подобное.

А дальше мы узнаем, когда пользователь кликает, или выбирает какую-либо вьюшку. По-моему, 85, да даже 98, наверное, процентов основных продуктовых задач вы покроете при помощи этих event type.

Но если же вам их не хватает — пожалуйста, можете ходить в документацию, я ссылочку в конце доклада вам покажу, и, конечно, вы скачаете доклад, сможете перейти. Просто это чтение на целый вечер, там громадный список. Серьезно, за один раз не осилишь.
что такое accessibility service на андроид
Теперь вопрос у нас: как же найти view? Мы узнали, что произошло. А теперь давайте поймем, с какой же view, с каким компонентом это произошло.

Берем наш AccessibilityEvent.

Берем у него Source, и, вуаля, метаинформация по view уже у нас.

Но что делать, если вы хардкорный разработчик, и вам не хватает информации про одну view, вам хочется понять, что в принципе происходит сейчас на экране? Тут есть ограничение на SDK, но оно мелкое.
что такое accessibility service на андроид
Берем наш AccessibilityService, и получаем, по сути, ссылочку на корневой элемент во всей иерархии на текущем экране. И уже потом достаем нашу мета-информацию по view.
что такое accessibility service на андроид
Это, конечно, классно, но сейчас у вас в голове должен быть вопрос: ну, получили мы ссылку на корневой элемент. Что же нам дальше-то делать?

Если хотите пойти безопасным путем, то, пожалуйста, первый вариант. Берете ID view, и просто находите одним методом.

Если вам кажется, что это как-то скучновато, охота чего-то повеселее, то берем текст из view, находим по тексту.

Если и это вам недостаточно интересно — ну, ладно, ребята, берите Child и Recursion, ходите по нему. Тогда точно поймете все, что происходит.

Отлично. Мы с вами поняли, как находить view. Как же теперь взаимодействовать с ней?

Опять берем наш AccessibilityNodeInfo, и теперь уже закидываем Action в него. Какие же Action мы можем туда закинуть?
что такое accessibility service на андроид
Для начала мы можем закинуть Click. Почему в итоге я сюда поставил не после просто Click, а еще Click и Select? Да потому что есть куча corner case, когда обычный Click вас не спасет. Допустим, пользователь выбрал текст, и клик по вьюхе чисто уберет selection с этого текста. Или же на некоторых девайсах в принципе вьюха не кликабельна, пока Select у нее не вызовешь. В общем, очень много проблем. И если вы хотите просто париться — делайте Select, делайте Click. Два Action, и все, счастье есть.

Что же дальше у нас? А дальше у нас установка текста. Тут тоже все просто. Берем Action_set_text, создаем Bundle с нашей строчкой, и живем.

И третий пункт — это go в документацию. Опять же, это второй вечер уже у вас будет. Куча экшенов прямо, по-моему, еще больше, чем событий.

Ура! Самая скучная часть доклада закончилась. Теперь пошло время всяких ништячков.

Допустим, вы создали сервис, настроили его, закинули какую-то обработку событий. Теперь вам нужно понять, как заставить пользователя, как попросить его все-таки включить этот сервис. Чтобы это понять, вам нужно узнать, в принципе сейчас включен сервис или нет.
что такое accessibility service на андроид

Тут до банальности все просто. Берем AccessibilityManager и спрашиваем у него все включенные на текущий момент сервисы в системе, и там находим наш.

Но все было бы, конечно, классно, если бы AccessibilityManager был нормальным парнем, и не было такого, что ты у него спрашиваешь: «Чувак, дай мне, пожалуйста, все доступные сервисы», а он говорит: «Извини, я сегодня не в настроении. Вот тебе пустой список». И ты такой сидишь и думаешь: «Блин, нормально же общались».
что такое accessibility service на андроид

Ну ладно, есть старые добрые друзья — это Settings.Secure.getInt и getString. Сначала мы спрашиваем, включены ли вообще сервисы в системе. Если включены, то в одну строчку закидываются все, и там уж мы через контент какой-нибудь ищем наш.

И тут встречаемся с тем, что мы все сделали правильно. Мы создали конфигурацию, создали на стройку всяких событий, включили сервис. Прямо точно видим, что включили сервис, а события к нам не прилетают. Причем так, что то прилетают, то не прилетают. В тот момент я подумал, что в моей жизни какая-то черная полоса наступила. Прямо никаких не было вариантов.

Думал-думал, ресерчил-ресерчил, и тут, бинго, я понял, что это — это Xiaomi с их MIUI. Вот просто, ребята, боль! Вот серьезно.

Окей, поняли, в чем проблема. Как же теперь ее решать? К сожалению, на некоторых прошивках в MIUI все сделано так, что если вашего приложения нет в автостарте, то система не будет в принципе стартовать даже ваш сервис.
что такое accessibility service на андроид

Но тут одно решение — просим пользователя добавить ваше приложение в автостарт, и живем дальше, радуемся жизни.
что такое accessibility service на андроид
И вот наступила вишенка на торте. Почему же этот сервис, такой добрый для людей с ограниченными возможностями, является волком в овечьей шкуре?

Мне кажется, многие из вас уже догадались, что если пользователь включит этот сервис, то мы спокойно сможем украсть достаточно много конфиденциальной информации с его устройства. Мало того, что мы сможем ее украсть, мы можем закинуть ее куда-нибудь, допустим, экран разблокировать, если он заблокирован при помощи пин-кода. Ну, окей, разблокируем экран. Что дальше? Накликаем себе рекламки, заработаем кучу денег, прямо заживем. И, в конце концов, можем в принципе сымитировать абсолютно любые действия пользователя, и, допустим, поставить какое-нибудь приложение, выдать ей админские права, и сказать пользователю: «Давай до свидания. Прощайся со своим устройством».
что такое accessibility service на андроид
Окей, мы можем все это сделать, но вы сейчас скажете: «Ты, конечно, молодец. Рассказал нам, как мы можем какие данные украсть. Но как ты заставишь пользователя включить ваш AccessibilityService, причем если еще приложение какое-то левое?». Окей, пользователь, мне кажется, просто откроет настройки, поймет, что там написан какой-то бред, закроет, удалит приложение и забудет. И знаете, вы будете правы в том, что первый способ включения через системные настройки сходит на «нет», потому что, сами понимаете, это бред какой-то. И тут к нам на помощь приходит уязвимость, которая, по сути, называется clickjacking. Ребята, кто из вас знаком в принципе с clickjacking? Отлично, будет интересно.

Так вот, на основе этой уязвимости некоторые ребята — ссылочку небольшую я приложил, потому что все следующие скрины будут с ресурса этих ребят — придумали атаку, которая называется Cloak and Dagger. По сути, при помощи всего лишь двух permission и минимального взаимодействия с пользователем вы получаете доступ ко всему приложению прямо от слова «совсем».
Но окей, что нам нужно сделать, чтобы все-таки взломать пользователя?

Мы закидываем наше приложение в Google Play. Мы надеемся, что у пользователя Android версии меньше 8.

Сами понимаете, чуть-чуть — 95% на текущий момент. И все, пользователь скачивает наше приложение.
что такое accessibility service на андроид

Если вкратце, то эта malware рассказывает пользователю, как стать хорошим парнем, показывает в самом конце видюшечку. Сейчас сами все увидите.
что такое accessibility service на андроид

Окей, стартуем. Небольшой текст. Нам говорят: «Если ты сейчас начнешь tutorial, то станешь хорошим парнем». Окей, конечно, начинаем.
что такое accessibility service на андроид

Еще какой-то текст. Дальше люди будут представлены в виде зеленых человечков. Ну, ладно, давайте, нажимаем Next.
что такое accessibility service на андроид

Еще текст. Ну, ладно. Сейчас я его дочитаю и точно увижу видюшку, на которой мне расскажут, как стать хорошим парнем.
что такое accessibility service на андроид
что такое accessibility service на андроид

Нажимаю «Окей», и там запускается видюшка. Это нам не столь важно. Важно, что на самом деле происходило на устройстве в этот момент. Пользователь запускает приложение, а так как мы его поставили из Google Play, нам автоматом выдаются permission на overlay. Вуаля, мы открываем окошко специальных возможностей, и сверху просто overlay. Пользователь кликает на Start Tutorial, а на самом деле выбирает наш AccessibilityService. Ну, вы понимаете, что пошло дальше.
что такое accessibility service на андроид

Дальше мы нажимаем Next, выбираем тумблер.
что такое accessibility service на андроид

В самом конце мы включаем AccessibilityService, и пользователь даже не догадывается, что это произошло.

Знаете, в чем тут проблема? Overlay устроены таким способом, что они либо полностью поглощают все события, все touch и так далекк, либо они полностью пропускают. И фишка именно этой атаки в том, что мы заполняем overlay, весь экран кроме одного пространства. В данном случае это кнопочка OK. Эта кнопочка — действительно из диалога. Когда мы на нее кликаем, мы получаем ивент, узывающий, что произошел touch outside, и все отлично.

Как же Google реагирует на все эти проблемы? Сами понимаете, это достаточно жестокая уязвимость.
что такое accessibility service на андроид
Началось все достаточно интересно — все с восьми лет молчания. Google зарелизил эту штучку, сказал: «Ребята, пользуйтесь. Это безопасно. Точно говорю». Ну окей. Google закидывали. Те же самые ребята, которые Cloak and Dagger придумали, закидывали и саппорт, и issue trackers, и bug trackers.

Потом Google сказал: «Ладно, ладно, ребята, успокойтесь. Я закрою clickjacking в Oreo». Ну ладно, закрыли. Сидят такие еще, думают: «Ну, блин, ребята, все-таки если злоумышленники заставят пользователя включить ассеssibility, это будет плохо. Давайте-ка немножечко над разработчиками поиздеваемся.

И отправляют письмо: «Сделайте то, не знаю, что, иначе ваше приложение будет удалено из Google Play». Если кратко сказать, то в письме было следующее: «Ребята, расскажите нам и пользователям, для чего вам нужны AccessibiiltyService». Как рассказать? В каком формате? Где? Вообще нет понимания. И в письме, конечно же, это не указано.

Ну окей. Громадные треды на reddit, куча писем в саппорт. И потом какой-то разработчик выкладывает на reddit письмо, и в нем говорится: «Да там, ребята, ничего сложного. Закиньте в description, который я вам показал, в manifest, закиньте в описание в Google Play, и все будет нормально, я от вас отстану».

Я в этот момент подумал: ну окей, нашел я это письмо в каких-то кулуарах Reddit. А что если я молодой разработчик, только познакомился с AccessibilityService и хочу зарелизить приложение с этим? Откуда я должен узнать, что мне нужно произвести такие действия, нужно в description, в Google Play закинуть т. д.? Думал-думал, искал-искал и, знаете, ребята, ничего не нашел, от слова совсем.

Ну, серьезно, ничего нет. Есть просто описание в основной документации: «Ребята, это чисто для людей с ограниченными возможностями и точка. Больше никак использовать нельзя». А на самом-то деле, оказывается, можно.
что такое accessibility service на андроид
Что ж, мы с вами подошли к концу. Что же мы смогли с вами проговорить? Мы проговорили, как это можно использовать, поняли, как это все создавать, настраивать, поняли, как обрабатывать UI-события. И, конечно, поняли, как можно, но не нужно взаимодействовать с AccessibilityService. Конечно, я вам не рекомендую так делать, это было просто для информации. Вот обещанные источники:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *