пятница, 26 февраля 2016 г.

SalesTrack по-индийски или о вреде "чужих" прошивок. На примере Micromax Bolt D303.

Все из нас так или иначе слышали о различных вирусах под Android, троянах-шифровальщиках, SMS-блокерах или вымогателях и даже о предустановленном вирусном ПО в прошивках от производителя. Но задумывался ли кто-нибудь о том, что прошивки устройств для других регионов могут принести вред или дополнительные расходы? Я думаю что нет. Глядя на различные форумы или околомобильные ресурсы я наблюдаю одну и ту же тенденцию - пользователь приобрел новое устройтство, смартфон или планшет, и тут же бросается искать способы получения root для него, альтернативные прошивки и т.п. Конечно ничего плохого в том, чтобы максимально удобно настроить устройство "под себя" и получить в нем именно те функции, которые хочется видеть нет. Проблема здесь, на мой взгляд, в другом - пользователи абсолютно бездумно совершают какие-то манипуляции со своими устройствами, даже не задумываясь о том к каким последствиям это может привести.

Приведу простой пример с популярным бюджетным смартфоном Micromax Bolt D303, про который я уже писал не так давно. По-умолчанию на телефоне предустановлена ОС Google Android 4.4.2, однако, есть множество моделей, даже того же производителя, на том же самом чипсете, но уже с ОС Android 5.1 Lollipop. Например, Micromax D304, который официально в России, насколько я знаю пока не представлен. Естественно, что часть пользователей загорелась вполне разумной идеей, а что если прошить D303 прошивкой от D304? Получится или нет? Найти прошивку от аппарата в наше время не проблема, тем более что существуют множество действительно полезных ресурсов, например, тот же NeedROM, на котором можно найти прошивки ко множеству устройств. Один из пользователей проверил данный способ, т.е. прошил свой D303 прошивкой от Micromax D304, предназначенной для индийской версии аппарата и судя по его словам - у него все заработало. После чего прошивка просто была перевыложена на одном из популярных форумов мобильной тематики и на данный момент ее скачало около ~2000 пользователей.

Однако, мало кто из этих 2000 был знаком с особенностями индийского телекома, про которые Эльдар Муртазин в свое время рассказывал в статье Индийский рынок электроники. Как он устроен. Пример MicroMax. Желающие могут ознакомиться с ней самостоятельно, статья сама по себе достаточно интересная. Ну а мы остановимся на главном. В связи с особенностями индийского рынка электроники, а также отсутствия других возможностей контроля продаж телефонов компанией Micromax для учета продаж своих аппаратов была разработана следующая схема: "После покупки телефона, когда человек вставляет свою SIM-карту, его просят зарегистрировать аппарат в компании MicroMax, для этого автоматически отправляется одно SMS-сообщение. В этом сообщении известно, с какого аппарата оно отправлено, в компании также видят, кому и когда он был отгружен. Этого уже достаточно, чтобы понимать уровень продаж." ...

Наиболее внимательные читатели уже догадались к чему я клоню. Прошив свой аппарат прошивкой предназначенной для индийского рынка и установив туда SIM-карту, при включении мы, естественно, получим активацию аппарата, т.е. отправку одной или нескольких SMS на номер в Индии или короткий номер, который может быть бесплатен для абонентов операторов Индии или Шри-Ланки, но очень даже платным для абонентов российских операторов. Правда об этом мало кто знает и мало кто задумывается ... однако "первые ласточки" уже есть. Так, сегодня, на одном из форумов я увидел примерно следующее сообщение от пользователя, которому удалось прошить свой аппарат индийской прошивкой:


Именно это сообщение сподвигло меня на написание этого поста и более или менее подробный анализ того, как именно происходит активация индийских аппаратов. Куда и что отсылается и чем это чревато, в плане расходов, если это произойдет в России. 

Перед проведением эксперимента я предварительно скачал и проанализировал упоминаемую пользователем Micromax_D303_D304_V1_14.12.15.zip прошивку. Выяснилось что одно из предустановленных приложений действительно выполняет такую функцию и обладает правами на доступ в интернет, а также отсылку SMS сообщений, в том числе и на короткие номера:

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.OP_WRITE_SMS"/>
    <uses-permission android:name="android.permission.WRITE_SMS"/>

