Показанные сообщения отсортированы по дате запроса (balong). Сортировать по релевантности Показать все сообщения
Показанные сообщения отсортированы по дате запроса (balong). Сортировать по релевантности Показать все сообщения

пятница, 4 марта 2016 г.

Balong USB Downloader. Аварийная загрузка usbloader.bin на Huawei и восстановление прошивки.

В этом посте я вкратце расскажу про небольшую Windows утилиту с GUI интерфейсом Balong USB Downloader, предназначенную для для аварийной USB-загрузки модемов на чипсете Balong V2R7 и V2R11. Утилита позволяет загрузить внешний загрузчик-прошивальщик через аварийный USB-serial порт загрузки, создаваемый модемом при повреждении прошивки или замыкании на землю контакта аварийной загрузки на плате модема.

Balong USB Donwloader полностью переписана на Object Pascal (Delphi), основываясь на исходниках проекта уважаемого forth32 - balong-usbdload. Т.е. фактически это не надстройка и не оболочка над консольной версией balong-usbdload, а полноценное Win32 приложение, написанное "с нуля".

На тему модемов и роутеров Huawei, основанных на чипсетах Balong существует уже немало информации (в основном благодаря вкладу таких пользователей, как forth32, rust3028, vve и других), с которой вы можете ознакомиться на профильных форумах. Аварийный загрузчик в этих модемах запускается при замыкании соответствующего контакта на плате модема на землю, либо при повреждении прошивки устройства. Загрузчик стартует автоматически и берет на себя управление прошивочным процессом. Именно для загрузки аварийного загрузчика в модем и предназначена эта утилита. Сами загрузчики для различных моделей модемов в комплект не входят. Важное замечание - фирменные Huawei'еские загрузчики usbloader.bin при старте производят форматирование разделов модема, включая NVRAM, поэтому для восстановления прошивки на модеме без потери текущего содержимого NVRAM они не подходят. Однако, благодаря forth32 для некоторых устройств были собраны альтернативные загрузчики - usbsafe-xxx.bin, которые не затирают NVRAM и запускают процесс прошивки.

Таким образом, используя патченный (альтернативный) аварийный загрузчик, можно перепрошить устройство на любую версию прошивки, даже если штатно обновление прошивки заблокировано и сделать массу других вещей. Ну а для загрузки аварийного загрузчика в устройство, как раз и предназначена Balong USB Downloader. Тема использования аварийного загрузчика для восстановления прошивки и т.п. достаточно объемная, поэтому рассматривать ее в этом посте я не буду (это как раз тема для отдельной статьи). Здесь мы лишь ограничимся рассмотрением возможностей самой программы.


Основные возможности утилиты:
  • Работа с аварийным USB-serial портом загрузки (BOOT_3G), возможность загрузки внешнего загрузчика-прошивальщика.
  • Полноценный user-friendly ;) GUI интерфейс. 
  • Определение имен, а также VID/PID всех COM-портов и модемов в системе по нажатию кнопки "1. Detect".
  • Автоматический выбор BOOT_3G порта в списке по VID_12D1&PID_1443, данный порт автоматически помечается в списке найденных устройств как [BOOT_3G].
  • Отображение системной информации о структуре секций аварийного загрузчика. Подсчет количества пакетов при загрузке.

Что планируется?
  • Добавить картинки и краткие инструкции по поиску контакта аварийной загрузки на плате.
  • Рассмотреть возможность автоматического старта процесса загрузки выбранного usbloader.bin сразу же после появления порта BOOT_3G в системе.
  • Вынесение работы с COM-портом в отдельный поток, чтобы во время процесса загрузки его можно было прервать и чтобы не создавалось ощущение того, что программа зависла, не отвечает в случае если вы выбрали не тот COM-порт для загрузки.

История версий 
  • 1.0.0.5  - первая полнофукцниональная beta приложения.
  • 1.0.1.10 - первый релиз (предпоследняя цифра номер релиза) приложения. Исправлены ошибки предыдущих версий. Добавлена полоска progress bar'а для визуализации прогресса загрузки.


Использование утилиты Balong USB Downloader совместно с патченным загрузчиком usbsafe-xxx.bin я рассмотрю в одном из следующих постов на конкретном примере, а именно - обновлении / даунгрейде прошивки модема МТС 829F/827F (Huawei E3372H) 21.315.01.00.143 на любую другую. Как известно (по сообщениям пользователей), модем с данной версией прошивки является "непрошиваемым", т.е. при попытке понизить версию прошивки модем "вываливается" из режима прошивки в рабочий режим, однако, с помощью загрузки аварийного загрузчика с помощью Balong USB Downloader и метода "иголки" можно залить в него любую прошивку. Этим мы и займемся в одном из следующих постов ... 

суббота, 29 августа 2015 г.

