Xiaomi Redmi 7A с MIUI 12.5 продолжает отключать фоновые службы/приложения ( Telegram SMS и Termux ), когда телефон не подключен к зарядному устройству. Logcat журнал:
01-06 10:45:57.787 1892 1892 I MiuiChargeManager: notifyBatteryStatusChanged: status: 3 isPlugged: 0 level: 70 wireState: -1 chargeSpeed: 0 m WiredChargeType: 0 mWirelessChargeType: 0 chargeDeviceType: -1 01-06 10:50:15.716 4344 4652 W PowerChecker.Controller: autoKillApp, calling ProcessManager uid = 10289, pkg = com.termux 01-06 10:50:15.716 1580 2093 I ProcessManager: Kill reason AutoPowerKill from pid=4344 01-06 10:50:15.829 1580 2093 I ProcessManager: AutoPowerKill: kill com.termux Adj=200 State=5 01-06 10:50:15.830 1580 2093 I ActivityManager: Killing 13234:com.termux/u0a289 (adj 200): AutoPowerKill 01-06 10:50:15.875 4344 4652 W PowerChecker.Controller: autoKillApp, calling ProcessManager uid = 10305, pkg = com.qwe7002.telegram_sms 01-06 10:50:15.876 1580 2093 I ProcessManager: Kill reason AutoPowerKill from pid=4344 01-06 10:50:15.877 1580 2093 I ProcessManager: AutoPowerKill: kill com.qwe7002.telegram_sms:command Adj=200 State=5 01-06 10:50:15.878 1580 2093 I ActivityManager: Killing 23378:com.qwe7002.telegram_sms:command/u0a305 (adj 200): AutoPowerKill 01-06 10:50:15.880 1580 2093 I ProcessManager: AutoPowerKill: kill com.qwe7002.telegram_sms:battery Adj=200 State=5 01-06 10:50:15.880 1580 2093 I ActivityManager: Killing 23348:com.qwe7002.telegram_sms:battery/u0a305 (adj 200): AutoPowerKill 01-06 10:50:15.961 1580 1848 I ProcessManager: remove no clear notification:StatusBarNotification(pkg=com.termux user=UserHandle tag=null key=0|com.termux|1337|null|10289: Notification(channel=termux_notification_channel pri=1 contentView=null vibrate=null sound=null defaults=0x0 flags=0x62 color=0xff607d8b actions=2 vis=PRIVATE)) 01-06 10:50:15.968 1580 3450 W ActivityManager: Scheduling restart of crashed service com.termux/.app.TermuxService in 1000ms 01-06 10:50:15.973 1580 1665 W ActivityManager: setHasOverlayUi called on unknown pid: 13234 01-06 10:50:15.977 1580 4023 W ActivityManager: Scheduling restart of crashed service com.qwe7002.telegram_sms/.battery_service in 10992ms 01-06 10:50:15.983 1580 1848 I ProcessManager: remove no clear notification:StatusBarNotification(pkg=com.qwe7002.telegram_sms user=UserHandle tag=null key=0|com.qwe7002.telegram_sms|2|null|10305: Notification(channel=Chat command pri=0 contentView=null vibrate=null sound=null tick defaults=0x0 flags=0x62 color=0x00000000 vis=PRIVATE)) 01-06 10:50:15.984 1580 4019 W ActivityManager: Scheduling restart of crashed service com.qwe7002.telegram_sms/.chat_command_service in 20984ms 01-06 10:50:16.650 23510 23510 E ExtAssistant: Error occurred processing removal of StatusBarNotification(pkg=com.termux user=UserHandle tag=null key=0|com.termux|1337|null|10289: Notification(channel=termux_notification_channel pri=1 contentView=null vibrate=null sound=null defaults=0x0 flags=0x62 color=0xff607d8b actions=2 vis=PRIVATE))
Как это исправить?
ЭТО НАДО ОТКЛЮЧИТЬ! Приложение XIAOMI собирает о Вас данные и аналитику. Постоянно работает в фоне
Xiaomi СЛЕДИТ За Вами Через MIUI
Anton Samokat 14 Янв 2023 в 21:44
Источник: question-it.com
Ещё немного про телефоны Xiaomi и борьбу с ними. Updated
Честно признаться, у меня не было планов писать и публиковать эту статью, но, после того, как за два месяца увидел в ближнем кругу коллег 5 штук свежеприобретённых телефонов от Xiaomi, и недавнюю статью на Geektimes, рекламирующую управление умным домом от Xiaomi, ко мне пришла совесть и, сцуко, потребовала поделиться знанием с остальными.
Для начала небольшая вводная часть для тех кто не в теме. Есть такая компания Xiaomi, которая делает неплохие по начинке телефоны и заливает в них кастомизированный Android. Бизнес модель, как недавно официально было заявлено — «По сути мы раздаём наши смартфоны, не зарабатывая на этом денег. Нас больше заботят долгосрочные источники дохода.
Мы могли бы продать 10 миллиардов смартфонов и не заработать на них ни цента». Источник раз и два.
Заглянув в сентябрьскую статью на Security lab и ещё вот в эту жалобу, у меня лично возникло ощущение, что телефон Xiaomi это что-то типа поводка на котором владельца водит Большой брат (утрирую, конечно же).
Это и стало основным мотивом проведения исследования поведения телефона Xiaomi redmi 3S
с прошивкой MIUI Global 8.1 Стабильная 8.1.1.0 (MALMIDI)
Исследование подопытного кролика и обнаружение проблемы
Беру новенький телефон из коробки. Включаю его и прохожу через мастера начальной настройки, предварительно включив запись трафика на Wi-Fi роутере. Ровно через две секунды, после того как телефон подключился к точке доступа, началось скачивание файла размером около 8Мбайт с одного из серверов Xiaomi. Это был обычный zip архив, внутри которого лежала куча всего и, в том числе, файл AnalyticsCore.apk, упомянутый в статье на SecurityLab.
Дальше — больше. В общей сложности, за всё время наблюдения, я насчитал чуть меньше восьми десятков имён серверов в разных доменах. Сразу оговорюсь, что в этом числе нет серверов Google и Facebook, приложения которых также предустановлены. Просто потому что я их считал отдельно. С ними тоже всё «весело».
Большая часть коннектов к серверам Xiaomi шла через HTTPS, поэтому разобраться в деталях ЧТО именно передаётся напрямую возможности не было. Отключение всевозможных логинов, синхронизаций и т.п. к исчезновению этого трафика не привело.
Дополнительно смущало то, что большей частью запросы были небольшими (объём принятого переданного трафика TCP сессий не превышал 1-2Кб), но, т.к. наши сотовые операторы округляют объём трафика вверх (Например, Tele2 до 150Кб), то, при неудачном совпадении, можно «накачать» таким образом существенные объёмы трафика, а в роуминге неожиданно попасть на деньги.
Тех, кого сей факт не смущает могут дальше не читать, т.к. дальше будет описание конкретики изоляции трафика от приложений, вшитых в заводскую прошивку.
Предварительные условия
Первое что необходимо — это рутовать телефон. Как это делается в случае Xiaomi я здесь описывать не буду, отсылаю желающих пройти этот путь к полной версии этой статьи (ссылка в конце).
Второе — это влить в телефон прошивку через кабель и стереть ВСЕ пользовательские данные.
Третье — телефон НЕ ДОЛЖЕН иметь доступа в интернет после залива свежей прошивки.
Update. До момента установки нижеописываемых ограничений, разумеется.
Disclamier. Все дальнейшие манипуляции над телефоном Вы делаете на свой страх и риск.
Ответственность за любой результат лежит на том, кто именно делал описываемые ниже действия.
Небольшая техническая вводная часть
Серверы, к которым обращается телефон, в большинстве своём расположены в облаке Amazon, поэтому обращения к ним происходит по именам, которые ресолвятся через round-robin DNS в разные IP адреса из разных подсетей /16. Блокировать их все по подсетям смысла особого нет — так можно половину интернета отфильтровать, что не есть хорошо. Блокировать по именам — хорошо, но не факт, что имена хостов из L3 доменов не генерируются динамически. Идеально было бы прибить все приложения, которые обращаются к серверам Xiaomi, но, как показала практика, глубина их интеграции в Android такова, что после удаления некоторых из них телефон может просто отказаться загружаться.
Далее. К внешним серверам обращается не один процесс, а многие, при этом задачу усложняет наличие в Android UID sharing, когда под одним UID могут генерировать сетевой трафик разные процессы (приложения). Более того, один из полезных процессов (отвечающий за GPS) надо выпускать во внешний мир, чтобы скачивать небольшие обновления, но при этом он сидел под тем же UID, что и восемь штук процессов, рвущихся к серверам Xiaomi.
Также надо упомянуть про ограниченность инструментария, доступного для решения вышеописанных задач, т.к. большая часть приложений имеющих в названии firewall доступных на Play Market работают через т.н. VPN, т.е. от сливов информации до запуска приложения они не защищают.
Большая часть того, что будет рассказано дальше для профессиональных разработчиков Android есть банальная истина, но всем остальным это позволит понять почему фильтрация построена именно таким образом.
В отличие от обычного Linux, где есть файлы конфигурации и стартовые скрипты, лежащие в /etc, в Android всё сделано несколько иначе. Общее управление сетью осуществляет Connection Manager, который дёргает системный демон netd, который, в свою очередь, вызывает iptables с определёнными параметрами командной строки. Соответственно, вызывать IPtables из скрипта начальной загрузки (init и прочих) особого смысла нет — netd при старте всё равно вызовет iptables, очистит правила и зальёт свои.
Единственный выход оставленный Google — писать необходимые команды конфигурации iptables в скрипте /system/bin/oem-iptables-init.sh. Путь к этому скрипту и его имя жёстко прописаны внутри исходного кода демона netd.
Для фильтрации статических имён хостов можно редактировать файл /etc/hosts, но при этом надо помнить про их количество и возможность их динамической генерации.
Дальше будет рассказ как это всё делалось.
Удаление и заморозка (если нет уверенности) ненужных программ
При помощи бесплатной версии Titanium Backup можно посмотреть соответствие между именем программы, показываемое в системе (Play Market), её кодовым именем (com.google.vending) и, при необходимости, удалить то, что явно не нужно.
Недостаток бесплатной версии — не умеет делать заморозку программ, посему заморозку делаем через ADB shell при помощи package manager. Пример:
Фильтрация сетевых запросов
Disclamier 2.В данной статье описано КАК можно фильтровать «левую» сетевую активность телефона. Что конкретно фильтровать — каждый волен решать сам.
Как это можно делать.
1. Cамое простое — заполнение файла /etc/hosts записями имён серверов c IP адресом 127.0.0.1. Мой набор серверов лежит на Google Drive в папке Files.
Недостаток варианта — невозможность блокировки неизвестных и динамически генерируемых имён хостов и доменов L3/L4.
Update. Несколько раз обнаруживал странное поведение Netfilter/IPtables. После загрузки телефона в таблице действующих правил оказывались не все правила, перечисленные в скрипте. Если перезагрузить телефон ещё раз — все правила оказывались на месте. Прям шайтан-машина, а не телефон.
В документации нашёл описание параметра —wait, который вроде бы должен решать эту проблему. Но, для гарантированного решения проблемы, сделал ещё вызов IPtables из скрипта не напрямую, а через несложную функцию, которая проверяет код завершения и, при необходимости, повторно выполняет команду с небольшой задержкой, опять же проверяя результат.
2. пишем команды фильтрация отправки пакетов на подсети /16 и /24 стандартными правилами Netfilter/IPtables в файл oem-iptables-init.sh. Здесь их не описываю, желающие напишут их сами, либо найдут в полной версии статьи.
Update. Недостаток варианта — большая часть серверов расположена в облаке Amazon и имеет переменные (round-robin DNS) IP адреса. Для гарантированной их фильтрации придётся закрыть не один десяток подсетей /16, что не есть хорошо. Можно ненароком забанить и полезные сайты. Но для статичных хостов (если их немного) это решение вполне подходит.
3. Фильтруем DNS запросы к ненужным нам доменам. Это несколько сложнее, поэтому опишу подробнее.
Updated.В составе IPtables, штатно идущем в Android есть модули расширения функционала, которыми мы дальше и воспользуемся. Помня, что DNS запросы отправляет система (UID 0) пишем правило:
$IPTABLES -A oem_out —protocol udp —dport 53 -m owner —uid-owner 0 -m string —algo bm —hex-string ‘|04|miui|03|com|00|’ -m comment —comment «Deny UID 0 DNS queries for miui.com domain» -j DROP # $IPTABLES -A oem_out —protocol udp —dport 53 -m owner —uid-owner 0 -j ACCEPT
Updated. Первая строчка отфильтрует все UDP пакеты, отправленные системой (UID 0) на 53 UDP порт любого IP адреса и содержащие в себе байты 046d69756903636f6d00 (запросы к DNS серверу содержащие в себе .miui.com). IPtables самостоятельно преобразуют строчку |04|miui|03|com|00| в чисто шестнадцатиричый вид 046d69756903636f6d00.
Наличие шестнадцатиричной цифры на первой позиции для параметра —hex-string — обязательно, иначе IPtables не примет команду. Точки-разделители в доменном имени при формировании DNS запроса преобразуются в шестнадцатиричные цифры, означающие количество байт до следующего разделителя. Поэтому последний байт равен нулю (00h).
Вторая строчка пропустит все остальные DNS запросы. Комментарии я указал для удобства, чтобы команда iptables -L -v показывала результаты блокировок нагляднее.
4. Для работы Assited GPS необходимо дать возможность доступа к серверам QualComm процессу с UID 1000. Здесь всё сложнее, т.к. простая фильтрация пакетов по содержимому, как в случае DNS серверов, не сработает — начальные пакеты установления TCP соединения c флагами SYN, ACK ещё НЕ содержат в себе имя хоста, которое обязательно присутствует в HTTP запросе, а пакеты идущие после заголовка HTTP запроса уже могут не содержать в себе имя хоста. В результате фильтр пропустит из всей TCP сессии только часть пакетов, что равносильно её запрету или обрыву.
Поэтому рисуем вот такой костыль для фильтрации запросов седьмого уровня средствами 3-4 уровня:
# разрешаем инициировать установление TCP соединений на 80 порт всем процессам работающим под UID 1000. $IPTABLES -A oem_out -m owner —uid-owner 1000 —protocol tcp —dport 80 -m conntrack —ctstate NEW -j ACCEPT #проверяем наличие слова xtrapath в пакетах TCP соединений установленных на 80 порт процессами с UID 1000 и помечаем эти соединения шестнадцатиричным числом 5555. $IPTABLES -A oem_out -m owner —uid-owner 1000 —protocol tcp —dport 80 -m conntrack —ctstate ESTABLISHED -m string —algo bm —string ‘xtrapath’ -j CONNMARK —set-xmark 0x5555 # убиваем пакеты всех установленных процессами с UID 1000 TCP соединений не имеющих нашей пометки число 5555 $IPTABLES -A oem_out -m owner —uid-owner 1000 —protocol tcp —dport 80 -m conntrack —ctstate ESTABLISHED -m connmark ! —mark 0x5555 -j DROP
5. Фильтруем доступ в интернет по приложениям (у меня Google Chrome имел UID 10060). Разрешаем выход в интернет Google Chrome и запрещаем всем остальным приложениям.
$IPTABLES -A oem_out -m owner —uid-owner 10060 -m comment —comment «Permit Google Chrome internet access» -j ACCEPT # # Block all other processes # $IPTABLES -A oem_out -m owner —uid-owner 0-9999 -m comment —comment «Block all other system processes internet access» -j DROP $IPTABLES -A oem_out -m owner —uid-owner 10000-99999 -m comment —comment «Block all other user processes internet access» -j DROP
Слабым местом этого способа фильтрации является его опора на наличие отметки UID на каждом конкретном пакете при прохождении его через Netfilter/IPtables. Обнаружилось это по непонятным TCP соединениям к серверам Google, пакеты которых не содержали UID. Исследование показало, что эти пакеты инициированы процессом Google Captive portal login. Я решил эту проблему обходным путём — просто выключив эти запросы командами в ADB shell:
Радует, что (судя по накопленной статистике за несколько суток перехвата Wi-Fi трафика), никаких иных системных процессов отсылающих пакеты без UID в исследовавшемся телефоне нет.
Update. Дальнейшее наблюдение показало как я ошибался. Такие «тихие» процессы есть, но часть из них невинно общается друг с другом через адрес 127.0.0.1, что ненаказуемо.
Всё остальное надо банить.
Поэтому, для их правильной фильтрации, надо добавить в самое начало скрипта ещё две строчки:
$IPTABLES -A oem_out —protocol all —source 127.0.0.0/8 —destination 127.0.0.0/8 -m comment —comment «Accept internal traffic» —jump ACCEPT $IPTABLES -A oem_out —protocol all -m owner ! —uid-owner 0-99999 -m comment —comment «Drop any traffic which does not have UID.» —jump DROP
Update. Уже после опубликования статьи для меня окончательно стало ясно, что UID приложений, задаваемый системой при установке приложения, при обновлении и/или переустановке приложений может непредсказуемым образомменяться. Следовательно, доступ в интернет для приложения тоже отвалится и надо будет переписывать правило Netfilter/IPtables заново.
Для решения этой проблемы набросал небольшой кусок скрипта, который читает из хвоста файла наименования приложений, проверяет их наличие в системной базе приложений, и, при наличии, берёт оттуда же UID приложения и динамически (в процессе работы скрипта) формирует правило Netfilter/IPtables.
Строго говоря — чтение параметров из тела скрипта — это тоже костыль. Но меня оправдывает то, что на момент работы скрипта, подмонтировать файловую систему доступную снаружи при обычной работе телефона — невозможно. В папке /dev нет соответствующих файлов устройств. Допускаю, что это может быть особенность прошивки конкретного телефона.
Текст специально сделал максимально подробным, для лучшего понимания.
# Permit intenet access for the packages listed at the end of this file. White list mode. # SU=`/system/bin/which su` # changing reading file behavior (read whole file with rn into variable) IFS=»» # reading first and second fields of every line of the system packages database into variable PACKAGESDB. # Escalating privileges via su because of filesystem packages database file access limitations.
PACKAGESDB=`$SU -c «/system/bin/cut -d’ ‘ -f 1,2 /data/system/packages.list»` # # Reading last lines of current script form the end till «exit 0» line # Filtering empty lines, lines started with # and all symbols after # (comments) in every line. # # ‘s/#.*//’ — remove all in every line after # # ‘/^#/d’ — remove lines staring with # # ‘/./!d’ — remove empty lines # ‘/exit 0/,$ d’ — remove all lines starting line with «exit 0» # ‘s/ //g’ — remove spaces from line # /system/bin/tac $0 | /system/bin/sed -e ‘/^#/d’ -e ‘s/#.*//’ -e ‘/exit 0/,$ d’ -e ‘/./!d’ -e ‘s/ //g’| while read line; do # Just in case 😎 OUR_PACKAGE_NAME=$line # Strict checking for existence of our package name in the system packages database. Checking first field. PACKAGE_NAME_IN_DB=`echo $PACKAGESDB | /system/bin/cut -f 1 -d’ ‘ | /system/bin/grep -Fx «$line»` if # Checking grep utility exit code. «0» means pattern found test «$?» == «0» then # # Looking for package UID in database. Checking second field. VERY important space after $line. # PACKAGE_UID=`echo $PACKAGESDB | /system/bin/grep «$line » | /system/bin/cut -f 2 -d’ ‘` else # All other exit codes return us to the beginning of the cycle. # echo «Package $OUR_PACKAGE_NAME not found» $IPTABLES -A $CHAIN -m comment —comment «Package name $OUR_PACKAGE_NAME not found. Check package name.» —jump LOG continue fi # # Set the package right for Internet access # $IPTABLES -A $CHAIN -m owner —uid-owner $PACKAGE_UID -m comment —comment «Permit $OUR_PACKAGE_NAME Internet access» -j ACCEPT # done ###### . skipped. #### exit 0 #### ####### Do NOT edit before this line ######### # Please add package names and comments after this line for granting them internet access. ##### # Google Play Store and its companion processes # com.google.android.gms # Google Services Framework Internet access com.android.vending # Google Play Market internet access com.android.providers.downloads # Download manager service internet access # # Other Google apps com.google.android.youtube # Youtube application internet access com.google.android.apps.maps # Google Maps application internet access com.google.android.googlequicksearchbox # Google Assistant internet access # # com.android.chrome # Google Chrome browser internet access
После переустановки/обновления приложения нужно всего лишь перезагрузить телефон.
6. Для целей мониторинга работы правил Netfilter/IPtables можно добавить ещё вот такую строчку:
$IPTABLES -A oem_out —source 10.1.30.42 —protocol tcp —jump LOG —log-prefix «IPtables log:» —log-uid
Параметр IP адрес отправителя (—source 10.1.30.42) можно опустить, но в этом случае лог будет завален записями сетевой активности процессов, завёрнутых на адрес 127.0.0.1 файлом hosts. Лог можно читать через команду dmesg (dmesg | grep IPtables) в ADB Shell.
Версию статьи, которая писалась как полная инструкция по решению этой проблемы с Xioami Redmi 3S я выложил на Google Drive. Сюда её выкладывать не рискнул именно из-за объёма.
P.S. Я не разработчик Android-приложений, просто жизнь заставила два месяца поразбираться с сабжевым телефоном. Посему, господа профи, если я где ошибаюсь — поправляйте. Буду признателен.
P.P.S. В качестве средства перехвата использовался Zyxel Keenetic Extra. У него есть возможность перехватывать Wi-Fi трафик и сливать его на флэшку для последующего анализа.
Источник: habr.com
Детектор мощности Скачать
Загрузите это приложение под названием Power Detector.
Детектор мощности — сяоми, проверка мощности, инструменты, мощность, детектор, рейтинг контента — все (PEGI-3). Это приложение оценено 5 пользователями 1, которые используют это приложение. Чтобы узнать больше о компании / разработчике, посетите веб-сайт, который ее разработал. com.xiaomi.powerchecker.apk приложения можно загрузить и установить на Android 8.0.0 и более поздних версиях устройств Android.
Последняя версия 2.0.00 доступна для загрузки. Загрузите приложение в своем любимом браузере и нажмите «Установить», чтобы установить приложение. Обратите внимание, что мы предоставляем как простые, так и чистые файлы APK, а также более высокую скорость загрузки, чем APK Mirror. APK-файл этого приложения был загружен в магазине более 76 раз. Вы также можете скачать APK com.xiaomi.powerchecker и запустить его с помощью популярных эмуляторов Android.
??приложение
Детектор мощности от ApkOnline.net
Мы используем файлы cookie для персонализации контента и рекламы, а также для анализа нашего трафика. Вы подтверждаете, что ознакомились и приняли наши правила. Дополнительная информация о файлах cookie
ОБ АПКОНЛАЙН®
ApkOnline — это онлайн эмулятор андроид приложения и Загрузчик APK для поиска и загрузки любого приложения для Android. Он также ищет Приложения для iPhone со ссылками для загрузки приложений для iPhone. В качестве мобильного эмулятора ApkOnline позволяет пользователям и разработчикам использовать свои приложения для Android из любой точки мира. Он содержит множество приложений для iOS и Android, доступных для загрузки с идентификатором приложения в качестве ссылки. У APKOnline также есть хостинг, где разработчики могут загружать любые apk-файлы, сохранять свои приложения и запускать их онлайн.
Следите за нами в соцсетях:
Ссылки на сайты
- О Нас
- Свяжитесь с нами
- Политика облачных приложений
- Политика мобильных приложений
- Условия Предоставления Услуг
- Cookies политики
- Блог
Источник: www.apkonline.net