Особенно вдаваться в подробности алгоритма "как это работает" у меня просто не было времени, хотя если у кого-то из читателей возникнет интерес - я вернусь к этой теме чуть позже, но если вкратце, то алгоритм следующий. Сразу после загрузки телефона и получения сообщения BOOT_COMPLETED запускается специальный сервис регистрации / активации телефона, который делает попытку отправить информацию производителю через 1800000 миллисекунд после его запуска. Задержка нужна для того чтобы телефон успел зарегистрироваться в сети оператора и подключиться к интернет для отправки активационной информации. Если же попытка отправки по каким-либо причинам завершилась неудачей, то осуществляется повторная попытка через 900000 мс. Рассказывать на какой сервер передается информация об активации я не буду, желающие могут исследовать прошивку самостоятельно, а вот список номеров, на которые отправляется информация при недоступности HTTP сервера Micromax приведу:


Как видите, здесь есть один индийский номер (+9 1) и один номер Шри-Ланки (+9 4), а также один короткий номер - 7xx4. Так что если вы устанавливали на ваш аппарат индийскую прошивку, а в детализации счета у вас есть информация об отправке SMS на эти номера:

  • +9411xxxx003
  • +919xxxxx0001
  • 7xx4

То их отправка связана именно с процедурой активации / регистрации аппарата у производителя. Повторюсь, такая особенность есть только в аппаратах продаваемых на индийском рынке, у тех что поставляются в Россию официально, естественно, никакой отправки SMS на индийские номера нет. Но прошивая телефон индийской прошивкой, неудивительно что вы получаете индийский телефон ;) 

Однако, как по мне, просто рассказать о том что такая активация заложена производителем - недостаточно. Интересно же узнать о том какая именно информация о вашем аппарате и вашем местонахождении отправляется. Конечно можно было потратить кучу времени, провести более детальный анализ прошивки и описанных в ней алгоритмов для составления целостной картины, но я решил поступить проще (пока рассказывал, параллельно смотрел код, то что удалось увидеть сразу между строк - по идее SMS отправляется не сразу, только в случае если не удалось установить соединение через интернет по HTTP с сервером статистики Micromax, а вот в отправляемую информацию, по-видимому входит информация об аппарате, его IMEI, модели, версии программного и аппаратного обеспечения, а также о сети и базововй станции, как минимум MCC/MNC, Cell ID, LAC ID и т.п.) ... так вот, более простой подход заключается в том, чтобы заменить в прошивке номера для отправки SMS на свой, ограничить телефону доступ в интернет и просто посмотреть на то, что придет в SMS'ке.

Итак, для проведения эксперимента я решил слегка модифицировать прошивку, заменив в ней все номера для отправки SMS на номер своего мобильного телефона, чтобы получить SMS на него, а также взял симкарту Yota, которая сама по себе через мобильную сеть выйти в интернет не может (т.к. для обеспечения доступа в интернет у Yota необходимо прописать APN internet.yota в настройках телефона вручную), также, на всякий случай сразу же после загрузки телефона нужно попытаться отключить передачу мобильных данных (на всякий случай, чтобы сервис вдруг не связался с интернет и не отправил данные по HTTP вместо SMS). Собственно пока я пишу эти строки, параллельно, готовлю все необходимое для эксперимента ...

Обновлено 26.02.2016 23:54 (MSK)

А продолжение, вернее результат эксперимента я получил спустя 5-6 часов после начала исследований. На пути к успеху мне пришлось столкнуться с множеством проблем, во-первых, что понятно, это сборка / разборка, точнее создание модифицированной прошивки, в которой номера на которые отправляется регистрационная информация были заменены на номер моего мобильного. Здесь меня ждало несколько камней преткновения. После запуска уже измененной прошивки на телефоне я постоянно получал в логах сообщение вроде " ... is neither a directory nor file (type=0)" и уведомление об остановке интересующих меня процессов. Проблема была связана с включенным SELinux в Android 5.1, модифицируя прошивку я не учел, что SELinux здесь работает в режиме Enforcing, в котором любые действия нарушающие текущую политику безопасности блокируются. А модифицированные файлы я заливал в системный раздел, вообще забыв про SELinux. Поэтому я решил собрать кастомный recovery для этого аппарата. Но тут меня ждала очередная проблема, раздел с Recovery в дефолтной разметке всего 0x600000 байт (6291456 байт в десятичной системе) или грубо говоря 6 Mb. Естественно в такое пространство ни TWRP, ни что-то другое не поместится. Поэтому пришлось изначально провести переразметку аппарата, увеличив размер раздела recovery за счет userdata до 16 Mb, а уже потом заливать собранный recovery. Плюс в процессе я успел ошибиться с редактированием EBR1 и MBR, в результате чего прошивка просто не запускалась. Представьте сколько времени на все это ушло ... плюс время на поиск ошибок и их причин (про odex/deodex рассказывать не буду, это и так понятно), но так или иначе прошивка с переразметкой у меня была собрана и кастомный recovery с поддержкой SELinux был успешно залит в телефон. Теперь можно было переходить непосредственно к модификации. Кстати, вот так выглядит стоковая прошивка от Micromax Bolt D304 с Android 5.1 (поддержка русского языка тоже есть):


