Русский
Русский
English
Статистика
Реклама

Android os

Особенности обновлений прошивки мобильных устройств

18.09.2020 14:13:41 | Автор: admin
Обновлять или не обновлять прошивку на личном телефоне каждый решает самостоятельно.
Кто-то ставит CyanogenMod, кто-то не чувствует себя хозяином устройства без TWRP или jailbreak.
В случае с обновлением корпоративных мобильных телефонов процесс должен быть относительно единообразным, иначе IT-шникам даже Рагнарёк покажется забавой.

О том, как это происходит в корпоративном мире, читайте под катом.

Особенности обновлений прошивки мобильных устройств рисунок 1

Краткий ЛикБез


Мобильные устройства на базе iOS получают регулярные обновления аналогично устройствам на Windows, но при этом:

  • обновления выходят реже;
  • обновления получает большинство устройств, но не все.

Apple выпускает обновление iOS сразу для большинства своих устройств, кроме тех, которые снимаются с поддержки. При этом Apple поддерживает свои устройства достаточно долго. Например, обновление iOS 14 получат даже iPhone 6s, вышедшие в 2015 году. Конечно, не обходится без косяков, типа принудительного замедления старых аппаратов, которое, как утверждается, было сделано не с целью вынудить купить новый телефон, а для продления срока службы старого аккумулятора Но в любом случае это лучше, чем ситуация с Android.

Android это по сути своей франшиза. Оригинальный Android от Google встречается только на устройствах линейки Pixel и бюджетных устройствах, которые участвуют в программе Android One. На других устройствах встречаются только производные от Android EMUI, Flyme OS, MIUI, One UI и т.д. Для безопасности мобильных устройств такое разнообразие большая проблема.
Например, сообщество находит очередную уязвимость в Android или системных компонентах, которые лежат в его основе. Далее уязвимости присваивается номер в базе CVE, нашедший получает вознаграждение по одной из баунти-программ от Google, а уж потом Google выпускает заплатку и включает её в очередной релиз Android.

Получит ли её ваш телефон, если он не Pixel или не участник программы Android One?
Если вы купили новое устройство год назад, то, наверное, да, но не сразу. Производителю вашего устройства ещё нужно будет включить патч Google в свою сборку Android и протестировать её на поддерживаемых моделях устройств. Топовые модели поддерживают чуть дольше. Всем остальным остаётся смириться и не читать по утрам базу CVE, чтобы не портить себе аппетит.

Ситуация с мажорными обновлениями Android, как правило, ещё хуже. В среднем новая мажорная версия докатывается до мобильных устройств с кастомными Android не меньше, чем за квартал, а то и больше. Так обновление Android 10 от Google вышло в сентябре 2019, а устройства разных производителей, которым повезло заслужить возможность обновления, получали его вплоть до лета 2020.

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

Особенности обновлений прошивки мобильных устройств, Краткий ЛикБез, картинка 2

Дырявость сборок Android отдельных производителей стала причиной того, что Google изменил архитектуру Android, чтобы доставлять критичные обновления самостоятельно. Проект получил название Google Project Zero, около года назад о нём писали на Хабре. Фича относительно новая, но она встроена во все устройства с 2019 года, где есть сервисы Google. Многие знают, что эти сервисы платные для производителей устройств, которые платят за них роялти в Google, но мало кто знает, что дело не ограничивается коммерцией. Чтобы получить разрешение использовать сервисы Google на конкретном устройстве, производитель должен отдать свою прошивку в Google на проверку. При этом Google не принимает на проверку прошивки с древними Android. Это позволяет Google навязывать рынку свой Project Zero, что, надеемся, сделает Android устройства более безопасными.

Рекомендации корпоративным пользователям


В корпоративном мире используются не только публичные приложения, доступные в Google Play и App Store, но и приложения собственной разработки. Иногда жизненный цикл таких приложений прекращается в момент подписания акта приёма-передачи и оплаты услуг разработчика по договору.

В этом случае установка нового мажорного обновления ОС часто приводит к тому, что такие job-is-done приложения перестают работать. Бизнес-процессы останавливаются, а разработчиков нанимают повторно до возникновения следующего косяка. То же самое случается, когда корпоративные разработчики не успевают вовремя адаптировать свои приложения под новую ОС или новая версия приложения уже доступна, но пользователи её ещё не установили. В том числе для решения таких проблем предназначены системы класса UEM.

UEM системы обеспечивают оперативное управление смартфонами и планшетами, своевременно устанавливая и обновляя приложения на устройствах мобильных сотрудников. Кроме того, они могут откатить версию приложения к предыдущей в случае необходимости. Возможность отката версии назад является эксклюзивной фишкой UEM систем. Ни Google Play, ни App Store такой возможности не предоставляют.

UEM системы могут удалённо заблокировать или отложить обновление прошивки мобильных устройств. Поведение зависит от платформы и производителя устройств. На iOS в режиме supervised (о режиме читайте в нашем FAQ) можно отложить обновление до 90 дней. Для этого достаточно настроить соответствующую политику безопасности.

На Android устройствах производства Samsung можно бесплатно запретить обновление прошивки или воспользоваться дополнительным платным сервисом E-FOTA One, с помощью которого можно указать какие обновления ОС устанавливать на устройства. Это даёт администраторам возможность предварительно проверить поведение корпоративных приложений на новых прошивках своих устройств. Понимая трудоёмкость этого процесса, мы предлагаем своим заказчикам сервис на базе Samsung E-FOTA One, включающий услуги проверки работоспособности целевых бизнес-приложений на используемых у заказчика моделях устройств.

На Android устройствах других производителей аналогичной функциональности, увы, нет.
Запретить или отложить их обновление можно, разве что, с помощью страшилок, типа:
Уважаемые пользователи! Не обновляйте свои устройства. Это может привести к неработоспособности приложений. При нарушении этого правила ваши обращения в службу технической поддержки рассматриваться/выслушиваться НЕ БУ-ДУТ!.

Ещё одна рекомендация


