- Зміст статті
- Інструменти і ресурси
- Почитати
- Чим відрізняється Android Go від звичайного Android
- Нові захисні функції Android P
- Зворотний TCP-шелл за допомогою Frida
- розробнику
- Генерація коду Kotlin за допомогою анотацій
- Розпізнавання облич за допомогою нейронної мережі
- Розпізнавання тексту за допомогою нейронної мережі
- Створення анімацій за допомогою MotionLayout
- Інструменти дизайну для інді-розробника
- Інструменти
- бібліотеки
Зміст статті
Сьогодні у випуску: відмінності полегшеного 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. Алгоритм створення процесора досить нескладний і складається з чотирьох основних кроків:
Оголошуємо анотацію:
@Retention (AnnotationRetention.SOURCE) @Target (AnnotationTarget.FUNCTION) annotation class BindField (val viewIds: Array <String>, val viewName: String)Створюємо клас - процесор анотації:
@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 ()Усередині функції 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} ...}Генеруємо код за допомогою 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 (комплекс алгоритмів розпізнавання об'єктів на базі нейронних мереж).
Завдання: зробити систему, яка буде виділяти особи в видошукачі камери в режимі реального часу. Робиться це в чотири кроки:
- підключаємо бібліотеку Firebase до свого проекту.
- Створюємо найпростіший View, який малює прямокутники в заданих місцях.
- Створюємо CameraView з накладеним поверх нього нашим кастомними View.
- Підключаємо до 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, написаних на папері. При цьому сам процес розпізнавання виконується або на пристрої, або в хмарі. Перший спосіб не вимагає доступу в інтернет, зате другий більш точний і не створює навантаження на процесор пристрою.
Розпізнавання тексту на пристрої відбувається так.
Готуємо зображення і детектор:
val image = FirebaseVisionImage.fromBitmap (selectedImage) val detector = FirebaseVision.getInstance (). visionTextDetectorЗапускаємо процес розпізнавання, вказавши колбек, який буде виконаний після його завершення:
detector.detectInImage (image) .addOnSuccessListener {texts -> processTextRecognitionResult (texts)} .addOnFailureListener {e -> e.printStackTrace ()}Як аргумент колбек отримає об'єкт типу 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" 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 з ефектом друкарської машинки (посимвольного набір тексту).