По-умолчанию в прошивке был правда включен дефолтный Micromax'овский лаунчер - FirstouchLauncher (com.mofirst.launcher), но он оказался настолько неудобен для меня, что я сразу же его отключил, выбрав стоковый Launcher3 по-умолчанию. Итак, практически все было готово, передачу мобильных данных в Yota я отключил, взял в руки аппарат на который должна была прийти SMS об успешной регистрации и стал ждать. Спустя 5 минут я понял что 1800000 мс. это наверное как-то много ... школьный курс математики позволил посчитать что это 1800 с., т.е. 30 минут ;)) Математическое озарение пришло неожиданно, аппарат действительно должен был отсылать информацию через 30 минут после включения, но пересобирать прошивку у меня уже не было желания и я решил просто подождать. Через 30 минут на экране Micromax Bolt D303, вернее уже D304 появилось следующее сообщение:


В котором меня поздравляли с покупкой нового телефона и предлагали нажать Continue для получения гарантийного сервиса, обновлений и т.п. Отказаться было нельзя, да и мы уже знали что за этим последует - поэтому я просто тапнул Continue. И спустя секунду на номер телефона прописанный в прошивке как номер Micromax для отправки SMS пришло сообщение следующего вида (заголовок сообщения, а также номера на которые оно реально отправляется указанные выше в статье я специально затер, чтобы ни у кого, прочитав статью не возникло желания отправлять в Micromax ложную информацию):


Давайте разберемся, какую же информацию получает Micromax о каждом проданном телефоне. Во-первых это MCC/MNC сети оператора в которой он зарегистрирован. Т.к. в смартфон у меня была установлена SIM от Yota, которая в 3G работает на БС Мегафона, то в сообщении о регистрации мы видим 25002. Т.е. идентификатор Мегафон. Далее следуют CID и LAC (Cell ID и Local Area Code), о том что это такое подробнее можно почитать, да даже в Википедии. По этим параметрам можно легко определить район в котором находился телефон с точность до БС к которой он подключен. Ради эксперимента я ввел CID и LAC из SMS на первом попавшемся сайте, позволяющим найти координаты БС по CID и LAC - cellidfinder.com и увидел свое примерное местоположение. Вообщем-то достаточно точно, вплоть до района города. Для чего это нужно Micromax объясняется достаточно просто, в Индии существует несколько штатов со своими налогами на продажи и прочими особенностями. Так вот, чтобы бороться с перепродажей аппаратов из одного штата в другой, которые в данном случае получаются невыгодными для Micromax (почему, читайте подробнее статью об особенностях индийского рынка электроники, она реально интересная) и предназначена эта "фишка" в SMS. Т.е. производитель всегда знает где, т.е. в каком штате впервые включили его телефон. После CID и LAC следует модель устройства, в данном случае это внутренний индентификатор - MSD304BLA, а также серийный номер, т.е. просто IMEI обоих слотов. Плюс информация об аппаратной версии девайса и версии ПО. Все это наглядно видно из скриншота. Через HTTP, если интернет доступен, отправляется вообщем-то та же самая информация.

Теперь вы все это увидели своими глазами и, так сказать, убедились воочию. Идея крайне интересная и, например, я вижу ее в видоизмененном состоянии в другом варианте. Например, можно сделать аналогичное приложение для себя и встроить его в систему. Теперь представьте что у вы потеряли телефон или того хуже у вас его украли. Перепрошивать устройство никто и не подумает, просто сделают Hard Reset ... и информация об абоненте (нужно только добавить отправку номера установленной SIM) который решил воспользоваться вашим аппаратом моментально придет к вам на номер телефона прописанный в прошивке в виде SMS, плюс еще и с примерным местоположением. Правда ведь интересно? Конечно. Ибо нечего пользоваться чужими телефонами ) А с этой информацией уже можно и обратиться в правоохранительные органы, к примеру, чтобы ускорить нахождение вашего аппарата. Ну вообщем идея понятна ... 

К чему я вообще веду. Перед тем как прошивать свой аппарат чем-либо, рекомендуется убедиться в надежности источника ПО. Здесь, как вы видите, мы имеем немного неоднозначную ситуацию. С одной стороны это официальная заводская прошивка, т.е. можно считать ее источник надежным (здесь я бы все равно поостерегся, т.к. пользователь выложивший эту прошивку на форуме явно взял ее не напрямую из СЦ Micromax), с другой выходит что примерно 2000 человек взяло прошивку предназначенную для индийского региона и установили ее в свой аппарат, следовательно было отправлено примерно столько же SMS в Micromax на номера Индии или Шри-Ланки. И если для индийцев. я так думаю, SMS эти бесплатные по договоренности производителя с операторами, то российским пользователям за отправку этого SMS придется заплатить по тарифам отправки SMS "за рубеж". Пусть это не такие большие расходы, но все же ... к тому же я больше чем уверен, что большинство из установивших эту прошивку вообще не знали о существовании подобной функции.

Надеюсь что этот пост на наглядном примере проиллюстрировал всем, что перед тем как что-то установить в телефон следует хотя бы немного анализировать что это и к каким последствиям это может привести. Правда вот возможности по анализу у всех разные, не каждый сможет потратить на это столько времени, да и не у всех хватит опыта, но как говорится - предупрежден, значит вооружен. По-крайней мере с продукцией Micromax и прошивками предназначенными для индийского рынка вопросов теперь должно быть на порядок меньше ;)

Полезные ссылки

9 комментариев :

  1. Спасибо за статьи (эту и Android.Backdoor.232.origin.)
    =99 :)

    ОтветитьУдалить
  2. Благодарствуем за труды... интересная статья... хочу поинтересоваться, root как получали и нельзя ли выложить Ваш модифицированный recovery... спасибо

    ОтветитьУдалить
    Ответы
    1. Root - прошивкой zip'а с SuperSU через кастомный recovery, recovery выложить я могу - но в свой телефон вы его в любом случае не прошьете, т.к. размер раздела recovery в вашем телефоне всего ~6 Mb, а собранный кастомный recovery занимает гораздо больше места. Т.е. он просто не войдет у вас в отведенное для него место без переразметки. Возможно тема с прошивками для Micromax D303 станет материалом для очередного поста в будущем, все зависит от интереса проявленного читателями к этой теме и проекту в целом.

      Удалить
    2. Здравствуйте, не поделитесь кастомным рекавери, а переразметить думаю я и сам смогу. Спасибо

      Удалить
  3. Запрет на международный поуминг и все дела.

    ОтветитьУдалить
    Ответы
    1. А причем тут международный роуминг? Ок ... активируйте запрет на международный роуминг, затем откройте приложение SMS и пошлите сообщение на любой номер, например, Уганды ... + 256 ... естественно, что оно отправится. Повторите операцию несколько раз. Посчитайте расходы на отправку на SMS за рубеж. Запишите результат. Представьте что если бы вместо номера Уганды вы отправляли бы SMS на короткий 4-х значный номер ... а теперь представьте что телефон делал бы это периодически без вашего ведома. Я к чему - к тому что международный роуминг тут абсолютно не причем ;)

      Удалить
    2. Интересно... и действительно ушло в лондон... какой то запрет не полноценный, звонки не проходят, а вот смс да.
      Спасибо за наводку.

      Удалить
  4. Decker, очень полезная статья, спасибо! Теперь отовсюду можно ожидать западла! Использовал прошивку Micromax_D303_SW_V12_HW_V1.0_29062015, после рутования и удаления ненужного софта телефон был отправлен в другую страну сыну, извиняюсь за интимные подробности, ржу. А на проверочную SIM-карту пришло SMS:"Не удалось отправить сообщение абоненту 919212230707." Душа была не на месте. Правильно ли я понял из статьи, что СМС отправляется ТОЛЬКО в случае невозможности связи аппарата с сервером Micromax по сети Энторнет, и что можно прекратить метать икру? И ещё вопрос: какой софт использовался для анализа прошивки? Спасибо.

    ОтветитьУдалить
  5. "одно из предустановленных приложений действительно выполняет такую функцию" Почему просто не написать какое?

    ОтветитьУдалить