Следите за новостями и корпоративными блогами производителей операционных систем, устройств и платформ UEM. Буквально в этом году Google решил отказаться от поддержки одной из возможных мобильных стратегий, а именно fully managed device with work profile.

За этим длинным названием скрывается следующий сценарий:

До Android 10 UEM-системы полноценно управляли устройством И рабочим профилем (контейнером), в котором содержатся корпоративные приложения и данные.
Начиная с Android 11, возможен полноценный функционал управления только ИЛИ устройством ИЛИ рабочим профилем (контейнером).

Google объясняет нововведения заботой о конфиденциальности данных пользователей и своём кошельке. Если есть контейнер, то данные пользователя должны находиться вне зоны видимости и управления со стороны работодателя.

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

Google утверждает, что такой доступ к личному пространству отпугивал 38% процентов пользователей от установки UEM. Теперь UEM-вендорам остаётся кушать что дают.

Особенности обновлений прошивки мобильных устройств, Рекомендации корпоративным пользователям, картинка 3

Мы заранее подготовились к нововведениям и в этом году предложим новую версию SafePhone, которая будет учитывать новые требования Google.

Малоизвестные факты


В завершение еще несколько малоизвестных фактов об обновлении мобильных ОС.

  1. Прошивки на мобильных устройствах иногда можно откатить. Как показывает анализ поисковых фраз, фразу как восстановить Android ищут чаще, чем обновление Android. Казалось бы, фарш нельзя провернуть назад, но иногда всё-таки можно. Технически защита от отката базируется на внутреннем счётчике, который увеличивается не с каждой версией прошивки. В рамках одного значения этого счётчика откат становится возможен. Это то, что касается Android. В iOS ситуация чуть отличается. С сайта производителя (или бесчисленного числа зеркал) можно скачать образ iOS конкретной версии для конкретной модели. Чтобы установить его по проводу с помощью iTunes, Apple должен подписать прошивку. Обычно в первые несколько недель после выхода новой версии iOS Apple подписывает предыдущие версии прошивок, чтобы пользователи, чьи устройства после обновления глючат, могли вернуть себе более стабильный билд.
  2. Во времена, когда jailbreak сообщество ещё не разбежалось по крупным компаниям, можно было изменить версию отображаемую версию iOS в одном из системных plist. Так можно было, например, сделать iOS 6.2 из iOS 6.3 и обратно. Зачем это было нужно, расскажем в одной из следующих статей.
  3. Очевидна всеобщая любовь производителей к программе для прошивки смартфонов Odin. Лучшего инструмента для прошивки ещё не сделали.

Пишите, обсудим, может и поможем.
Подробнее..

Зона доступа 30 способов, которые позволят разблокировать любой смартфон. Часть 1

21.09.2020 16:09:27 | Автор: admin


В своей работе компьютерные криминалисты регулярно сталкиваются с кейсами, когда надо оперативно разблокировать смартфон. Например, данные из телефона нужны следствию, чтобы понять причины суицида подростка. В другом случае помогут выйти на след преступной группы, нападающей на водителей-дальнобойщиков. Бывают, конечно, и милые истории родители забыли пароль от гаджета, а на нем осталось видео с первыми шагами их малыша, но таких, к сожалению, единицы. Но и они требуют профессионального подхода к вопросу. В этой статье Игорь Михайлов, специалист Лаборатории компьютерной криминалистики Group-IB, рассказывает о способах, которые позволяют экспертам-криминалистам обойти блокировку смартфона.

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


Итак, самым распространенным методом ограничения доступа к пользовательской информации, содержащейся в устройстве, является блокировка экрана мобильного устройства. Когда подобное устройство попадает в криминалистическую лабораторию, работа с ним бывает затруднена, так как для такого устройства невозможно активировать режим отладки по USB (для Android-устройств), невозможно подтвердить разрешение на взаимодействие компьютера эксперта с этим устройством (для мобильных устройств фирмы Apple) и, как следствие, невозможно получить доступ к данным, находящимся в памяти устройства.

Насколько обычная блокировка экрана мобильного устройства препятствует извлечению специалистами данных из него, говорит тот факт, что ФБР США заплатило крупную сумму за разблокировку iPhone террориста Сайеда Фарука, одного из участников теракта в калифорнийском городе Сан-Бернардино [1].

Методы разблокировки экрана мобильного устройства


Как правило, для блокировки экрана мобильного устройства используется:

  1. Символьный пароль
  2. Графический пароль

Также для разблокировки экрана ряда мобильных устройств могут использоваться методы технологии SmartBlock:

  1. Разблокировка по распознаванию отпечатка пальца
  2. Разблокировка по распознаванию лица (технология FaceID)
  3. Разблокировка устройства по распознаванию радужной оболочки глаза

Социальные методы разблокировки мобильного устройства


Кроме чисто технических, существуют и иные способы узнать или преодолеть PIN-код, или графический код (паттерн) блокировки экрана. В отдельных случаях социальные методы могут быть более эффективными, чем технические решения, и помочь в разблокировке устройств, перед которыми пасуют существующие технические разработки.

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

При использовании методов, связанных с подбором пароля, следует учитывать, что:

  • при введении десяти неправильных паролей на мобильных устройствах компании Apple данные пользователя могут быть стерты. Это зависит от настроек безопасности, которые установил пользователь;
  • на мобильных устройствах под управлением операционной системы Android может быть использована технология Root of Trust, которая приведет к тому, что после введения 30 неправильных паролей данные пользователя буду либо недоступны, либо стерты.

Способ 1: cпроси пароль


Это покажется странным, но пароль разблокировки можно узнать, просто спросив у владельца устройства. Как показывает статистика, примерно 70% владельцев мобильных устройств охотно сообщают пароль. Особенно, если это сократит время исследования и, соответственно, владелец быстрее получит свое устройство назад. Если нет возможности спросить пароль у владельца (например, владелец устройства умер) или он отказывается его раскрыть пароль можно узнать у его близких родственников. Как правило, родственники знают пароль или могут подсказать возможные варианты.

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