Huawei E8372 (МТС 8211F). Доступ к консоли. Установка TTL=64.

В этом посте мы с вами поговорим о том, как получить доступ к Linux'овой консоли модема, а также как установить патч TTL=64. Изначально пост задумывался как подробнейшее руководство на тему, но т.к. существует немалый риск того, что многие прочитав его, ввиду отсутствия опыта приведут свои устройства в состояние полной неработоспособности - некоторые подробности я все же опущу. Итак, для чего это было нужно лично мне? Во-первых для того чтобы вспомнить как работать с модемами на Balong'е, благо на эту тему есть уже очень много материалов любезно предоставленных vve, forth32, rust3028, Matrixnet и другими, ну а во-вторых - т.к. у меня совершенно случайно оказался Altel'евский Huawei E8372, который вы можете видеть на фото - я захотел его использовать для раздачи интернета через WiFi на головное устройство в автомобиле. Как раз под рукой оказалась телефонная симка Yota. На тему tethering'а Yota'ы уже достаточно много было сказано, поэтому повторяться здесь тоже не буду. Не то чтобы я собрался качать торренты гигабайтами, как вы понимаете в авто - это не нужно, просто я захотел попробовать использовать телефонную SIM (к сожалению, головное устройство не поддерживает установку SIM-карты, хоть и на Android). Вообщем начнем ...

Что нам понадобится? Собственно модем - Huawei E8372, прямые руки, светлая голова и так называемый OEM Code (как раз он нам понадобится для получения доступа к консоли модема). Если вы не представляете где взять этот код - дальше можно не читать, т.к. как раз этот момент я и опущу здесь. Если он у вас уже есть - можно приступать. Итак, первое что нам нужно сделать - это перевести модем из режима HiLink, в котором у нас доступен один лишь интерфейс RNDIS в режим COM-портов. Сделать это можно отправив XML POST запрос следующего содержания на http://192.168.8.1/CGI :

<?xml version="1.0" encoding="UTF-8" ?> 
<api version="1.0">
  <header>
    <function>switchMode</function>
  </header>
  <body>
    <request>
      <switchType>1</switchType> 
    </request>
  </body>
</api>

Сделать это можно с помощью curl (в конце статьи я выложу архив со всем необходимым), запустив файл sw_debug_mode.cmd из архива. Модем, естественно при этом должен быть подключен по USB. В результате в диспетчере устройств у нас появятся следующие устройства:


Как видите, драйвера на них не установились автоматически, поэтому если в системе нет драйверов Huawei устанавливаем их вручную из архива FcSerialDrv.rar или Huawei_Drivers.rar (эти два архива также содержатся в конце поста в общем архиве с материалами).У меня Win 8.1 x64 и драйвера из FcSerialDrv.rar успешно установились (у кого не устанавливаются - можно попробовать отключить обязательную проверку цифровой подписи драйверов, хотя лично я не отключал). В результате из этой мешанины устройств получилось следующее:


Как мы видим здесь 6 COM-портов и 1 RNDIS адаптер. Далее нас интересует командный порт, а именно PC UI Interface (COM 40). Берем PuTTy, включаем в нем режим локального эха для удобства и коннектимся (тип соединения - Serial) на COM40. Проверяем результат командой ATI:

Далее, как я уже говорил - нам понадобится OEM Code. В моем случае это был - 62265683 (не путать с кодом разблокировки модема). OEM Code для Huawei E8372 невозможно посчитать различными калькуляторами, которые генерируют коды по IMEI, поэтому не тратьте свое время впустую. Вводим последовательно следующие команды:

AT^DATALOCK="62265683"
AT^SPWORD="62265683"
AT^SHELL=2
AT^RESET

После чего модем у нас уходит в перезагрузку. Результатом ввода каждой из команд должно быть OK. Здесь DATALOCK - открывает доступ к расширенному набору команд, без нее, к примеру, нельзя ввести SPWORD. Далее активируем консоль с помощью SPWORD и SHELL и ждем перезагрузки модема. После рестарта он опять у нас окажется в HiLink режиме, в котором доступен только RNDIS. Переведем его в Debug Mode с помощью sw_debug_mode.cmd, как мы это уже делали раньше. И подключимся на FC ShallB (COM 41) с помощью Putty:


Далее в окне терминала появятся строчки из лога. Просто нажимаем Enter и видим следующие строки:

Password length is 0, ERR!
Login failed

Т.е. по факту у нас запрашивался пароль, но мы этого не видели. В приглашение Password вводим наш OEM Code, все тот же 62265683 в моем случае и видим приглашение EUAP> - это и есть консоль Linux модема. Теперь выполним в ней следующие три команды:

busybox telnetd -l /bin/sh
mount -o remount,rw /system
/system/bin/busybox tcpsvd -vE 0.0.0.0 21 /system/bin/busybox ftpd -w / &

Запускаем telnet демон (теперь мы можем получить доступ к той же консоли через telnet по 192.168.8.1), монтируем раздел /system на запись и запускаем FTP клиента с возможностью загрузки файлов. Теперь чтобы не повторять все это вручную миллион раз, если вдруг понадобится, мы можем добавить запуск busybox telnetd -l /bin/sh в файл /system/etc/autorun.sh , для меня, например, удобнее всего было сделать это через Far Manager 3.0 и FTP плагин в NetBox'е:

Пример моего autorun.sh, который у меня получился в конечном итоге - вы также сможете найти в архиве в конце этой статьи. К слову, в модеме в /sbin лежит adbd демон, но он не запускается, выпадая с Illegal Instruction. Поэтому мы возьмем adbd от E3372s и зальем его в /system/xbin выставив соответствующим образом права (chmod 750 adbd) и владельца (chown 0:0 adbd), чтобы получилось как на скрине:


Здесь правильная версия adbd с размером в 117968 байт у нас лежит в /system/xbin ... права на нее выставлены 750, владелец - root. Если внести его в autorun.sh, то при старте модема можно будет очень легко подключиться к нему по ADB:


Правильный файл adbd опять же в архиве в конце поста ;) Теперь что касается TTL, если применить патч, по аналогии с E3372S / E3372H, т.е. добавить в autorun.sh следующее:

iptables -P FORWARD DROP
... (тут пропущено) ...
f=0
while [ $f -eq 0 ]
do
dmesg | /system/bin/busybox grep "wan0: port 1(eth_x) entered forwarding state"
if [ $? -eq 0 ]
then
  /system/bin/sleep 15
  iptables -t mangle -A POSTROUTING -o wan0 -j TTL --ttl-set 64
  iptables -P FORWARD ACCEPT
  f=1
else
  /system/bin/sleep 3
fi
done

То ничего у нас не получится, хотя по логике вещей все верно. Если сделать iptables -t mangle -L POSTROUTING -v и посмотреть статистику, то пакеты у нас якобы модифицируются:


И TTL при выходе во вне у них должен быть 64 ... однако на практике происходит то же самое что и с Huawei E5372 (ZeroChaos и Matrixnet на 4PDA в свое время уделили очень много времени этой проблеме - но нашли только "промежуточное" решение, которое заключалось не в изменении всех выходящих пакетов, а в установке TTL по-умолчанию самого роутера в 63 с помощью busybox echo 63 > /proc/sys/net/ipv4/ip_default_ttl  ... в результате любые Android устройства, которые подключаются к нему через WiFi - работают нормально, т.к. дефолтный TTL на большинстве Android устройств - 64, а на всех ПК, которые планируются подключать к роутеру необходимо также изменить DefaultTTL в реестре на 64) ... 

Вообщем правило iptables -t mangle -A POSTROUTING -o wan0 -j TTL --ttl-set 64 в E8372 работает "через раз" и в результате часть пакетов все равно уходит во-вне с неизменным TTL, т.е. фиксации TTL для любых исходящих пакетов с wan0 не получается. Кто осилит полностью 43 страницы этой темы, получит более подробное представление.

В конечном итоге, чтобы не мучиться, получился патч, аналогичный этому для Huawei E5372. Его минус в том, что все подключенные к модему устройства должны иметь собственный DefaultTTL = 64.

Т.е. получаем Вариант №3 с картинки:


Как и обещал, архив 8372_mod.7z со всеми необходимыми файлами.

p.s. В качестве небольшого резюме. Что получилось в итоге? Модем с дефолтным TTL=63, любые устройства на Android (и не только), имеющие DefaultTTL=64 подключаются к интернет без каких-либо проблем, в том числе и головное устройство в авто, ради которого все это и затевалось. Пост написан исключительно в образовательных целях, отвечать на вопросы где взять OEM code под ваш модем, что делать с IMEI и т.п. - я не буду. Вся информация на эту тему есть в открытых источниках. Комментарии с подобными вопросами также не будут публиковаться.

Внимание! Материалы приведенные в данной статье размещены в ознакомительных целях. Все действия описанные в данной статье вы осуществляете на свой страх и риск! Автор(ы) статьи не несут ответственности за вышедшее из строя оборудование, в результате ошибочных действий или неверного понимания вами смысла изложенного в ней материала, а также в силу любых прямых и косвенных причин, которые потенциально могут привести к неработоспособности вашего устройства или любым другим проблемам с ним. Если вы не уверены в своих силах, сомневаетесь и т.п. - не выполняйте ничего из вышеописанного. Используя материалы из этой статьи вы соглашаетесь с тем, что ответственность за ваши действия несете вы и только вы.