Overpack xiaomi – Overpack Xiaomi

Как отличить оригинал Xiaomi Mi Power Bank от подделки

Дизайнеры смартфоностроения практически всех компаний стремятся сделать свои устройства тоньше. Зачастую от этого страдает автономность гаджетов, хотя по опросам покупателей именно её более высокий показатель является самым желанным в новых моделях. 

Facebook

Twitter

Вконтакте

Google+

Купить оригинальный Xiaomi Power Bank (5 000 мАч);
Купить оригинальный Xiaomi Power Bank (10 000 мАч);
Купить оригинальный Xiaomi Power Bank (20 000 мАч).

Из-за этого приходится прибегать к миру вспомогательных аксессуаров, в топе которого находятся внешние аккумуляторы (именно Power Bank, а не кейсы-аккумуляторы, значительно раздувающие гармоничные устройства).

Наиболее популярной моделью стал Xiaomi Mi Power Bank, отличающийся невысокой ценой и хорошим качеством. Но проблема заключается в том, что официальной доставки в СНГ нет, а около 80% продающихся внешних аккумуляторов от Xiaomi — подделка. В этом материале мы расскажем как отличить оригинальный качественный аксессуар от устройств, произведённых людьми, жаждущих наживы.

Я сам лично стал «жертвой» подделки, заказав Xiaomi Mi Power Bank на 16 000 мАч. В конечном счёте аккумулятор способен зарядить iPhone 6 чуть меньше полных двух раз, а саморазряд батарейки просто огромен. А вот с покупкой Xiaomi Mi Power Bank на 5 000 мАч мне повезло и теперь явно прослеживаются признаки подделки и оригинального устройства. Добавив мировой опыт мы получили этот материал.

 

Упаковка

Mi Power Bank упаковывается в белую упаковку из качественного картона.

На ней будет лицензионная наклейка с уникальным кодом под стираемым защитным покрытием, состоящим из 20 цифр.

Достаточно пройти на официальную страничку Xiaomi и ввести код, как многие вопросы автоматически отпадут. На подделке не может быть стикера вообще, или же он будет иметь нестираемую поверхность. Этот способ проверки на оригинальность является самым простым и действенным.

 

Кабель

Коротенький оригинальный кабель зарядки имеет внутри штекера USB пластмасску с коннекторами чёрного цвета. У подделки они обычно белого цвета.

 

Торец со спецификацией

Наиболее простое место для определения принадлежности устройства к тому или иному лагерю.

Надпись должна быть чёткой, но не яркой, в то время как печать подделки более тёмная, а края зачастую размыты или имеют потёки чернил. Откровенно слабенькие подделки имеют совсем другой текст и явные ошибки. Например, надпись под значком «LHON», хотя должна быть «LI-ION».

 

Лицевая часть

Логотип компании MI должен быть более тёмным, а шрифт подделки зачастую несколько крупнее. Сама поверхность алюминия подделки даёт световой блик, от которого явно попахивает дешивизной, в то время как оригинальная «банка» обладает матовой, практически не отражающей свет поверхностью, очень похожей на корпус MacBook. К тому же корпус контрафактной продукции часто имеет потёртости или небольшие царапины.

 

Торец с кнопками, индикатором и USB

1. Индикатор  в оригинальном Power Bank, прикрытые защитным прозрачным пластиком, имеют очень маленький диаметр. В подделке обычно отверстия под индикаторы более крупные, а защита и вовсе отсутствует.

2. Внутри MicroUSB-порта имеется пластина с контактами. У оригинала она белого цвета, у подделки — чёрного.

3. Пластина оригинального USB-порта белого цвета, а поддельного — бежевого.

4. На дальнем торце USB-порта должен быть логотип компании — «MI».

 

Что внутри?

В оригинальном аккумуляторе Mi Power Bank используются фирменные батареи LG, соединённые напрямую с печатной платой. Поддельные внешние аккумуляторы имеют посредственного производителя, а сами батарейки соединены с платой через тонкие провода, склонные к нагреву.

 

Тесты

Если включить заряжаться оригинальный Mi Power Bank через адаптер в розетку и одновременно подключить к нему iPhone, то заряжаться должны оба устройства. В поддельном внешнем аккумуляторе такой возможности нет. Тест не проходит, если зарядка осуществляется от USB-порта компьютера.

Во время зарядки iPhone или iPad оригинальным Power Bank индикатор будет моргать.

 

Вывод

При покупке Mi Power Bank, как и любого другого устройства, стоимость не должна быть ниже цены, указанной на официальном сайте. Если вы не осуществляете заказ с официального сайта через посредника, то позаботьтесь о том, чтобы сторонний магазин, отправляющий аккумулятор в ваш регион, имел положительные отзывы по товару и высокий рейтинг (обычно наценка в таких магазинах может достигать 60% от изначальной стоимости продукта). Будьте бдительны!

Купить оригинальный Xiaomi Power Bank (5 000 мАч);
Купить оригинальный Xiaomi Power Bank (10 000 мАч);
Купить оригинальный Xiaomi Power Bank (20 000 мАч).

Смотрите также:

Facebook

Twitter

Вконтакте

Google+

yablyk.com

Aqara Xiaomi все smart устройства

На данный момент доступно 16 smart устройств, но с вероятностью 100% процентов уверяю, что их количество будет расти.

В систему входит:

Долгожданный шлюз управления ZigBee устройствами. Визуально шлюз очень похож на Xiaomi Gateway 2, но не стоит их путать. Дело в том, что шлюз aqara можно добавить только в фирменное приложение aqara. Да, несмотря на то, что все устройства акара добавляются в приложение Mi Home, данный шлюз недоступен для добавления. Возможно в будущем такую возможность добавят, но пока так. Несколько раз задумайтесь перед покупкой, если у вас нет техники Apple, то использовать данный шлюз вам будет затруднительно (приложение для Android работает крайне плохо).