Способ 2: подгляди пароль


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

Вариантом данного метода является использование записей камер видеонаблюдения, на которых запечатлен владелец, разблокирующий устройство с помощью графического пароля [2]. Описанный в работе Cracking Android Pattern Lock in Five Attempts [2] алгоритм, путем анализа видеозаписей, позволяет предположить варианты графического пароля и разблокировать устройство за несколько попыток (как правило, для этого нужно сделать не более пяти попыток). Как утверждают авторы, чем сложнее графический пароль, тем проще его подобрать.

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

Способ 3: найди пароль


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


Рекомендация по защите: не надо вести блокнотик с паролями. Это плохая идея, кроме случая, когда все эти пароли заведомо ложные, чтобы уменьшить количество попыток разблокировки.

Способ 4: отпечатки пальцев (Smudge attack)


Этот метод позволяет выявить потожировые следы рук на дисплее устройства. Увидеть их можно, обработав экран устройства светлым дактилоскопическим порошком (вместо специального криминалистического порошка можно использовать детскую присыпку или иной химически неактивный мелкодисперсный порошок белого или светло-серого цвета) или посмотрев на экран устройства в косопадающих лучах света. Анализируя взаиморасположение следов рук и имея дополнительную информацию о владельце устройства (например, зная его год рождения), можно попробовать подобрать текстовый или графический пароль. Так выглядит потожировое наслоение на дисплее смартфона в виде стилизованной буквы Z:


Рекомендация по защите: Как мы и говорили, графический пароль это не лучшая идея, как и стекла с плохим олеофобным покрытием.

Способ 5: искусственный палец


Если устройство может быть разблокировано по отпечатку пальца, а исследователь имеет образцы отпечатков рук владельца устройства, то на 3D-принтере можно изготовить трехмерную копию отпечатка пальца владельца и использовать ее для разблокировки устройства [3]:


Для более полной имитации пальца живого человека например, когда датчик отпечатка пальца смартфона еще детектирует тепло 3D-модель надевается (прислоняется) к пальцу живого человека.

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

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

Рекомендация по защите: Если палец, то только ультразвуковой сенсор. Но не забывайте, что приложить палец против вашей воли куда проще, чем лицо.

Способ 6: рывок (Mug attack)


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

Рекомендация по защите: Думаю, если против вас собираются применять такие меры, то дело плохо. Но тут нужно понимать, что случайная блокировка обесценивает этот способ. А, например, многократное нажатие кнопки блокировки на iPhone запускает режим SOS, который в дополнение ко всему выключает FaceID и включает требование кода пароля.

Способ 7: ошибки в алгоритмах управления устройством


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

Примером подхода к разблокировке мобильных устройств, выпущенных ранее 2016 года, является разряд батареи. При низком заряде устройство разблокируется и предложит изменить настройки питания. При этом надо быстро перейти на страницу с настройками безопасности и отключить блокировку экрана [5].

Рекомендация по защите: не забывайте своевременно обновлять ОС своего устройства, а если оно уже не поддерживается менять смартфон.

Способ 8: уязвимости в сторонних программах


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

Примером подобной уязвимости может быть похищение данных из iPhone Джеффа Безоса, основного владельца Amazon. Уязвимость в мессенджере WhatsApp, проэксплуатированная неизвестными, привела к краже конфиденциальных данных, находившихся в памяти устройства [6].

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

Рекомендация по защите: Нужно обновлять не только ОС, но и прикладные программы, которыми вы пользуетесь.

Способ 9: корпоративный телефон


Корпоративные мобильные устройства могут быть разблокированы системными администраторами компаний. Так, например, корпоративные устройства Windows Phone привязываются к аккаунту Microsoft Exchange компании и могут быть разблокированы ее администраторами. Для корпоративных устройств Apple существует сервис Mobile Device Management, аналогичный Microsoft Exchange. Его администраторы также могут разблокировать корпоративное iOS-устройство. Кроме того, корпоративные мобильные устройства можно скоммутировать только с определенными компьютерами, указанными администратором в настройках мобильного устройства. Поэтому без взаимодействия с системными администраторами компании такое устройство невозможно подключить к компьютеру исследователя (или программно-аппаратному комплексу для криминалистического извлечения данных).

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

Способ 10: информация из сенсоров


Анализируя информацию, получаемую от сенсоров устройства, можно подобрать пароль к устройству с помощью специального алгоритма. Адам Дж. Авив продемонстрировал возможность подобных атак, используя данные, полученные акселерометром смартфона. В ходе исследований ученому удалось правильно определить символьный пароль в 43% случаях, а графический пароль в 73% [7].

Рекомендация по защите: Внимательно следите за тем, каким приложениям вы выдаете разрешение на отслеживание различных сенсоров.

Способ 11: разблокировка по лицу


Как и в случае с отпечатком пальца, успех разблокировки устройства с использованием технологии FaceID зависит от того, какие сенсоры и какой математический аппарат используются в конкретном мобильном устройстве. Так, в работе Gezichtsherkenning op smartphone niet altijd veilig [8] исследователи показали, что часть исследуемых смартфонов удалось разблокировать, просто продемонстрировав камере смартфона фотографию владельца. Это возможно, когда для разблокировки используется лишь одна фронтальная камера, которая не имеет возможности сканировать данные о глубине изображения. Компания Samsung после ряда громких публикаций и роликов в YouTube была вынуждена добавить предупреждение в прошивку своих смартфонов. Face Unlock Samsung:


Более продвинутые модели смартфонов можно разблокировать, используя маску или самообучение устройства. Например, в iPhone X используется специальная технология TrueDepth [9]: проектор устройства, с помощью двух камер и инфракрасного излучателя, проецирует на лицо владельца сетку, состоящую из более чем 30 000 точек. Такое устройство можно разблокировать с помощью маски, контуры которой имитируют контуры лица владельца. Маска для разблокировки iPhone [10]:


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

