![]() |
| Сам Signal знает? |
Всё было ничего до недавнего времени. Появилось обновление Signal, несовместимое с текущей версией. И я испугался, что VK пытается сейчас уже раздавать подделку, из-за чего и сел разбираться.
Об Android, о тестировании, мысли, рекомендации, инструкции...
![]() |
| Сам Signal знает? |
Всё было ничего до недавнего времени. Появилось обновление Signal, несовместимое с текущей версией. И я испугался, что VK пытается сейчас уже раздавать подделку, из-за чего и сел разбираться.
В бложике описал известную проблему консольного клиента mariadb, который не может сожрать пароль, длинее 80 символов: https://lor.sh/@umnik/111828511992647563
Это привело к небольшому, но
полезному спору. На одной стороне я, с фразой в более 90 символов, на другой
стороне уважаемый (не ирония, не шутка) в своих кругах человек, считающий, что
это бессмысленно. Кстати, рекомендую подписаться на канал этого человека, если
вы связаны с ИБ, он правда хорош (нет, не реклама :); да и какая реклама, если
у него почти 8k человек): https://t.me/infosecmemes
Предполагаю,
что оппонент отталкивается от, в общем-то, правильного утверждения, что 18+
символов — это великолепный пароль, который уже не перебрать за разумное
время.
|
|
Сообщение о проблеме |
Отслеживаем (логирование) и контроль доступа (разрешение, запрет) к критичным
API системы происходит через механизм app-opов.
App-opы (давайте просто app-ops во множественном
числе и app-op в единственном) покрывают большой набор
функциональности — от рантайм пермишенов до монитора состояния батарейки.
Управление же всеми этими фичами, внутри, происходит через
AppOpsManager
Это просто подбивка списка изменений с пояснениями, чтобы не скакать по статьям на официальном сайте. Хотя правильнее, конечно, читать оригинал.
![]() |
| Фото такого пирога с сайта рецептов |
14. Называется новая версия
Android Upside-down cake — "перевёрнутый" пирог или "вверх
ногами" или "наизнанку" — как угодно. В общем, суть в том, что после выпекания
этот пирог переворачивают и то, что раньше было верхом пирога становится его
дном.
![]() | |
| Используя последние обновления, вы в безопасности. А мы - Google, мы врать не станем |
Это копия сообщения из моего linked.in, потому что там неудобно читать.
Итак, хотя никто этого не просил, предлагаю свой вариант, как не допустить утечки, подобной #Yandex. На заметку не только #DeliveryClub, но вообще всем (вот такой я самонадеянный и с распухшим эго).
В чём проблема не только Яндекса, но 99,99999% фирм (и снова привет, кое-какой менеджер из кое-какой фирмы, ага) - они полагаются на то, что доступ к БД строго ограничен, а сотрудники - доверенные лица. Это, прошу прощения, говно. Никогда, никогда, НИКОГДА нельзя рассчитывать, что даже самый проверенный человек не станет "предателем".
Вообще, у вас ещё после Сноудена в голове должно было щёлкнуть, что эта схема просто нерабочая. При том, что я поддерживаю Сноудена и то, что он сделал, но будь я его работодателем, у меня была бы иная позиция.
Итак, нарушитель - это сотрудник компании с доступом к БД. От этого нарушителя и отталкиваемся. Предлагаемый мной подход будет защищать от этой модели, но не защитит от нарушитеЛЕЙ, которые целенаправленно будут менять работу сервера и принимать MR друг друга в мастер, когда цель этих мёрджей будет в сливе данных.
Это общий подход и его можно модифицировать в деталях. Также я не оговариваю алгоритмы шифрования, длины ключей и всё такое. Это ПОДХОД. Но оговорю, что все ключи - уникальны для одного заказа, а не один на все заказы и что ключи хранятся отдельно от данных (впрочем, это очевидно).
На этом этапе у
курьера нет ничего о пользователе и заказе. Наверное, только номер,
чтобы, если что, ТП Яндекса могла сказать "была жалоба по заказу 210". У
курьера остаётся общий с сервером секрет, чтобы номер заказа и
количество позиций можно было считывать в установленные 24 часа
У
сервера есть общий с курьером секрет и секрет общий с клиентом.
Остаётся инфа о составе заказа и его номер, остаётся инфа о связи с
рестораном. Это нужно для разбирательств ошибок. У сервера нет адреса
клиента, имени и телефона
У
клиента остаётся состав заказа, номер и общий с сервером ключ. Теперь
жалобы он подписывает этим же ключом, дабы сервер мог удостовериться,
что это реально тот же заказ, ведь он и жалоба на одном ключе.
Через 24 часа у клиента вытирается общий секрет. Он продолжает видеть свой заказ и номер, но уже не может пожаловаться.
Сервер
также вытирает общий ключ с клиентом, а также уничтожает оставшиеся
данные с заказом. Ну или не уничтожает, потому что это БД и дорого.
Прочесть их нельзя из-за вытертого ключа.
Если Яндекс, или Деливери, или кто угодно возьмёт в работу эту схему (не в этом виде, а подгонит под свои запросы, конечно), назовите её "схема Мячина". Я про это никогда не узнаю, никто у вас не будет знает, кто такой Мячин. Но я буду про себя думать, что кому-то когда-то смог помочь.
| Веб версия Family Link |
Важно понимать. Здесь рассматривается подход, когда у ребёнка своё собственное устройство, он не пользуется вашим. Если для вас такой подход непригоден, вы можете создать второй профиль на собственном устройстве и этого будет, в общем-то, достаточно. Если же у вашего ребёнка реально своё собственное Android устройство и, что здесь ОЧЕНЬ важно, оно использует учётную запись Google, то можете продолжить чтение.
Как понять, использует ли прошивка в этом устройсте учётную запись Google? Если не понимаете, о чём идёт речь, то значит использует. Всё просто.
После очередного обновления системы (pacman -Suy в данном случае) у меня перестал собираться проект из командной строки:
➜ clicker git:(master) ✗ ./gradlew assembleAndroidTest assembleDebug
Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details
> Task :app:processDebugMainManifest FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processDebugMainManifest'.
> Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @101d84f6
Однако, чтобы эта запись была более полезной, чем просто список фич, сюда же будет подтянут текст с расширенным объяснением того или иного изменения. То есть если у какого-то изменения есть своя статья (например, она есть у one-time permissions), то оттуда будет взято пояснение, что это такое и как работает.
![]() |
| Здесь можно включить поддержку нескольких профилей |
![]() |
| Якобы изменений нет |
![]() | ||
| Первый подход к снаряду. Выглядит так себе |
![]() |
| Этот модуль должен быть доступен сразу Но если его нет, то, видимо, эта запись для вас |
java.lang.IllegalArgumentException: Argument for @NotNull parameter 'message' of com/android/tools/idea/gradle/project/sync/GradleSyncState.syncFailed must not be nullВот так выглядит ситуация, когда проблемы нет. В случае воспроизведения этой ошибки здесь будет только 1.8 (ну или другая версия JDK) и всё:
![]() |
| Когда проблема решена |
![]() | |
| Последняя публичная бета Дальше — релиз |
setThreadStatsTag(), то при использовании binder
IPC с
ParcelFileDescriptor контейнером для отправки сокета другому процессу, тег слетал.queryDetailsForUidTag(). Чтобы вернуть старое поведение вам нужно вызвать untagSocket() перед отправкой сокета другому процессу.available() после shutdownInput(), то будет возвращён 0.NetworkCapabilities сообщал ограниченный набор данных для VPN. Например, сообщал TRANSPORT_VPN, но не NET_CAPABILITY_NOT_VPN. Из-за этого разработчикам было трудно понимать, приведёт ли использование VPN к расходу средств пользователя. К примеру, проверка NET_CAPABILITY_NOT_METERED не определяла, поднят VPN на сети с оплатой трафика или же на безлимитной сети.setUnderlyingNetworks(), система просуммирует транспорты и свойства всех сетей, на которых запущено подключение и вернёт нормальную совокупность свойств этих сетей.![]() |
| То самое зарядное устройство |
![]() |
| Получаем вот этот экран |
adb push myDir /sdcard/
![]() |
| Подсвечивание новых API |
![]() |
| Утилита имеет множество опций, включая аргументы quemu |
umnik@myachin: > emul @Pixel_2_API_27Пусть вас не смущает emul. Это просто алиас на $ANDROID_HOME/tools/emulator. В общем, если вы столкнулись с похожей проблемой, то вот решение.
PANIC: Missing emulator engine program for 'x86' CPU.
![]() |
| Ну всё, заработало |
![]() |
| Хочется, но не удаётся |
для GNU/Linux илиERROR:android/android-emu/android/qt/qt_setup.cpp:28:Qt library not found at ../emulator/lib64/qt/lib
emulator/qemu/windows-x86_64/qemu-system-i386.exe': No such file or directoryдля Windows, то вам сюда.
![]() |
| Now Playing распознал гимн СССР |
![]() |
| Когда эмулятор всё-таки запустился |
![]() |
| Запрос разрешения, без которого антивирус будет слепым и беззубым |
| Рис. 1. Содержание папки Android SDK |
![]() |
| Картинка без смысла |
![]() |
| До Android N Accessibility недоступен в процессе загрузки ОС |
В Android есть полезная (необходимая!) штука — FDE, то есть полное шифрование диска. Матчасть можно почитать здесь: https://source.android.com/security/encryption/. Ну или чуть позже в этом самом блоге, я планирую перевести статью. При использовании шифрования (в Nexus 6 и более новых, а также в некоторых устройствах сторонних производителей его предлагают использовать при первом же включении) у пользователя просят пароль*. Этим паролем устройство НЕ шифруется. И это уже интересное, так что здесь логично поставить кат.java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder at android.support.v7.app.ActionBarActivityDelegateBase.initializePanelMenu(ActionBarActivityDelegateBase.java:991) at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:1041) at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1259) at android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:80) at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:116) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5299) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) at dalvik.system.NativeStart.main(Native Method)
Вчера ко мне обратился знакомый с проблемой, которая была когда-то популярна в Windows, а затем пришла под Android. На смартфоне работал троян-вымогатель. Он запускался вместе с самой системой и в течении трёх секунд показывал свой экран поверх всех прочих, полностью блокируя доступ к интерфейсу Андроида. Картинка справа - это как раз скриншот с моего тестового телефона. Реализовано это было штатной возможностью Device Admin. В отличие от обычных полноэкранных приложений, экран вымогателя нельзя было убрать нажатием Home или свайпом от области уведомлений и вниз. Собственно, это одна из тех возможностей, которые есть у приложения, использующего права DA.