Android: огляд Android Go, нові механізми захисту Android P і зворотний шелл за допомогою Frida

  1. Зміст статті
  2. Інструменти і ресурси
  3. Почитати
  4. Чим відрізняється Android Go від звичайного Android
  5. Нові захисні функції Android P
  6. Зворотний TCP-шелл за допомогою Frida
  7. розробнику
  8. Генерація коду Kotlin за допомогою анотацій
  9. Розпізнавання облич за допомогою нейронної мережі
  10. Розпізнавання тексту за допомогою нейронної мережі
  11. Створення анімацій за допомогою MotionLayout
  12. Інструменти дизайну для інді-розробника
  13. Інструменти
  14. бібліотеки

Зміст статті

Сьогодні у випуску: відмінності полегшеного Android Go від стандартного Android, нові механізми захисту Android P, інструкція по впровадженню зворотного TCP-шелла в Android за допомогою Frida, розпізнавання осіб і тексту за допомогою ML Kit, генерація коду Kotlin за допомогою анотацій і опис новітнього MotionLayout . А також: добірка посилань на ресурси, що полегшують дизайн UI, і 14 свіжих бібліотек.

Інструменти і ресурси

  • XDebug - не нова, але досить корисний модуль Xposed, який дозволяє налагоджувати будь встановлене на смартфон додаток;
  • exploit_playground - добірка експлойтів з коментарями.

Почитати

Чим відрізняється Android Go від звичайного Android

Android Go - How does Google's lightweight ecosystem compare to the original? - стаття з описом відмінностей полегшеної версії Android від повноцінної. Основні тези:

  • На відміну від пристроїв Android One, які поставляються на ринок з «чистим Android», смартфони на Android Go будуть продаватися з модифікаціями і додатками виробника смартфона (якщо він цього забажає).
  • Єдина помітна користувачеві відміну Android Go від звичайного Android - дизайн вікна запущених додатків.
  • В Android Go відключені деякі непотрібні більшості користувачів функції: Daydream VR, функція поділу екрана, підтримка Android Auto і Android Wear, Android for Work.
  • За замовчуванням в Android Go відключено шифрування, однак деякі пристрої дозволять його включити.
  • Android Go набагато агресивніший в знищенні фонових додатків (він намагається прибрати з пам'яті все, що не пов'язане з самою операційною системою).
  • В Android Go за замовчуванням включений zRAM, стискає дані в оперативній пам'яті для її економії.
  • Деякі встановлені додатки Android Go - це веб-додатки; наприклад, Gmail Go і Google Maps Go - це WebView, в якому відкривається написаний на HTML5 / JS інтерфейс, причому Google Maps Go важить 1 Мбайт, а Gmail Go більше стандартного додатка Gmail.
  • Частина програм з комплекту Android Go сильно урізані: YouTube Go не підтримує коментарі і не дозволяє ставити лайки, Assistant Go не має будь-яких опцій, інші, навпаки, надають повний набір функцій: Google Maps Go майже в точності повторює оригінальний додаток.

Нові захисні функції Android P

Compiler-based security mitigations in Android P - пост розробників Android з розповіддю про те, які функції компілятора LLVM / Clang вони застосували в Android P для захисту від різного виду атак.

1. Control Flow Integrity. В сучасних експлойтів важливим кроком часто буває модифікація покажчиків на функцію і адрес повернення. Вона дозволяє обійти обмеження на виконання стека і сегмента даних за допомогою перевикористання шматків самого додатка.

Технологія Control Flow Integrity (CFI) призначена для боротьби з такими експлойтів. При її включенні компілятор будує граф викликів функцій і вбудовує код звірки з цим графом перед кожним викликом функції. Якщо виклик відбувається по відхиляється від графа адресою, додаток завершується.

Розробники Android вже включили CFI для декількох системних компонентів в Android 8. У Android P покриття розширилося і тепер включає в себе медіафреймворкі, а також стек NFC і Bluetooth. Тестова підтримка також реалізована для ядра.

2. Integer Overflow Sanitization. Дана технологія призначена для захисту від цілочисельного переповнення. Компілятор вбудовує в результуючий код додатків функції перевірки, які використовуються для підтвердження, що виконується арифметична операція не викличе переповнення.

Вперше технологія була використана в Android 7 для захисту медіастека, в якому виявили цілий комплекс віддалених вразливостей Stagefright. В Android P вона також використовується для захисту наступних компонентів: libui, libnl, libmediaplayerservice, libexif, libdrmclearkeyplugin і libreverbwrapper.

Код виклику функції з відключеним і включеним CFI

Зворотний TCP-шелл за допомогою Frida

Shellcoding an Arm64 In-Memory Reverse TCP Shell with Frida - стаття з розповіддю, як впровадити в Android зворотний TCP-шелл за допомогою Frida.

Це можливо завдяки класу Arm64Writer, який з'явився у Frida 10.4. Він дозволяє записувати інструкції ARM64 прямо в пам'ять, а потім виконувати їх. Щоб створити зворотний шелл, автор статті написав його на мові асемблера, а потім за допомогою Arm64Write помістив в пам'ять процесу system_server (в Android це один із центральних компонентів операційної системи).

Частина коду зворотного шелла:

var impl = Memory.alloc (Process.pageSize); Memory.patchCode (impl, Process.pageSize, function (code) {var arm64Writer = new Arm64Writer (code, {pc: impl}); // SUB SP, SP, # 0x50 arm64Writer.putSubRegRegImm ( 'sp', 'sp' , 0x50); // STP x29, X30, [SP, # 0x40] arm64Writer.putStpRegRegRegOffset ( 'x29', 'x30', 'sp', 0x40, 'pre-adjust'); // ADD x29, SP, # 0x40 arm64Writer.putAddRegRegImm ( 'x29', 'sp', 0x40); ... arm64Writer.putRet (); armWriter.flush ();});

розробнику

Генерація коду Kotlin за допомогою анотацій

Generating Code via Annotations in Kotlin - стаття про використання процесора анотацій kapt і генератора коду KotlinPoet для генерації коду з анотацій на прикладі Біндінга View. Алгоритм створення процесора досить нескладний і складається з чотирьох основних кроків:

  1. Оголошуємо анотацію:

    @Retention (AnnotationRetention.SOURCE) @Target (AnnotationTarget.FUNCTION) annotation class BindField (val viewIds: Array <String>, val viewName: String)
  2. Створюємо клас - процесор анотації:

    @AutoService (Processor :: class) // For registering the service @SupportedSourceVersion (SourceVersion.RELEASE_8) // to support Java 8 @SupportedOptions (BindFieldsProcessor.KAPT_KOTLIN_GENERATED_OPTION_NAME) class BindFieldsProcessor: AbstractProcessor ()
  3. Усередині функції process класу-процесу створюємо цикл, який проходить по всіх елементах, оголошеним за допомогою нашої інструкції, і, коли необхідно, повертає помилки при неправильному використанні анотації (в даному випадку при використанні щодо нефункціі):

    roundEnv.getElementsAnnotatedWith (BindField :: class.java) .forEach {methodElement -> if (methodElement.kind! = ElementKind.METHOD) {processingEnv.messager.errormessage { "Can only be applied to functions, element: $ methodElement"} return false} ...}
  4. Генеруємо код за допомогою KotlinPoet:

    val funcBuilder = FunSpec.builder ( "bindFields") .addModifiers (KModifier.PUBLIC) .addParameter (variable.simpleName.toString (), variableAsElement.asType (). asTypeName ()) .addParameter (method.getAnnotation (BindField :: class .java) .viewName, ClassName ( "android.view", "View")) annotationArgs.forEachIndexed {index, viewId -> funcBuilder.addStatement ( "% L.findViewById <% T> (R.id.% L). text =% L.% L ", method.getAnnotation (BindField :: class.java) .viewName, ClassName (" android.widget "," TextView "), viewId, variable.simpleName, fieldsInArgument [index] .simpleName)}

Розпізнавання облич за допомогою нейронної мережі

Building a real-time face detector in Android with ML Kit - стаття про створення додатка з функцією розпізнавання осіб в режимі реального часу за допомогою Firebase ML Kit (комплекс алгоритмів розпізнавання об'єктів на базі нейронних мереж).

Завдання: зробити систему, яка буде виділяти особи в видошукачі камери в режимі реального часу. Робиться це в чотири кроки:

  1. підключаємо бібліотеку Firebase до свого проекту.
  2. Створюємо найпростіший View, який малює прямокутники в заданих місцях.
  3. Створюємо CameraView з накладеним поверх нього нашим кастомними View.
  4. Підключаємо до CameraView процесор фреймів, який передає фрейми в ML Kit, а потім оновлює на основі отриманої інформації кастомний View (який малює прямокутники навколо осіб).

Ключова частина програми:

class FaceDetector (private val faceBoundsOverlay: FaceBoundsOverlay) {private fun detectFacesIn (frame: Frame) {firebaseFaceDetectorWrapper.process (image = convertFrameToImage (frame), onSuccess = {faceBoundsOverlay.updateFaces (/ * Faces * /)}, onError = {/ * Display error message * /})} ...}

Розпізнавання тексту за допомогою нейронної мережі

Text Recognition with ML Kit - ще одна стаття про використання Firebase ML Kit. На відміну від попередньої стаття докладно розповідає про те, що таке ML Kit, як додати свій проект в Firebase і підключити бібліотеку до проекту.

Як приклад автор статті створює додаток для розпізнавання акаунтів Twitter, написаних на папері. При цьому сам процес розпізнавання виконується або на пристрої, або в хмарі. Перший спосіб не вимагає доступу в інтернет, зате другий більш точний і не створює навантаження на процесор пристрою.

Розпізнавання тексту на пристрої відбувається так.

  1. Готуємо зображення і детектор:

    val image = FirebaseVisionImage.fromBitmap (selectedImage) val detector = FirebaseVision.getInstance (). visionTextDetector
  2. Запускаємо процес розпізнавання, вказавши колбек, який буде виконаний після його завершення:

    detector.detectInImage (image) .addOnSuccessListener {texts -> processTextRecognitionResult (texts)} .addOnFailureListener {e -> e.printStackTrace ()}
  3. Як аргумент колбек отримає об'єкт типу FirebaseVisionText, він буде містити масив виявлених блоків тексту, а самі блоки будуть містити елементи з рядками, з якими можна працювати (наприклад, підсвітити):

    private fun processTextRecognitionResult (texts: FirebaseVisionText) {view.hideProgress () val blocks = texts.blocks if (blocks.size == 0) {view.showNoTextMessage () return} blocks.forEach {block -> block.lines.forEach { line -> line.elements.forEach {element -> if (looksLikeHandle (element.text)) {view.showHandle (element.text, element.boundingBox)}}}}}

Розпізнавання тексту в хмарі виконується схожим чином, але має кілька відмінностей. Наприклад, хмарна нейронна мережа вміє розпізнавати параграфи і давати інформацію про окремі символах, і це треба враховувати під час проходу по отриманим блокам тексту.

Створення анімацій за допомогою MotionLayout

Creating Animations With MotionLayout for Android - стаття про MotionLayout, розширенні ConstraintLayout, що дозволяє описувати анімації декларативно прямо в XML-файлі.

MotionLayout заснований на ідеї сцен руху (motion scene), які описують початкове, кінцеве і проміжні стану графічного елементу під час анімації, а також спосіб перемикання між цими станами.

Наприклад, наступна сцена описує анімацію переміщення елемента actor з правого нижнього кута екрану в лівий верхній:

<? Xml version = "1.0&quot; encoding = "utf-8"?> <MotionScene xmlns: android = "http://schemas.android.com/apk/res/android" xmlns: app = "http: // schemas .android.com / apk / res-auto "> <ConstraintSet android: id =" @ + id / starting_set "> <Constraint android: id =" @ + id / actor "app: layout_constraintBottom_toBottomOf =" parent "app: layout_constraintRight_toRightOf = "parent" android: layout_width = "60dp" android: layout_height = "60dp" /> </ ConstraintSet> <ConstraintSet android: id = "@ + id / ending_set"> <Constraint android: id = "@ + id / actor" app: layout_constraintTop_toTopOf = "parent" app: layout_constraintLeft_toLeftOf = "parent" android: layout_width = "60dp" android: layout_height = "60dp" /> </ ConstraintSet> <Transition android: id = "@ + id / my_transition" app: constraintSetStart = "@ + id / starting_set" app: constraintSetEnd = "@ + id / ending_set" app: duration = "2000"> </ MotionScene>

Запустити анімацію можна приблизно так:

motion_container.transitionToEnd ()

Інструменти дизайну для інді-розробника

Solo Android Developer? Here are all the design tools you'll ever need - список ресурсів, які стануть в нагоді в створенні дизайну програми.

іконки:

Інструменти підбору кольорів:

Приклади дизайну і готові макети:

Інструменти

  • androme - утиліта для конвертування HTML-сторінок в набір XML-лайотов Android;
  • SDK Search - додаток для Android і плагін для Google Chrome для пошуку по документації Android SDK;
  • deep-clean - скрипт для очищення всіх кешей збірки Gradle.

бібліотеки

  • kotlin-extensions - кілька корисних функцій-розширень Kotlin;
  • ColorPickerView - черговий діалог вибору квітів;
  • android-material-color-picker-dialog - і ще один діалог вибору квітів, в цей раз в стилі Material з повзунками;
  • Indicator Fast Scroll - фаст-скроллер, що показує алфавітний покажчик і міхур з буквою;
  • Easy NLU - бібліотека семантичного парсинга рядків, підходить для створення додатків-асистентів;
  • QuickPermissions-Kotlin - проста і зручна у використанні Kotlin-бібліотека для runtime-перевірки повноважень;
  • Pixel Color Reader - Android - бібліотека для читання кольору пікселів з екрану;
  • DB Preferences - альтернатива стандартному API Preference на основі зашифрованою бібліотеки;
  • UnderlinePageIndicator - індикатор перемикання табів, сумісний з ViewPager;
  • android-face-detector - бібліотека для розпізнавання осіб на основі Firebase ML Kit;
  • vector-analog-clock - view з реалізацією векторних аналогового годинника;
  • LazyDatePicker - діалог вибору дати з ручним введенням;
  • FastList - бібліотека для швидкого створення списків на основі RecyclerView без використання адаптера view holder'ов;
  • TypeWriterView - view з ефектом друкарської машинки (посимвольного набір тексту).
Quot; encoding = "utf-8"?

Дополнительная информация

rss
Карта