Рекомендация по защите: не используйте разблокировку по фото только системы с полноценными сканерами лица (FaceID у Apple и аналоги на Android-аппаратах).

Основная рекомендация не смотреть в камеру, достаточно отвести взгляд. Если даже зажмурить один глаз шанс разблокировать сильно падает, как и при наличии рук на лице. Кроме того, для разблокировки по лицу (FaceID) дается всего 5 попыток, после чего потребуется ввод кода-пароля.

Способ 12: использование утечек


Базы утекших паролей прекрасный способ понять психологию владельца устройства (при условии, что исследователь располагает информацией об адресах электронной почты владельца устройства). В приведенном примере поиск по адресу электронной почты принес два похожих пароля, которые использовал владелец. Можно предположить, что пароль 21454162 или его производные (например, 2145 или 4162) могли использоваться в качестве кода блокировки мобильного устройства. (Поиск по адресу электронной почты владельца в базах утечек показывает, какие пароли владелец мог использовать, в том числе для блокировки своего мобильного устройства).


Рекомендация по защите: действуйте превентивно, отслеживайте данные об утечках и своевременно меняйте пароли замеченные в утечках!

Способ 13: типовые пароли блокировки устройств


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

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


Как видно на скриншоте части рабочего окна программы UFED Physical Analyzer, устройство заблокировано достаточно необычным PIN-кодом fgkl.

Не стоит пренебрегать иными устройствами пользователя. Например, анализируя пароли, сохраненные в кэше веб-браузера компьютера владельца мобильного устройства, можно понять принципы генерации паролей, которых придерживался владелец. Просмотреть сохраненные пароли на компьютере можно с помощью утилиты компании NirSoft [11].

Также на компьютере (ноутбуке) владельца мобильного устройства могут быть Lockdown-файлы, которые могут помочь получить доступ к заблокированному мобильному устройству фирмы Apple. Об этом методе будет рассказано далее.

Рекомендация по защите: используйте везде разные, уникальные пароли.

Способ 14: типовые PIN-коды


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

Если ничего не помогает можно воспользоваться следующей информацией: исследователи провели анализ и нашли наиболее популярные PIN-коды (приведенные PIN-коды покрывают 26,83% всех паролей) [12]:

PIN Частота, %
1234 10,713
1111 6,016
0000 1,881
1212 1,197
7777 0,745
1004 0,616
2000 0,613
4444 0,526
2222 0,516
6969 0,512
9999 0,451
3333 0,419
5555 0,395
6666 0,391
1122 0,366
1313 0,304
8888 0,303
4321 0,293
2001 0,290
1010 0,285
Применение данного перечня PIN-кодов к заблокированному устройству позволит разблокировать его с вероятностью ~26%.

Рекомендация по защите: проверьте свой PIN-код по таблице выше и, даже если он не совпал, все равно смените его, потому что 4 цифры это слишком мало по меркам 2020 года.

Способ 15: типовые графические пароли


Как было описано выше, имея данные камер видеонаблюдения, на которых владелец устройства пробует его разблокировать, можно подобрать паттерн разблокировки с пяти попыток. Кроме того, точно так же, как существуют типовые PIN-коды, существуют и типовые паттерны, которые можно использовать для разблокировки заблокированных мобильных устройств [13, 14].

Простые паттерны [14]:


Паттерны средней сложности [14]:


Сложные паттерны [14]:



Список самых популярных графических паттернов по версии исследователя Jeremy Kirby [15].
3>2>5>8>7
1>4>5>6>9
1>4>7>8>9
3>2>1>4>5>6>9>8>7
1>4>7>8>9>6>3
1>2>3>5>7>8>9
3>5>6>8
1>5>4>2
2>6>5>3
4>8>7>5
5>9>8>6
7>4>1>2>3>5>9
1>4>7>5>3>6>9
1>2>3>5>7
3>2>1>4>7>8>9
3>2>1>4>7>8>9>6>5
3>2>1>5>9>8>7
1>4>7>5>9>6>3
7>4>1>5>9>6>3
3>6>9>5>1>4>7
7>4>1>5>3>6>9
5>6>3>2>1>4>7>8>9
5>8>9>6>3>2>1>4>7
7>4>1>2>3>6>9
1>4>8>6>3
1>5>4>6
2>4>1>5
7>4>1>2>3>6>5

На некоторых мобильных устройствах, помимо графического кода, может быть установлен дополнительный PIN-код. В этом случае, если не удается подобрать графический код, исследователь может кликнуть на кнопку Доп.PIN-код (дополнительный PIN-код) после ввода неправильного графического кода и попытаться подобрать дополнительный PIN-код.

Рекомендация по защите: лучше вообще не использовать графические ключи.

Способ 16: буквенно-цифровые пароли


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

  • 123456
  • password
  • 123456789
  • 12345678
  • 12345
  • 111111
  • 1234567
  • sunshine
  • qwerty
  • iloveyou
  • princess
  • admin
  • welcome
  • 666666
  • abc123
  • football
  • 123123
  • monkey
  • 654321
  • !@#$%^&*
  • charlie
  • aa123456
  • donald
  • password1
  • qwerty123

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

Способ 17: облачные или локальные хранилища


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

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

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

Из Keychain, сохраненного в iCloud, можно извлечь пароль на резервную копию устройства, установленный владельцем, который, с высокой степенью вероятности, будет совпадать с PIN-кодом блокировки экрана.

Если правоохранительные органы обращаются в Google и Apple компании могут передать имеющиеся данные, что, вероятно, сильно снизит необходимость разблокировки устройства, так как данные уже будут у правоохранителей.

Например, после террористического акта в Пенсоконе копии данных, хранящихся в iCloud, были переданы ФБР. Из заявления Apple:

В течение нескольких часов, после первого запроса ФБР, 6 декабря 2019 года, мы представили широкий спектр информации, связанной с расследованием. С 7 по 14 декабря мы получили шесть дополнительных юридических запросов и в ответ предоставили информацию, включая резервные копии iCloud, информацию об аккаунте и транзакциях для нескольких учетных записей.