Но если вы используете Apple Home Kit, то новинка придется вам по вкусу. Интеграция всех устройств Aqara к системе умного дома, возможность голосового управления, а так же управление со смарт часов. Разумеется, с Сяоми не может быть все гладко. Добавить устройства Mijia в систему не получится (Можно добавить некоторые устройства, например датчик температуры, но они не будут полноценно работать), возможно в дальнейшем это ограничение будет снято.

Шлюз выпускается для стран Америки, с соответствующей вилкой подключения. Обещают выпустить и для Европы, с нашей «родной» евро вилкой. Будем надеяться и ждать, нестандартные вилки за 3 года успели надоесть.  Шлюз можно купить как в Москве, в магазине FoxPox.ru, так и на AliExpress и GearBest.

Полный обзор устройства.

Настенная розетка отлично подойдет для любителей китайской техники Xiaomi. Установив такую розетку, вы сможете без проблем подключать китайские гаджеты, а так же добавлять в сценарии «умного дома» сторонние устройства.

Есть 4 версии выключателей, 2 монтируются в стену и напрямую подключаются к кабелям по аналогии с обычными выключателями. И две версии крепятся на стену двухсторонним скотчем. Если первые настраиваются непосредственно на управление освещением, вторые могут выполнять любые функции, доступные в сценариях умного дома Xiaomi. Например, можно продублировать выключатели в начале и конце коридора, без протяжки лишних проводов.

Изначально задумывался, как управляемая розетка для кондиционера, но потом в него решили встроить функции центрального шлюза, именно это устройство позволяет подключить все датчики Aqara в единую экосистему (с этой функцией так же справляется шлюз Xiaomi gateway 2).

Это тот датчик, который нужен в каждой квартире или доме. Своевременное информирование о протечке позволит минимизировать причиненный ущерб.

Подробнее о датчике можно прочитать в этом обзоре.

Сложно представить дом, без средств измерения температуры. А если ко всему этому он еще покажет влажность и атмосферное давление? Датчик температуры Aqara будет полезен абсолютно всем. Обзор устройства.

Датчик движения Aqara размещен на поворотной подставке, что позволяет монтировать его в любые места. К датчику можно привязать управление освещением, или срабатывания сигнализации. Обзор устройства.

Если автоматизировать дом, то делать это по максимуму. Автоматизированные шторы, управлять которыми можно с телефона или беспроводной кнопки. Или настроить сценарий, по которому шторы будут закрываться на ночь, а утром открываться? Все в ваших руках! Обзор устройства.

Вторую версию Aqara Curtain B1 было решено сделать беспроводной, встроив аккумулятор, который обеспечивает работу до 6 месяцев от одного заряда.

Универсальная кнопка пригодится всегда, на нее можно настроить любое действие умного дома. Идеально выполняет роль кнопки дверного звонка или включения сигнализации.

Подробнее о кнопке в этом обзоре.

Аналогично датчику движения, выполняет роль активации сценария. Сигнализация и подсветка, а так же все остальные устройства, можно связать сценариями с датчиком открытия двери Aqara.

Камера совмещает функцию шлюза. Что из этого получилось читайте в Обзоре на камеру видеонаблюдения Aqara с функцией шлюза.

Умный дверной замок Aqara Door Lock, со сканером отпечатка пальца. Совсем отказаться от ключей в пользу современных технологий, поможет, недавно анонсированный и уже доступный в продаже, гаджет от компании Aqara. Данный замок просуществовал около года и быстро ушел в тень, после выхода своей второй версии.

Этот умный замок поддерживает все функции своего предшественника, но с качественно переработанным дизайном. Если первая версия бросалась в глаза своей топорностью, вторая версия смотрится солидно и интересно. Сканер отпечатков пальца перенесен на ручку замка, а в верхней части добавлена кнопка для выполнения функции звонка.

Дополнительный датчик для системы безопасности. Принцип датчика прост, он посылает сигнал при изменении своего положения в пространстве. Наверное все видели, как приклеивают проводную сигнализацию на окна? Так вот, это усовершенствованный беспроводной вариант. Можно так же фантазировать на предназначение этого гаджета, например закрепить на дверце личного шкафа, или шкатулки с драгоценностями. Обзор устройства.

Полная копия кубика Mijia.  Поддерживает 6 действий и может быть использован в Apple HomeKit. Кубик очень полезный (до того момента, когда голосовое управление будет полноценным),  лично использую его для управления освещением, телевизором и громкостью звука. Обзор кубика.

Лампочка с цоколем E27 и протоколом передачи данных ZigBee. Меняем обычную лампочку на эту и получаем полноценную управляемую «Умную» лампочку, с возможностью использования её в сценариях автоматизации. Подробнее о лампочке в обзоре устройства.

xiaomi-smarthome.ru

Ещё немного про телефоны Xiaomi и борьбу с ними. Updated / Habr

Честно признаться, у меня не было планов писать и публиковать эту статью, но, после того, как за два месяца увидел в ближнем кругу коллег 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. Пример:

root@land:/ # pm disable com.miui.analytics
pm disable com.miui.analytics
Package com.miui.analytics new state: disabled
root@land:/ # pm disable com.miui.systemAdSolution
pm disable com.miui.systemAdSolution
Package com.miui.systemAdSolution new state: disabled
root@land:/ # reboot
reboot

Фильтрация сетевых запросов


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:
root@land:/ # settings put global captive_portal_detection_enabled 0
root@land:/ # reboot

Радует, что (судя по накопленной статистике за несколько суток перехвата 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 \r\n 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 8-)
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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *