Sahara & Firehose Test. Изучаем методику работы с Qualcomm-аппаратами.

label
label
label
label
label
Что общего между пустыней Сахара и пожарным шлангом спросите вы? И то, и другое (Sahara и Firehose) названия протоколов по которым происходит обмен данными с устройствами на базе Qualcomm. В частности все "сервисные утилиты", программы-прошивальщики (flasher'ы), так или иначе используют в своей работе эти протоколы. Останавливаться подробно на том что и для чего используется, пожалуй, я не буду, материалов по этой теме конечно не так много, но они есть. Например, очень полезная тема "Общие принципы восстановления загрузчиков на Qualcomm" на одном из популярных мобильных форумов, которая отлично находится поисковиками.

Перейду сразу к сути "проблемы" ;) Общедоступных утилит по работе с платформой Qualcomm на "низком уровне", т.е. утилит для прошивки, чтения разделов из памяти телефона и т.п. сервисных операций, практически нет. Если конечно небезызвестная всем QPST и QFIL, eMMC RAW Tool, про которую я как-то рассказывал, но так или иначе использовать их в "повседневной" жизни удается не многим. Приведу простой пример. Не так давно я писал о вышедшем официальном обновлении Android 6.0.1 для Alcatel Idol 3 4.7" 6039Y, некоторым из пользователей, которые успели обновиться по ряду причин он не понравился и они хотели бы вернуться на предыдущую версию Android - Lollipop. Однако, официального пути сделать это нет, прошивок (помимо nandroid backup'ов в TWRP) вообщем-то тоже. А ведь было бы вполне неплохо, если бы можно было за'backup'ить все разделы с работающего аппарата (напомню, что Idol 3 построен на базе MSM8916) и иметь рабочую версию стоковой прошивки, которой в любом момент можно было бы восстановить аппарат. Т.е. не понравился апдейт - вернулся к предыдущему состоянию. То же самое касается и backup'а / прошивки отдельных разделов, например, recovery и т.п.

Вообщем отсутствие инструментария способного вытаскивать и прошивать разделы на Qualcomm'е сподвигло меня к написанию своего приложения, которое получило рабочее название Sahara & Firehose Test. Пишется оно крайне медленно (уже на протяжении нескольких месяцев, т.к. время на разработку удается найти только в свободное от работы и других дел время), однако, процесс не стоит на месте:


На данный момент приложение умеет:
  • Работать с телефоном из 9008 Download Mode (Emergency)
  • Загружать Firehose Programmer по протоколу Sahara (естественно что для каждого устройства необходим свой MPRG)
  • Осуществлять ряд базовых операций через Firehose
  • Считывать с eMMC Flash таблицу разделов GPT и парсить ее

На скриншоте как раз видно считанную с Idol 3 6039Y GPT. В будущем (если будет время и мотивация) планируется расширить функционал приложения, вплоть до создания полноценного флешера. Объем работы там очень большой, т.к. все создается с нуля, в некоторых местах "изобретаются велосипеды", а некоторые вещи приходится изучать по-ходу дела. Так, например, пока я не взялся писать Sahara & Firehose Test я имел весьма отдаленное представление о том как работает Sahara. Пришлось найти в интернете множество различных исходников (кстати, я уже писал об одном Open Source инструменте, который позволяет работать с Sahara'ой - OpenPST, другим таким инструментом является проект qtools, разработкой которого занимаются уважаемые forth32 и vve), потратить не один час за анализом протоколов обмена с загрузчиком в USBLyzer'е и перелопатить кучу другой информации.

Разработка проекта ведется в Delphi 7 ;) Конечно, когда на двое 2016 год использование такой древней IDE выглядит мягко говоря странноватым, тем более что основной Delphi является Object Pascal, в то время как практически повсеместно распространены C / C++ / C# ... Но причина такой моей любви к Delphi достаточно банальна, т.к. это Rapid Application Development Tools. Мне не нужно задумываться о написании интерфейсов, работой с окнами, обработкой событий и т.п., все визуальные элементы (кнопочки, таблички и т.п.) представлены отдельными компонентами и работать с ними достаточно просто. Кто-то конечно скажет, ха, удивил, можно взять например современный MSVC и все то же самое сделать там. Плюс, при использовании MFC и т.п. работа c контролами GUI также не представляет ничего сложного. Так-то оно так, только я не хочу осваивать ни MFC, ни Qt, ни что-либо еще. И не хочу писать на C#. Причина банальна - время. Т.е. я могу писать и на C, некоторые вещи правда придется вспоминать со справочниками / Google'ем, т.к. постоянного опыта программирования у меня нет (писать что-то приходится от случая к случаю и в основном для себя, в крупных проектах с несколькими разработчиками и т.п. участия я никогда не принимал), но на все это уходит время, а я стремлюсь к наиболее быстрому получению результата.

Т.е. если мне нужна форма с кнопочкой при нажатии на которую будет выполнена нужна мне последовательность действий - я хочу просто разместить на форме эту кнопочку и написать соответствующий обработчик onClick, а не Google'ить про каркасные Win32 приложения, обработку событий и т.п. ;) Т.к. все это опять же время, хотя по-сути ничего сложного там нет. Просто потратить еще несколько дней, например, на то чтобы понять как работать с диалогами с помощью WinAPI и т.п. - для меня это "непозволительная роскошь". Поэтому в качестве IDE разработки используется именно то, что для меня быстрее и удобнее. Более новые версии Delphi я не использую, т.к. не люблю "монструозности", плюс, все равно проекты собранные в Delphi 7 одинаково работоспособны как на Win2k/XP, так и на более современных версиях ОС, включая Win10, поэтому особенных преимуществ в использовании новой IDE я тоже не вижу.

Обновлено 27.08.2016 21:20 (MSK)

Работа потихоньку движется, несколько рабочих скриншотов утилиты на разных версиях ОС:


Описывать "внутренние изменения" и вести history of changes пока рановато, но могу сказать что их не мало и даже на данном этапе уже проделана большая работа. Маленькая колонка справа в списке таблицы разделов предназначена для выбора действия с конкретным разделом. Т.е. та операция, которая будет производиться. Возможные значения:
  • E - Erase partition
  • R - Read partition
  • W - Write partition
С помощью утилиты можно будет не только сделать Backup любого раздела аппарата, но и прошить его. Таким образом утилиту можно будет использовать как для полной прошивки аппарата, так и для прошивки определенных разделов (например, recovery). По мере сил и возможностей постараюсь держать вас в курсе разработки ... ну а пока, stay tuned ... ;)

Обновлено 02.09.2016 22:03 (MSK)

Как я и писал ранее работа над альтернативным флешом для наших устройств продолжается. На данный момент реализованы следующие вещи:

  • Определение списка COM-портов в системе, в том числе и их названий.
  • Взаимодействие с аппаратом и загрузка Firehose Programmer'а по протоколу Sahara.
  • Чтение и парсинг таблицы разделов (GPT) устройства.
  • Чтение информации об устройстве (IMEI, Артикул, серийный номер)
  • Чтение выбранных разделов с устройства (на данный момент можно считать только разделы boot и recovery)
  • Поддержка Alcatel Idol 3 4.7" 6039 и Alcatel Idol 3 5.5" 6045.
Рабочее название приложения Sahara & Firehose Test, в будущем это будет полноценный flasher с возможностью полной прошивки, записи отдельных разделов и, возможно, некоторыми другими функциями. На данный момент требуются тестеры, готовые проверить работу флешера, а именно, существующие функции, на своем аппарате. Страшного ничего не произойдет, т.к. флешер пока только читает данные и ничего не записывает в аппарат.


Краткая инструкция
  1. Устанавливаем на ПК драйвера Alcatel, если они у вас еще не установлены. Самый простой способ сделать это - это установить утилиту Mobile Upgrade Q отсюда. Она автоматически установит все необходимые драйвера.
  2. Переводим свой телефон в Download Mode так, как описано в этом посте. На всякий случай, повторюсь и тут. Для перевода телефона в режим Download Mode подключаем выключенный телефон к ПК и зажимаем на нем: Громкость Вверх + Громкость Вниз + Кнопка включения питания. Обязательно зажимать их при подключенном к ПК USB кабеле (!). После появления картинки как на скриншоте, нажмите Громкость Вверх для перехода в Download Mode. Если вы подключили к ПК включенный телефон, последовательность действий та же, просто держите нажатые кнопки до тех пор, пока телефон не перезагрузится. Вплоть до появления этой картинки. Далее по инструкции выше.
  3. Нажимаем в программе кнопку Detect, программа должна найти список всех COM-портов в системе. Выбираем вашу модель телефона и COM-порт с названием Qualcomm HS-USB QDLoader 9008 (у вас он может называться чуть по-другому, в зависимости от версии драйвера установленного в системе, важно выбрать тот COM-порт, который содержит в названии 9008).
  4. Нажимаем кнопку NPRG для загрузки в телефон Firehose Programmer'а. Если все прошло успешно, то вы увидите что-то вроде:

    02.09.2016 21:45:03: Start Download NPRG ....
    02.09.2016 21:45:03: offset[0],len[52]
    02.09.2016 21:45:03: offset[52],len[96]
    02.09.2016 21:45:03: offset[4096],len[4096]
    02.09.2016 21:45:03: offset[8192],len[2440]
    02.09.2016 21:45:03: offset[12288],len[4096]
    02.09.2016 21:45:03: offset[16384],len[4096]
    02.09.2016 21:45:03: offset[20480],len[4096]
    02.09.2016 21:45:03: offset[24576],len[4096]
    02.09.2016 21:45:03: offset[28672],len[4096]
    02.09.2016 21:45:03: offset[32768],len[4096]
    02.09.2016 21:45:03: offset[36864],len[4096]
    02.09.2016 21:45:03: offset[40960],len[4096]
    02.09.2016 21:45:03: offset[45056],len[4096]
    02.09.2016 21:45:03: offset[49152],len[4096]
    02.09.2016 21:45:03: offset[53248],len[4096]
    02.09.2016 21:45:03: offset[57344],len[4096]
    02.09.2016 21:45:03: offset[61440],len[4096]
    02.09.2016 21:45:03: offset[65536],len[4096]
    02.09.2016 21:45:03: offset[69632],len[4096]
    02.09.2016 21:45:03: offset[73728],len[4096]
    02.09.2016 21:45:03: offset[77824],len[4096]
    02.09.2016 21:45:03: offset[81920],len[4096]
    02.09.2016 21:45:03: offset[86016],len[4096]
    02.09.2016 21:45:03: offset[90112],len[4096]
    02.09.2016 21:45:03: offset[94208],len[4096]
    02.09.2016 21:45:03: offset[98304],len[4096]
    02.09.2016 21:45:03: offset[102400],len[4096]
    02.09.2016 21:45:03: offset[106496],len[3044]
    02.09.2016 21:45:03: SAHARA_END_IMAGE_TX_ID received

    0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 *................*

    02.09.2016 21:45:04: Send done command

    0000: 06 00 00 00 0C 00 00 00 00 00 00 00 *............ *

  5. Нажимаем кнопку Get GPT. В результате мы должны увидеть таблицу разделов. Если таблица GPT заполнилась, дальше уже можно выполнять другие действия с телефоном. Например прочитать информацию о нем или сделать backup разделов boot и recovery.
  6. Проверяем функционал Info и Read. Чтобы считать раздел из телефона (напомню, что пока поддерживается только чтение boot и recovery) необходимо поставить галочку напротив него и выбрать файл, куда будет сохранен образ раздела. После чего нажать кнопку Read.
  7. Тестируем пока имеющийся функционал и отписываемся в теме. Если что-то пошло не так, например, телефон завис в процессе чтения данных или произошла любая другая нештатная ситуация, опять вводим телефон в Download Mode, т.е. выполняем инструкцию с пункта 2. Да, важное замечание, кнопку NPRG небходимо нажимать только один раз, т.е. загрузчик загружается в телефон единожды после перевода его в Download Mode. Для выполнения дальнейших действий загружать его повторно не нужно.
Все свои вопросы, предложения, пожелания и т.п. можно высказывать здесь в комментариях.


Имя файла: Alcatel_Flasher.rar
Пароль на архив: decker.su


Краткий FAQ от 02.09.2016

  • Q. А эта разработка только для Alcatel или с какими вообще аппаратами ее можно использовать?
    A. В целом ПО можно научить работать и с другими моделями аппаратов на Qualcomm, но на данный момент поддерживаются только две модели Alcatel Idol 3 6039 и Alcatel Idol 3 6045. Пока говорить о поддержке других моделей и т.п. рано, т.к. для начала необходимо отладить основной функционал, чтение / запись и т.д. и т.п. Работы еще достаточно много.
  • Q. Ок, понятно. У меня как раз Idol 3, могу ли я прошить TWRP с помощью этого ПО?
    A. На данный момент нет, т.к. запись разделов пока не реализована. Однако вы можете уже сейчас попробовать сделать backup разделов boot и recovery с вашего аппарата, чтобы убедиться что все работает так, как нужно. Для записи будет аналогичная кнопка - Write, однако, это пока не реализовано.
  • Q. И когда следующий релиз с поддержкой записи?
    A. Этого я и сам, к сожалению, не знаю, прочитайте пост чуть выше, там все рассказано о том как и за счет чего ведется разработка. Одно могу сказать точно, этот тот проект, который я заинтересован довести до конца, хотя бы для использования в личных целях. Когда это произойдет - это вопрос времени.
  • Q. А как я могу узнать об обновлениях, например, о выпуске нового билда и т.п.?
    A. Вы можете следить за всеми новостями на этой странице, добавьте ее в закладки и периодически просматривайте. Вся новая информация сперва будет появляться здесь. Возможно я также буду публиковать ее на некоторых других ресурсах, но первоисточник тут и только тут. Т.к. иногда просто физически нет времени писать везде и обо всем.
  • Q. Как я могу поддержать проект или помочь в его развитии?
    A. Поддержать проект вы можете здесь, если речь идет о donate. На той же странице вообщем-то виден и вклад других участников. Также, вы можете поддержать проект своим участием в тестировании или распространением информации о нем, например, с помощью кнопок "Поделиться" в социальных сетях и т.д. и т.п. Любая помощь проекту является абсолютно добровольной, поэтому в чем именно выразится конкретно ваша поддержка - решать вам.

Обновлено 03.09.2016 00:48 (MSK)

До следующего релиза еще далеко, но могу сказать что флешер уже "обучен" читать все разделы, в том числе и разделы размер которых превышает 2147483647 байт (именно с этим сегодня была небольшая проблема). На скриншоте ниже показан результат чтения всех разделов с Idol 3 6039Y:


Кстати, как сообщают различные СМИ 04.09.2016 в опасной близости от Земли пройдет очередной астероид,  размеры которого сопоставимы с 2016 QA2 , так что если 4-го сентября вдруг настанет час "X" для человечества или определенной его части, я бы хотел немного отдохнуть от разработки, хотя бы в эти дни ...  Stay tuned ... ;)

Обновлено 03.09.2016 22:43 (MSK)

Исправлена ошибка при которой при наличии нескольких COM-портов в системе при выполнении любого действия автоматически выбирался первый порт из списка. Спасибо пользователю dennwgsm за багрепорт. Обновленная версия приложения доступна по ссылке "Скачать" выше.

Обновлено 04.09.2016 20:26 (MSK)

Небольшое видео иллюстрирующее методику тестирования приложения:



Обновлено 07.09.2016 03:15 (MSK)

Очередное обновление build'а приложения (если вы заметили, релизы приложения нумеруются не по номерам версий, а по дате / времени компиляции). Добавлена обработка ошибок при чтении разделов на некоторых конфигурациях PC. В процессе тестирования выяснилось, что у некоторых пользователей приложение работает без проблем, а у некоторых при попытке backup'а раздела зависает. С чем это связано пока, к сожалению, выяснить не удалось, т.к. пользователей принимающих активное участие в процессе тестирования довольно мало и проблема проявилась только у двух из них (проблема может быть как в ОС, так и в драйверах, также не исключается вариант с проблемным USB-контроллером). В этой версии приложения внесено несколько существенных изменений, направленных на выяснение причины этих "зависаний", теперь при обнаружении проблемы максимум информации должно отображаться в логе. Улучшено определение параметров устройства, специфичных для некоторых аппаратов Alcatel. Последняя версия приложения всегда доступна по кнопке "Скачать" в этом посте, так что обновляемся и отписываемся.

Обновлено 07.09.2016 19:57 (MSK)

Радостная новость для всех кто следит за проектом. Начиная с билда 07.09.2016 19:41:45, который уже можно скачать по ссылке из поста - доступна запись разделов. На данный момент поддерживаются только RAW образы разделов (т.е. образы полученные с помощью побайтного копирования или backup'а), SPARSED образы - не поддерживаются.

В текущей версии приложения доступно чтение и запись только двух разделов - boot и recovery. Перед любыми операциями записи настоятельно рекомендуется сделать сначала backup выбранных разделов. Обратите внимание, что на некоторых конфигурациях PC (возможно из-за установленных драйверов или специфических USB контроллеров) чтение backup'а разделов может проходить с ошибкой. В этом случае не рекомендуется использовать функцию записи. Т.е. вначале проверяем - если backup (read) разделов у вас создается успешно, то воспользоваться функцией записи можно. Если backup приводит к ошибке или приложение "зависает" в процессе - то пользоваться режимом записи не рекомендуется, т.к. это потенциально может привести к повреждению данных в разделе и другим нежелательным последствиям. Восстановить "все как было" в данном случае можно будет только прошив аппарат используя Mobile Upgrade.

Также, теперь приложение можно использовать для прошивки TWRP даже для тех аппаратов, на которых его прошивка через QFIL или другими способами была невозможна. Давайте рассмотрим все на примере.

Как прошить TWRP Recovery с помощью Sahara & Firehose Test?

  • Первое что необходимо сделать - это сохранить backup раздела recovery, так, как это описано в краткой инструкции выше и показано в видео.
  • Если backup успешно сохранен просто выбираем файл с образом TWRP recovery, соответствующим вашей версии аппарата, ставим галочку на разделе recovery и нажимаем кнопку Write.

После чего вам будет выдано следующее предупреждение:


Если вы нажмете Yes - операция записи будет отменена, если вы выберете No - запись будет продолжена. Пример лога успешной записи раздела recovery:

07.09.2016 20:15:17: Ready to do job with 1 partition(s)
07.09.2016 20:15:17: Process "recovery" - File: D:\Temp\alcatel_flasher\recovery_twrp.img
07.09.2016 20:15:17: Partition size: 33554432 bytes
07.09.2016 20:15:17: Data size: 33554432 bytes
07.09.2016 20:15:18: Bytes read: 91
XML[0] = <?xml version="1.0" encoding="UTF-8" ?><data><response value="ACK" rawmode="true" /></data>
07.09.2016 20:15:23: Bytes read: 92
XML[0] = <?xml version="1.0" encoding="UTF-8" ?><data><response value="ACK" rawmode="false" /></data>

На этом пока всё. Тестируем и отписываемся в комментариях.

Обновлено 23.10.2016 11:55 (MSK)

Поздравляю всех с выходом долгожданного build'а с поддержкой Alcatel Idol 4 6055, начиная с релиза от 23.10.2016 он полностью поддерживается:


К сожалению, из-за низкого интереса пользователей и отсутствия поддержки проекта я вынужден приостановить все работы над ним. Немного статистики: из 1000 человек скачавших утилиту было собрано всего около 60 USD пожертвований на развитие проекта от 5 разных человек (все они участники форума xda-developers.com), за что им огромное спасибо. Естественно, что собранной суммы недостаточно для покупки тестовых устройств и продолжения работ, более того, я получил в ЛС не одно сообщение в стиле "почему я должен страдать, вы должны выложить утилиту прямо сейчас", "если тебе нужны деньги найди себе работу программистом или что-то вроде этого" и т.п. ... неудивительно, что при таком отношении всякая мотивация заниматься проектом полностью пропала. Так что, можно сказать, что пользователи сами выбрали судьбу этой разработки, а их отношение показало только одно - труд разработчиков никто не ценит и любая поддержка проекта за счет "голосования рублем" изначально обречена на провал. Жаль, потому что интересных идей было много, например, в проекте были функции по сбросу FRP и некоторые другие идеи. Что ж, как говорится, community сделало свой выбор.

Готовую сборку TWRP recovery с полной поддержкой дешифрования раздела userdata вы можете скачать здесь - twrp_recovery_idol4_6055.img .
Share This :



sentiment_satisfied Emoticon