Мы отвечали на каждый запрос незамедлительно, зачастую в течение нескольких часов, обмениваясь информацией с офисами ФБР в Джексонвилле, Пенсаколе и Нью-Йорке. По запросам следствия было получено много гигабайт информации, которую мы передали следователям. [17, 18, 19]

Рекомендация по защите: все, что вы отдаете в облако в незашифрованном виде, может и будет использовано против вас.

Способ 18: Google-аккаунт


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

При последовательном вводе неправильного графического пароля несколько раз подряд, устройство предложит восстановить пароль. После этого надо совершить вход в аккаунт пользователя, что приведет к разблокировке экрана устройства [5].

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

Если у исследователя нет пароля к Google-аккаунту владельца устройства его можно попробовать восстановить, используя стандартные методы восстановления паролей от подобных аккаунтов.

Если устройство в момент исследования не подключено к интернету (например, SIM-карта заблокирована или на ней недостаточно денег), то подобное устройство можно подключить к Wi-Fi по следующей инструкции:

  • нажать иконку Экстренный вызов
  • набрать *#*#7378423#*#*
  • выбрать Service Test Wlan
  • осуществить соединение с доступной Wi-Fi-сетью [5]

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

Способ 19: гостевой аккаунт


На мобильных устройствах под управлением операционной системы Android 5 и выше может быть несколько аккаунтов. Для доступа к данным дополнительного аккаунта может отсутствовать блокировка PIN-кодом или графическим кодом. Для переключения нужно кликнуть на иконку аккаунта в правом верхнем углу и выбрать другой аккаунт:


Для дополнительного аккаунта доступ к некоторым данным или приложениям может быть ограничен.

Рекомендация по защите: тут важно обновлять ОС. В современных версиях Android (9 и выше с патчами безопасностями от июля 2020 года) учетная запись гостя, как правило, не дает никаких возможностей.

Способ 20: специализированные сервисы


Компании, занимающиеся разработкой специализированных криминалистических программ, в том числе предлагают услуги по разблокировке мобильных устройств и извлечению данных из них [20, 21]. Возможности подобных сервисов просто фантастические. С помощью них можно разблокировать топовые модели Android- и iOS-устройств, а также устройства, находящиеся в режиме восстановления (в которое устройство переходит после превышения количества попыток неправильного ввода пароля). Недостатком данного метода является высокая стоимость.

Фрагмент веб-страницы сайта компании Cellebrite, где описывается, из каких устройств они могут извлечь данные. Устройство может быть разблокировано в лаборатории разработчика (Cellebrite Advanced Service (CAS)) [20]:


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

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

P.S. Об этих кейсах, инструментах и многих других полезных фишках в работе компьютерного криминалиста эксперты Лаборатории Group-IB рассказывают в рамках обучающего курса Digital Forensics Analyst. После прохождения 5-дневного или расширенного 7-дневного курсов выпускники смогут эффективнее проводить криминалистические исследования и предовтращать киберинциденты в своих организациях.

P.P.S. Остросюжетный Telegram-канал Group-IB об информационной безопасности, хакерах, APT, кибератаках, мошенниках и пиратах. Расследования по шагам, практические кейсы с применением технологий Group-IB и рекомендации, как не стать жертвой. Подключайтесь!

Источники
  1. ФБР нашло хакера, готового взломать iPhone без помощи Apple
  2. Guixin Yey, Zhanyong Tang, Dingyi Fangy, Xiaojiang Cheny, Kwang Kimz, Ben Taylorx, Zheng Wang. Cracking Android Pattern Lock in Five Attempts
  3. Дактилоскопический датчик Samsung Galaxy S10 удалось обмануть с помощью отпечатка пальца, напечатанного на 3D-принтере
  4. Dominic Casciani, Gaetan Portal. Phone encryption: Police 'mug' suspect to get data
  5. Как разблокировать телефон: 5 способов, которые работают
  6. Дуров назвал причиной взлома смартфона Джеффа Безоса уязвимость в WhatsApp
  7. Датчики и сенсоры современных мобильных устройств
  8. Gezichtsherkenning op smartphone niet altijd veilig
  9. TrueDepth в iPhone X что это, принцип работы
  10. Face ID в iPhone X обманули с помощью 3D-печатной маски
  11. NirLauncher Package
  12. Анатолий Ализар. Популярные и редкие PIN-коды: статистический анализ
  13. Мария Нефедова. Графические ключи так же предсказуемы, как пароли 1234567 и password
  14. Антон Макаров. Обход графического пароля на Android-устройствах www.anti-malware.ru/analytics/Threats_Analysis/bypass-picture-password-Android-devices
  15. Jeremy Kirby. Unlock mobile devices using these popular codes
  16. Андрей Смирнов. 25 самых популярных паролей в 2019 году
  17. Мария Нефедова. Конфликт между властями США и компанией Apple из-за взлома iPhone преступника усугубляется
  18. Apple responds to AG Barr over unlocking Pensacola shooter's phone: No.
  19. Law Enforcement Support Program
  20. Cellebrite Supported Devices (CAS)

Подробнее..

Энергопотребление Android-приложений

27.07.2020 16:04:10 | Автор: admin

Ваши пользователи жалуются на то, что приложение очень быстро сажает заряд телефона? Запущенный фоновый сервис внезапно останавливается? Сообщения от FCM не доходят до пользователя? Что связывает эти три серьезных вопроса? Ответ прост неверно выстроенная работа с энергопотреблением приложения.
Давайте разберемся в основных моментах, связанных с этой темой. Возможно, это позволит вам в будущем избежать ошибок, с которыми сталкивалось большинство разработчиков мобильных приложений.


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


image


Общая информация


В Android есть следующие платформенные фичи для оптимизации энергопотребления:



В Android 6 появились две фичи для сохранения заряда батареи за счет управления поведением приложений, когда устройство не на зарядке:


  • Doze Mode.
  • App Standby.

