Категория > Новости > Android: социальный мониторинг и советы от Microsoft - «Новости»
Android: социальный мониторинг и советы от Microsoft - «Новости»27-04-2020, 12:33. Автор: Cooper |
|||||||||||||||||||||||||
Сегодня в выпуске: защита приложения с помощью проверки цифровой подписи в нативной библиотеке, анализ приложения «Социальный мониторинг», рассказ о том, как новые версии Android экономят заряд батареи, статья о вредности System.exit(), советы, как сократить размер приложения и оптимизировать использование батареи, реализация обновления приложения через само приложение, надежный способ показать клавиатуру, а также подборка плагинов Android Studio, инструментов пентестера и библиотек для разработчика.ПочитатьЗащита приложения с помощью проверки цифровой подписиYet Another Tamper Detection in Android — статья о том, как защитить приложение с помощью проверки цифровой подписи в нативной библиотеке. Любое приложение для Android имеет цифровую подпись, с помощью которой можно подтвердить его авторство. Проблема лишь в том, что цифровая подпись сверяется только во время обновления приложения (подписи не совпадают — обновить нельзя), но не его первой установки. Это значит, что взломщик может разобрать любое приложение, взломать его или внедрить новую функциональность, а затем собрать с использованием своего ключа. А пользователь спокойно его установит, при необходимости удалив оригинальную версию приложения. Бороться с пиратством можно, внедрив код проверки цифровой подписи прямо в само приложение. При старте приложение получает свою собственную цифровую подпись, сравнивает ее с сохраненным образцом и, если они не совпадают, завершает само себя, показав сообщение о пиратстве. Недостаток этого подхода в том, что для сверки контрольной суммы используются стандартные API Android ( Автор статьи предлагает разместить данный РєРѕРґ РІ написанной РЅР° языке РЎ библиотеке. Вместо API Android эта библиотека использует собственные средства сверки цифровой РїРѕРґРїРёСЃРєРё (РІ частности, РєРѕРґ РёР· библиотек libzip Рё mbed TLS). Также РІ библиотеке применен СЂСЏРґ средств защиты РѕС‚ реверса, таких как собственные реализации функций libc Рё позаимствованный РёР· OpenSSL СЃРїРѕСЃРѕР± определить, что РєРѕРґ библиотеки изменен. Последний работает так: РїСЂРё СЃР±РѕСЂРєРµ РІ секции text (содержит РєРѕРґ) Рё rodata (содержит константы, включая хеш сертификата) вставляются специальные маркеры, которые помечают начало Рё конец секции. Далее вычисляется HMAC для данных между этими маркерами Рё записывается РІ секцию данных. Р’Рѕ время вызова функции сверки цифровых подписей библиотека проверяет собственную целостность СЃ помощью HMAC. РљРѕРґ проекта опубликован РЅР° GitHub. Анализ приложения «Социальный мониторинг»JaDX decompile of com.askgps.personaltrackercore — декомпилированные РёСЃС…РѕРґРЅРёРєРё приложения «Социальный мониторинг», созданного РїРѕ заказу РјСЌСЂРёРё РњРѕСЃРєРІС‹ Р·Р° 180 миллионов рублей. Приложение получило РІ среднем РѕРґРЅСѓ звезду Рё было удалено РёР· Google Play меньше чем через сутки после публикации. Р?зучая РёСЃС…РѕРґРЅРёРєРё, РјРѕР¶РЅРѕ заметить, что приложение РЅРµ применяет никакой, даже самой простой обфускации Рё передает данные РЅР° сервер РјСЌСЂРёРё РњРѕСЃРєРІС‹ РІ открытом РІРёРґРµ (голый HTTP, без шифрования), Р° РІ качестве метода аутентификации использует IMEI (зная IMEI смартфона жертвы, злоумышленник может «отправить» его РЅР° РґСЂСѓРіРѕР№ край страны, сменить фотку Рё РґСЂСѓРіРёРµ сведения). Для распознавания лиц приложение использует эстонский сервис identix.one, РЅР° который, СЃСѓРґСЏ РїРѕ всему, разработчики залили фотографии всех жителей Р Р¤. Рто значит, что, имея РЅР° руках токен сервиса, выдранный РёР· приложения, злоумышленник РјРѕРі Р±С‹ использовать сервис для идентификации людей РїРѕ фотографии. Рљ счастью, РІСЃРµ API СѓР¶Рµ закрыты. Примерно через неделю СЃРІРѕР№ аналог «Социального мониторинга» выпустило СѓР¶Рµ РњРёРЅРєРѕРјСЃРІСЏР·Рё. Госуслуги РЎРўРћРџ коронавирус (РёСЃС…РѕРґРЅРёРєРё) оказалось более качественным Рё таких зияющих дыр СѓР¶Рµ РЅРµ содержало. Что, впрочем, РЅРµ помешало ему получить среднюю оценку РІ 1,6 звезды. ![]() Как новые версии Android СЌРєРѕРЅРѕРјСЏС‚ заряд батареиApp Standby Buckets In Android — небольшая заметка Рѕ функции App Standby Buckets, появившейся РІ Android 9. App Standby Buckets — новая энергосберегающая функция, расширяющая Рё дополняющая механизм Doze, работающий СЃ Android 6. Р?дея РЅР° этот раз состоит РІ том, чтобы разделить РІСЃРµ установленные РЅР° смартфоне приложения РЅР° категории РІ зависимости РѕС‚ того, насколько часто РѕРЅРё используются. Основных категорий пять:
В простейшем случае Android группирует приложения по категориям, основываясь на времени последнего запуска, но производитель смартфона может использовать другие способы группировки. Например, в смартфонах Google Pixel для этих целей приспособлена нейронная сеть. В зависимости от группы система применяет к приложениям различные ограничения, включая ограничения на запуск фоновых задач (Jobs), срабатывание таймеров (Alarm), доступность сетевых функций и push-уведомлений (Firebase Cloud Messaging — FCM):
Р?нтересный побочный эффект этой системы РІ том, что если РІСЃРµ взаимодействие пользователя СЃ приложением будет сводиться только Рє прочтению Рё смахиванию уведомлений, то через несколько дней приложение перейдет РІ РіСЂСѓРїРїСѓ Rare Рё будет серьезно урезано РІ возможностях. Также следует иметь РІ РІРёРґСѓ, что приложение РЅРµ будет урезано РІ правах, если находится РІ СЃРїРёСЃРєРµ исключений системы энергосбережения или если телефон РЅР° зарядке. РазработчикуПочему РЅРµ стоит использовать System.exit()A cautionary tale on Android: do not call System.exit() — небольшая статья Рѕ том, почему РЅРµ стоит использовать Документация Android говорит, что метод Так как в Android каждое приложение исполняется в собственной виртуальной машине, можно предположить, что Что происходит после вызова System.exit() Решить эту проблему в большинстве случаев можно, используя метод Советы, как уменьшить размер приложенияApp size reduction at Microsoft SwiftKey — СЃР±РѕСЂРЅРёРє заметок разработчиков клавиатуры SwiftKey (Microsoft) Рѕ том, как сократить размер скачиваемого Рё установленного приложения. 1. Установленное приложение весит намного больше скачиваемого потому, что РІРѕ время установки Android сохраняет РІ памяти устройства РЅРµ только сам APK-файл, РЅРѕ Рё некоторые извлеченные РёР· него компоненты: верифицированный файл DEX (VDEX — Verified DEX) Рё нативные библиотеки. Также через некоторое время виртуальная машина создает файл ODEX — оптимизированную версию файла DEX, пропущенную через AOT-компилятор (некоторые части байт-РєРѕРґР° заменяются РЅР° машинные инструкции). Причем начиная СЃ Android 9 этот файл может быть получен сразу РёР· Google Play. ![]() Р’ целях тестирования файл ODEX РјРѕР¶РЅРѕ создать принудительно:
2. В случае со SwiftKey помогли следующие флаги ProGuard: repackageclasses, renamesourcefileattribute и allowaccessmodification. Но появился побочный эффект: еще большее запутывание стек-трейсов в системе анализа сбоев. 3. Компилятор R8 (в новых версиях Android Studio включен по умолчанию) сократил размер установленного приложения на 1,3 Мбайт, но замедлил время его старта. 4. По умолчанию при сборке приложения среда разработки сжимает нативные библиотеки. При установке приложения на устройство Android распаковывает библиотеки в специальный каталог с данными приложения. Это приводит к дополнительному расходу пространства устройства. Чтобы поменять такое поведение и заставить Android использовать библиотеки прямо из пакета, следует внести два изменения в проект. В файл
В
Имей в виду, что некоторые библиотеки, например SoLoader, будут распаковывать библиотеки принудительно, несмотря на используемые опции. 5. По умолчанию при обфускации/минимизации приложения среда разработки удалит все неиспользуемые ресурсы. Также ты можешь удалить их с помощью опции Android Studio: Refactor -> Remove Unused Resources. 6. Используемое приложением место можно сократить, преобразовав изображения в формат WebP (клик правой клавишей на папке drawable, затем пункт Convert to WebP). Экономия составит примерно 25%. Еще большего выигрыша можно достигнуть, заменив растровые изображения на векторные. Однако в этом случае автоматически преобразовать их не получится. 7. При сборке среда разработки помещает все используемые приложением строки в файл
Теперь в приложение попадут строки только на английском и испанском. 8. Хороший выигрыш в размере загружаемого приложения даст использование App Bundle. Новые версии Android Studio по умолчанию предлагают собирать приложение в App Bundle вместо классического APK. Bundle затем можно залить в Google Play, и он автоматически будет разбит на несколько APK для разных платформ, включая отдельные дополнительные APK для разных языков и регионов. В этом случае итоговый размер пакета, который загружает на смартфон пользователь, обычно становится намного меньше. Все эти техники позволили сократить размер пакета SwiftKey на 50% (с 27,6 до 14,3 Мбайт), а занимаемое место после установки — на 40% (с 81,5 до 48 Мбайт). Советы, как измерить потребление батареиAndroid Battery Testing at Microsoft YourPhone — еще один материал разработчиков из Microsoft. На этот раз авторство принадлежит команде приложения YourPhone (того, что позволяет управлять телефоном из Windows), а статья посвящена измерению потребления батареи. Большая часть статьи — вода, но в конце есть мякотка — скрипт для запуска тестирования батареи и часть кода для парсинга результатов работы скрипта. Код скрипта:
Далее результат работы команды
Разумеется, его можно переписать на любом другом языке. Правильный способ показать клавиатуруShowing the Android Keyboard Reliably — статья разработчиков Square о том, как показать клавиатуру и не получить проблем. Суть проблемы: в Android есть способ форсировать показ клавиатуры без необходимости дожидаться, пока пользователь кликнет на поле ввода:
Он работает, но только в том случае, если поле ввода (в данном случае — Статья описывает способ обхода этих проблем. Тебе необходимо повесить на поле ввода листенер, который сработает, когда поле ввода получит фокус, и в этот момент покажет клавиатуру. Код функции-расширения, которая корректно показывает клавиатуру во всех случаях:
Реализация In-App UpdatesIn-App Updates: Getting Started — большой туториал по реализации In-App Updates — функции, с помощью которой приложение может принудительно обновить себя или вывести уведомление об обновлении. Функция реализована в библиотеке Google Play Core и предлагает два способа обновления приложения: immediate и flexible. Первый принудительный: приложение автоматически запускает обновление, а пользователю остается только наблюдать. Второй позволяет проверить наличие обновления и вывести сообщение/уведомление/кнопку, нажав на которое пользователь может самостоятельно запустить процесс обновления. И в том и в другом случае проверить, есть ли новая версия, и запустить обновление очень просто. Например, принудительно обновить можно всего в несколько строчек:
Все, что делает этот код, — проверяет, есть ли обновление ( Flexible-обновления работают примерно так же с тем исключением, что обновление можно запустить в фоне, а затем попросить пользователя перезапустить приложение. Подборка полезных плагинов для Android StudioThe Top 20 Android Studio Plugins — обзор двадцати плагинов Android Studio на все случаи жизни. Наиболее интересные экземпляры:
![]() Инструменты
Библиотеки
Перейти обратно к новости |