суббота, 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 и т.п. - я не буду. Вся информация на эту тему есть в открытых источниках. Комментарии с подобными вопросами также не будут публиковаться.

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

1 комментарий :

  1. как найти то этот OEM Code, по конкретней напишите, так как смысл тогда писать эту статью?

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