Doze Mode


Когда устройство находится в режиме Doze, доступ приложений к определенным ресурсам откладывается до появления окна обслуживания (maintenance window). Список конкретных ограничений.


Если пользователь оставляет на какое-то время устройство отключенным от зарядки и с выключенным экраном, то оно переходит в режим Doze. В этом режиме система пытается сохранить заряд батареи, ограничивая доступ приложений к сетевым и ресурсоемким службам, откладывает Jobs, синхронизацию и Alarms.


Периодически система выходит из режима Doze, чтобы приложения могли выполнить отложенные действия. Во время этого окна обслуживания (maintenance window) система запускает все отложенные синхронизации, Jobs, Alarms и позволяет приложениям получить доступ к сети.



Со временем система все реже и реже планирует maintenance windows, что помогает снизить расход энергии, когда устройство не на зарядке.


В режиме Doze к приложениям применяются следующие ограничения:


  • Доступ в сеть приостановлен.
  • Стандартные AlarmManager откладываются до следующего окна обслуживания.
  • Система не сканирует Wi-Fi.
  • Система не позволяет запускаться sync adapters.
  • Система не позволяет запускаться JobScheduler.

Чеклист для приложения в режиме Doze:



App StandBy, App StandBy Buckets


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


  • Пользователь явно запускает приложение.
  • Приложение находится на переднем плане (явно или в качестве Foreground service, либо используется другой Activity).
  • Приложение генерирует уведомления, которые пользователь видит на экране блокировки или в области уведомлений.
  • Приложение является активным приложением администратора устройств.

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


Определение частоты использования отличается у разных производителей, особенно жестит Samsung.


В Android 9 появились новые фичи для управления питанием устройства. Они делятся на две категории:


  • App standby buckets. Система ограничивает доступ приложения к ресурсам устройства в зависимости от модели поведения пользователя.
  • Battery Saver Improvements. Когда включена функция экономии заряда батареи, система накладывает ограничения на все приложения.

Эти ограничения применяются ко всем приложениям независимо от их targetSdk.


App StandBy Buckets помогает системе приоритизировать запросы приложений к ресурсам на основании того, как давно и как часто использовалось приложение. На основе шаблонов использования приложение помещается в один из пяти сегментов. Система ограничивает ресурсы устройства, доступные для каждого приложения, в зависимости от того, в каком сегменте находится приложение.


Пять сегментов, назначаемые приложениям в зависимости от приоритета:


  • Active. Приложение находится в активном сегменте, если пользователь в настоящий момент использует приложение. Т.е. если видна Activity, или запущен Foreground service, или есть synchronized adapter, связанный с приложением на переднем плане, или пользователь кликнул на уведомление. Если приложение в активном сегменте, то никакие ограничения на использование ресурсов устройства не накладываются.
  • Working set. Приложение находится в этом сегменте, если часто запускается, но в данный момент не активно. Система накладывает умеренные ограничения на действия этого приложения.
  • Frequent. Приложение находится в этом сегменте, если используется часто, но не каждый день. Система накладывает больше ограничений, также накладываются ограничения на количество сообщений FCM с высоким приоритетом.
  • Rare. Приложение находится в этом сегменте, если оно редко используется. В этом случае система накладывает строгие ограничения и на получение сообщений FCM с высоким приоритетом. Система также ограничивает возможность приложения подключаться к интернету.
  • Never. Это сегмент для приложений, которые были установлены, но никогда не запускались. Система накладывает жесткие ограничения.

Каждый производитель может установить свои критерии присвоения неактивных приложений к сегментам.


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


Полезная информация по работе с App StandBy Buckets:


  • НЕ пытаться манипулировать тем, к какому сегменту система отнесет приложение.
  • Создать Launcher Activity, если ее нет.
  • Создавать обработчик нажатий на уведомления. Если с ними нельзя взаимодействовать, то приложение не сможет перейти в активный сегмент.
  • Если приложение не показывает пользователю уведомление при получении high-priority FCM-уведомления, то пользователь не сможет взаимодействовать с приложением, и оно не перейдет в активный сегмент. Если многие сообщения будут помечены как high-priority, то приложение исчерпает свою квоту на такие сообщения, и все последующие будут иметь normal-priority.

Firebase Cloud Messaging с App StandBy и режимом Doze


Необходимо использовать FCM для взаимодействия с приложением во время простоя устройства. FCM оптимизирован для работы в режимах ожидания Doze и App StandBy с помощью высокоприоритетных FCM-сообщений. Высокоприоритетные сообщения позволяют разбудить приложение для доступа к сети, даже если устройство находится в режиме Doze или приложение в режиме App StandBy. В обоих режимах система доставляет сообщение и дает приложению временный доступ к сетевым сервисам, а затем возвращает устройство или приложение в режим ожидания.


Как протестировать приложение с различными ограничениями системы


Тестирование Doze Mode


  • Получить доступ к ADB (android device bridge) в текущей сессии:

export PATH=~/Library/Android/sdk/platform-tools:$PATH

  • Перевести систему в режим ожидания:

adb shell dumpsys deviceidle force-idle

  • Выйти из режима ожидания:

adb shell dumpsys deviceidle unforce

  • Активировать устройство:

adb shell dumpsys battery reset

  • Проверить поведение приложения.

Тестирование приложения с App StandBy для Android < 9


  • Перевести приложение в App StandBy:

$ adb shell dumpsys battery unplug
$ adb shell am set-inactive <package_name> true

  • Пробудить приложение:

$ adb shell am set-inactive <package_name> false
$ adb shell am get-inactive <package_name>

  • Проверить работу приложения. Убедиться, что восстанавливается корректно. Проверить, продолжают ли работать уведомления и фоновые процессы.

Тестирование App Standby Buckets


Можно вручную переместить приложение в определенный App StandBy bucket с помощью команды:


adb shell am set-standby-bucket <package_name> active|working_set|frequent|rare

Команда проверки, в каком сегменте сейчас приложение:


adb shell am get-standby-bucket <package_name>

Тестирование ограничений на фоновые процессы


  • Вручную применить ограничения на выполнение фоновых задач:

adb shell cmd appops set <package_name> RUN_ANY_IN_BACKGROUND ignore

  • Убрать ограничения на выполнение фоновых процессов:

adb shell cmd appops set <package_name> RUN_ANY_IN_BACKGROUND allow

Тестирование режима Battery safety


  • Отключить устройство от ПК:

adb shell dumpsys battery unplug

  • Проверить поведение устройства в условиях экономии энергии:

adb shell settings put global low_power 1

  • Отменить ручную настройку:

adb shell dumpsys battery reset

Фоновые оптимизации.


Ограничения, начиная с Android 7:


  • Не отправляются широковещательные сообщения `CONNECTIVITY_ACTION`, если receiver объявлен в манифесте. Если receiver зарегистрирован динамически, то сообщение будет получено.
  • Приложения не могут получать или отправлять `ACTION_NEW_PICTURE` или `ACTION_NEW_VIDEO`.

Ограничения, начиная с Android 9:


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


  • Чрезмерные wake locks.
  • Избыточное количество фоновых сервисов.

Точные ограничения определяются производителем устройства.


Battery Historian


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


Анализ приложения с помощью Battery Historian


Предварительно необходимо установить Docker.


  • Получить доступ к ADB (android device bridge) в текущей сессии:

export PATH=~/Library/Android/sdk/platform-tools:$PATH

  • Подключить устройство к ПК.
  • Убить текущий ADB-сервер.

adb kill-server

  • Проверить доступные устройства:


adb devices

  • Сбросить данные о батарее:


adb shell dumpsys batterystats --reset

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

adb devices

  • Сделать дамп данных батареи:

adb shell dumpsys batterystats > [path/b]batterystats.txt

  • Создать отчет для данных:

adb bugreport [path/]bugreport.zip

  • Запустить (порт можно указать любой):

docker run -p 5554:5554 gcr.io/android-battery-historian/stable:3.0 --port 5554

  • В браузере перейти по ссылке http://localhost:5554 и открыть ZIP файл.

  • Вот так примерно будет выглядеть график BatteryHistorian:


На этом графике вы можете узнать, в какой момент запустился ваш сервис, установились wake locks, был запущен JobScheduler и другую информацию. Возможно, вы даже узнаете о своем приложении то, чего еще не знали и о чем не подозревали. Уделите этому инструменту пару-тройку свободных часов и гарантирую, вы не пожалеете.


Energy Profiler


Energy Profiler встроенный в Android Studio анализатор энергопотребления. Думаю, тут не стоит задерживаться. Этот инструмент довольно хорошо описан, и каждый может оценить его в действии.


BatteryStats + UI-тесты


В этой главе мы разберем, как можно использовать связку из BatteryStats и UI-тестирования.


  • Перед запуском теста я написал bash-скрипт:

echo Write test class path e.g. <путь_к_классу_с_тестом>
read testName
export PATH=~/Library/Android/sdk/platform-tools:$PATH
adb shell dumpsys battery unplug
adb shell dumpsys batterystats --reset
adb shell am instrument -w \ -e class $testName \ com.myapp.test/androidx.test.runner.AndroidJUnitRunner
adb shell dumpsys batterystats | awk -f BatteryStatsParseScript.awk > BatteryTestsResult.txt
adb shell dumpsys batterystats > BatteryTestsResultFull.txt
adb shell dumpsys batterystats reset
echo You can find the output file in the parent directory named BatteryTestsResult.txt

  • Для начала нужно ввести расположение класса с тестом. Например, класс `com.myApp.MyTestEspressoTest`.
  • Далее подключается ADB.
  • Устройство отключается от ПК.
  • Сбрасывается статистика BatteryStats.
  • Запускается тест, подставляет класс, введенный нами ранее, и используемый фреймворк для тестирования.
  • Выгружается информация об энергопотреблении и парсится в более читаемый формат с помощью .awk-файла. Далее этот файл сохраняется под именем BatteryTestsResultFull.txt в главной папке приложения (или в любой другой, которую вы выберете).
  • Выводится сообщение с расположением файла с результатом.
  • Сбрасывается статистика BatteryStats.
  • Вы восхитительны!

Для парсинга файла, получившегося после теста, применяется .awk-файл. Сам файл я решил не прикладывать, т.к. он получился огромным, и не все будут использовать те же поля, что использовал я. В результате получаем текстовый BatteryTestsResult.txt такого содержания:


Estimated battery capacity: 3700 mAh

Time on battery: 32s 609ms (100.0%) realtime, 32s 610ms (100.0%) uptime

App Uid u0a358
Cpu Usage: 1.56 mAh
Radio Usage: mAh
WiFi Usage: 0.0476 mAh
Wake Usage: mAh
Sensor Usage: mAh
GPS Usage: 0.0417 mAh
Total App Usage: 1.65mAh

Total time in seconds: 32 seconds
Usage per second: 0.0515625 mAh/seconds

User activity: 14 touch

Wi-Fi network: 335.22KB received, 342.84KB sent (packets 745 received, 758 sent)

Результат более удобочитаемый, что стандартный файл BatteryStats. При желании вы можете добавить необходимые поля для анализа либо вместо .awk-файла использовать регулярные выражения.


P.S. Проблемы с Samsung


При написании статьи я наткнулся на полезный сайт https://dontkillmyapp.com, на котором можно узнать, какие ограничения накладывают различные производители на энергопотребление устройств. Самой частой проблемой, с которой я сталкивался, была жалоба пользователей Samsung на высокое энергопотребление различными приложениями. И на этом ресурсе я нашел ответ на свой вопрос.


Вместе с релизом Samsung S8 была представлена утилита для увеличения времени работы батареи под названием App Power Monitor. И чтобы приложения работали корректно, их нужно вносить в whitelist. Также Samsung рекордсмен по убийству приложений благодаря его Адаптивной батарее.


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



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

Подробнее..

Создание SDK под Android в стиле Single-Activity

18.10.2020 04:15:28 | Автор: admin

Single activity подходом при создании конечного приложения под Android никого не удивишь. Но мы пошли дальше и использовали No-Activity при разработке SDK. Сейчас разберемся для чего это понадобилось, возникшие сложности и как их решали.

Стандартные 3rd party SDK в Android

Как обычно работают внешние SDK в Android? Открывается Activity библиотеки, выполняется некая работа, при необходимости возвращается результат в onActivityResult.

Стандартная схема работы SDK.Стандартная схема работы SDK.

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

Желаемый стек экранов приложения и SDKЖелаемый стек экранов приложения и SDK

Получается, что экраны нашего SDK должны быть частью внешнего приложения. Точно также, как вы можете использовать, например, MapFragment от Google. Итого, при стандартном подходе, мы сталкиваемся с рядом трудностей и ограничений.

Проблемы при стандартном подходе к SDK

  • Если вам нужно несколько взаимодействий между SDK и приложением, то придется открывать-закрывать Activity от SDK и аккуратно обрабатывать передачу данных туда-обратно.

  • Сложно поддержать такой логический порядок экранов, когда элементы приложения чередуются с SDK. (Спойлер: это можно понадобится, но редко).

  • При относительно долгом возможном нахождении в SDK внешнее приложение может уйти в Lock Screen. Такое может случиться, если Lock реализован на колбеках жизненного цикла Activity.

No-Activity подход при разработке SDK

Итак, мы решили, что основная проблема в том, что контекст (Activity) внешнего приложения и SDK разные. Отсюда следует резонное решение - отказаться от контекста SDK и во внешнее приложение поставлять только фрагменты. В таком случае разработчик сможет сам управлять стеком экранов.

No-Activity SDK на ФрагментахNo-Activity SDK на Фрагментах

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

Плюсы No-Acitivty SDK

  • Приложение и SDK имеют общий контекст, т.е. для пользователя это выглядит как абсолютно единое приложение.

  • Основное приложение имеет свой стек фрагментов, а SDK - свой через childFragmentManager.

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

Минусы No-Acitivty SDK

  • Внешнее приложение должно изначально работать с фрагментами, желательно вообще быть Single-Activity.

  • У SDK нет своего контекста, если хотите использовать dagger - придется исхитриться (но это все же возможно).

  • SDK может влиять на внешнее Acitivty, т.к. requireActivity вернет именно его. Надо полностью доверять SDK.

  • Activity будет получать onActivityResult, и, вероятно, придется его прокидывать во фрагменты.

  • Разработчику внешнего приложения сложнее интегрировать SDK, т.к. простой вызов Activity уже не сработает.

Использование 3rd party библиотек внутри SDK

При любом подходе так или иначе придется использовать библиотеки внутри SDK. Это в свою очередь может привести к коллизии версий с внешним приложением. А части библиотек, например dagger2 нужен будет выделенный контекст.

Dagger2 внутри SDK

Для использования dagger зачастую в приложении используется класс Application. В случае с SDK так сделать не получится, потому что Application, вероятно, будет перетерт со стороны внешнего приложения.

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

internal object ComponentHolder {    lateinit var appComponent: SdkAppComponent        private set    @Synchronized    fun init(ctx: Context) {        if (this::appComponent.isInitialized) return        appComponent = DaggerSdkAppComponent            .builder()            .sdkAppModule(SdkAppModule(ctx))            .build()    }}

Остается только лишь понять, откуда вызвать init, да так, чтобы в процессе жизни SDK быть уверенным, что инициализация выполнилась до любой другой работы. Для этого можно использовать одну точку входа в SDK. Назовем ее EntryPointFragment. Данный фрагмент и будет виден внешнему приложению как единственная точка входа в SDK. Вся дальнейшая навигация внутри SDK будет происходить уже в нем через childFragmentManager.

Как раз при создании EntryPointFragment можно и инициализировать ComponentHolder для Dagger.

override fun onCreate(savedInstanceState: Bundle?) {        ComponentHolder.init(requireActivity())        ComponentHolder.appComponent.inject(this)        super.onCreate(savedInstanceState)    }

Итого, на выходе мы получили ComponentHolder, который можно использовать внутри SDK для инъекции нужных компонент.

Устранение коллизии в версиях

С данной проблемой столкнулись при обновлении версии okhttp3 до новой major версии 4.+. В ней добавили улучшенную поддержку Kotlin, в том числе, например, доступ к коду ошибки через code() теперь стало ошибкой. Клиенты SDK, используя либо 3, либо 4 версию должны получать ту же внутри SDK, иначе все сломается.

Это реально сделать, вынеся код с коллизиями в отдельный модуль. В нем будут 2 flavor:

    flavorDimensions("okhttpVersion")    productFlavors {        v3 {            dimension = "okhttpVersion"        }        v4 {            dimension = "okhttpVersion"        }    }        dependencies {        v3Api okhttp3.core        v3Api okhttp3.logging        v4Api okhttp4.core        v4Api okhttp4.logging}

В двух разных папках, отвечающих за каждый flavor будут одинаковые классы, один из которых будет использовать code() а другой code.

// Code in v3 folderclass ResponseWrapper(private val response: Response) {    val code : Int        get() = response.code()}
// Code in v4 folderclass ResponseWrapper(private val response: Response) {    val code : Int        get() = response.code}

Остается только на уровне приложения выбрать необходимый конфиг и дальше правильная версия приедет в финальный проект.

Подсказка: если вы сами используете свой же модуль в проекте и подключаете как исходники, не забудьте следующее:

defaultConfig {...missingDimensionStrategy 'okhttpVersion', 'v4'}

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

Заключение

Разработка SDK, если сравнивать с просто Android приложением, намного сложнее, но порой интереснее. Также требования к качеству конечного продукта выше - если что-то упадет, то упадет не у вас, а у вашего клиента, что прямо очень плохо.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru