- Ремонт роутера smart box
- История одного маленького реверс-инжиниринга или как мы BREED для Beeline Smartbox FLASH/GIGA расковыряли
- Благодарности
- Введение
- Зачем понадобилось менять загрузчик, если он и так работал?
- Первый способ прерывания загрузки breed
- Второй способ прерывания загрузки breed
- Третий и лучший способ прерывания загрузки breed
- velomas
- inflabz
- Четвертый (нештатный) способ прерывания загрузки breed
- Описание структуры загрузчика breed
- Как все было
- Заключение
Ремонт роутера smart box
Beeline SmartBox ONE / МТС S1010 / Дом.ru S1010.ER / WIFIRE S1010.NBN – обсуждение »
usbmodem wifirouter: 2.4GHz(300Mbit\s) — 5GHz(300Mbit\s) | 4•100Mbit\s | USB:1
Режимы работы DHCP-клиент, Static IP, L2TP
Wi-Fi 802.11b/g/n 300Mbps, 2.4GHz и 5GHz Dual Band, Гостевая Wi-Fi сеть
WAN/LAN Fast Ethernet порты LAN и WAN – максимальная пропускная способность 100 Мбит/сек
Наличие USB-порта да, 1 USB 2.0
Поддержка IPTV Да, Выделенный LAN-порт и IGMP proxy
Beeline SmartBox One v2
SerComm S1010 V2
Power: 12 VDC, 1 A
CPU1: Realtek RTL8197DL (700 MHz)
FLA1: 16 MiB (Macronix MX25L12835FMI-10G)
RAM1: 64 MiB (Nanya NT5TU32M16EG-AC)
Expansion IFs: USB 2.0
USB ports: 1
WiFi1 chip1: Realtek RTL8192ER
WiFi1 802dot11 protocols: bgn
WiFi1 MIMO config: 2×2:2
WiFi2 chip1: Realtek RTL8812AR
WiFi2 802dot11 protocols: an+ac
WiFi2 MIMO config: 2×2:2
ETH chip1: Realtek RTL8197DL
Switch: Realtek RTL8197DL
LAN speed: 10/100
LAN ports: 4
WAN speed: 10/100
WAN ports: 1
Сообщение отредактировал ferhad.necef — 08.05.22, 14:00
Прошивки есть , но нет загрузчика.
Сообщение отредактировал Zotio — 08.04.21, 22:14
Часик в радость, Возможно я вас сильно обрадую, но у этого девайса есть «суперюсер»
Смотрите ниже. :blush: :thank_you:
Сообщение отредактировал Lastdenc7 — 12.11.17, 01:57
чтобы сменить оператора, вам нужно зайти на локалку вашего роутера>> Выйдти из системы под пользователем Admin
И зайти под пользователем SuperUser .
Это, кстати и есть логин.
Чтобы получить пароль нужно отправить СМС сообщение на номер +793ВЕЗД4ЛЕ7С70ПЯ7Ь 😀 :blush:
Пароль: это серийный номер вашего аппарата, написан на стикере, на заднице роутера
Следуя этой непонятной и слегка чёкнутой инструкции вам откроется возможность сменить билайновский L2TP на любой другой подходящий протокол интернет связи.
Сообщение отредактировал Zotio — 27.10.21, 22:40
jovialkent, Что за прошивка такая? на офф сайте последняя 2.0.14
Сообщение отредактировал leva.ryzhkov — 17.11.17, 22:59 Неужели никто не знает возможно ли прошить Smart box one под другую прошивку? Я уже на форуме http://ingodwetrust.ru/openwrt-flashing/ нашёл загрузчик, но не знаю что и как делать, может кто подскажет? Сообщение отредактировал WrathJr — 28.11.17, 14:39
*на сколько я знаю к нашему n320 данный загрузчик не подходит(если шить через веб морду) Сообщение отредактировал Lastdenc7 — 28.11.17, 23:12 Из найденного на просторах интернета бэкапа слитого через putty собрал дамп и зашил флеху. Исправил wan-mac, серийник, название wifi и пароль.На свои. Сообщение отредактировал cartanman — 01.12.17, 03:11 Если кому интересно будет, получил ответ от Кредова по эл.почте. Короче модем не стоит извращений, проще купить нормальный ) Доброго время суток! img образ оригинальной прошивки это скомпилированный код, если его и можно отредактировать это не простая задача, тут я вам помочь не смогу. Свой ONE я прошивал через китайский программатор. После перепрошивки он будет есть 3G модемы. Но как его перепрошить я даже и не вспомню )) давно это было История одного маленького реверс-инжиниринга или как мы BREED для Beeline Smartbox FLASH/GIGA расковырялиБлагодарностиКоллективными усилиями участников тематического tg чата особенно UnameOne, M, Karim, Nicky F. с форума 4pda, удалось разобраться в запутанных хитросплетениях исходного кода прошивок, архитектуре смартбоксов, чипа MT7621, технологиях пайки микросхем. Все эти модные софт скилы «командная работа», «межличностное взаимодействие», «креативность», «проактивность», «самостоятельность», «дисциплина» все еще слабоваты, но что-то точно улучшилось. Сотни часов с дымящимся паяльником и перед монитором, но я не бросил. Спасибо за это товарищам! Спасибо Ватрушкину из Израиля, который натолкнул на идею сборки собственного программатора чипов NAND из грязи и палок. Про это возможно напишу отдельную статью, если будет настроение. Хочу отдельно отметить человека по имени Андрей он же inflabz, который начал заниматься темой смартбоксов очень давно. Сейчас он отошел от темы, с ним очень сложно разговаривать. Люди, кто знал его раньше говорят: «Очень плохая музыка! Раньше лучше было». Тем не менее его вклад первопроходца нельзя не отметить. Кажется, что он чем-то тяжело и неизлечимо болеет. Мужайся, не раскисай, держись! Общение с ним недавно закончилось выпиливанием меня из телеграма до 1 февраля по чьей-то жалобе. Сразу вспомнились офисные интриги, сплетни, сенсации, которые я уже за время пока не работаю успел забыть. В общем если это он меня выпилил, я не держу зла. А если кто-то другой, то мне нет дела до этой жалкой ничтожной личности. 🙂 Спасибо компании Билайн, которая постаралась и запустила на рынок сразу несколько отличных моделей роутеров, которые дадут фору многим аналогичным моделям, в том числе известных марок. Тем, кого незаслуженно забыл, простите и не обессудьте. Введение
Пришлось это все собрать, проанализировать, просеять, снова проанализировать, потом структурировать и обобщить. У меня короткая память, поэтому если так случится и через месяц или год я снова займусь чем-то подобным, то эта статья будет отличным мануалом. Надеюсь, что кому-то она понравится. Людям JS скрипта вряд ли будет интересно, но статья для настоящих пусть и начинающих инженеров/программистов, кто любит не только нажимать педали, но и залезть под капот. Зачем понадобилось менять загрузчик, если он и так работал?Резонный вопрос. Ответ очень прост. Лень. Дело в том, что скомпилированный автором загрузчик брид недоступен в исходных кодах, не уверен, что автор знает, что в России есть устройство, которое используется десятками (если не сотнями) тысяч людей по всей стране. Автор китаец поэтому логично, что он сделал загрузчик для китайского роутера Xiaomi mi router 3g. Этот роутер хоть и построен на том же чипе MT7621A, но все же отличается. В роутере Xiaomi кнопка reset подключена к 18 выводу GPIO, а в билайновских смартбоксах кнопки reset на всех моделях подключены к другим выводам. В smartbox flash reset на GPIO 3, а в smartbox giga на GPIO 4. Если установить на smartbox flash или giga загрузчик breed для Xiaomi mi router 3g, то кнопка reset не работает. Кнопка reset в breed используется для прерывания загрузки, чтобы если в нем настроен автозапуск прошивки, этот запуск не производился, а брид продолжал бы работать. Если у вас настроенный роутер, который сразу запускает прошивку, то может быть довольно сложно прервать этот процесс без работающей кнопки reset. Если ты делаешь прошивки, или испытываешь чужие, то прерывать загрузку приходится очень часто. Автор брид предусмотрел еще 2 альтернативных способа прерывания загрузки. Всего мне известно 4 способа прерывания загрузки breed, 3 штатных и 1 нештатный. Первый способ прерывания загрузки breedМожно использовать специальную программу, которую написал автор самого брида. Программа отправляет специальный пакет через сетевой интерфейс, чтобы брид, получив такой пакет приостановил дальнейшую загрузку. Во-первых программе breedenter.exe требуется для работы качественное сетевое соединение, нужно подключиться к роутеру патчкордом от компьютера. Во-вторых программа на китайском языке. В-третьих программа под windows и требует установки дополнительного ПО для своей работы. Второй способ прерывания загрузки breedЕсли у вас есть подключение к роутеру через интерфейс UART, то брид готов остановится, если получит любые данные через интерфейс. Проблема тут в том, что для подключения по UART требуется последовательный порт COM или USB устройство, которое будет эмулировать наличие такого порта. Нужно разобрать роутер и распаять контакты для UART подключения. Конечно распаянный UART вещь в хозяйстве полезная. Но разбирать и паять только для прерывания загрузки, как стрелять из пушки по воробьям. Третий и лучший способ прерывания загрузки breedПрерывание загрузки breed с помощью кнопки reset — самый простой и надежный способ. Только именно он и не работает на роутерах smartbox без модификаций загрузчика. Чтобы починить кнопку и понадобилось изменять загрузчик. В сообществе на форуме 4pda уже были люди, которые проделали трюк с изменением загрузчика. Но ни описаний, ни скриптов они не выложили, поэтому старые версии breed с переключенной кнопкой для smartbox, которые имелись в наличии, не решали проблему. До того, как полез в дебри реверс-инжинеринга я пытался достучаться до этих людей. velomasПервым выложил измененный брид с переводом интерфейса с китайского на английский. Он за пару недель не ответил ни на одно сообщение на форуме. Поскольку он время от времени появлялся на форуме, я ждал, что именно он что-то мне скажет. Скажи он, что именно нужно делать, результат был бы тот же, но удовольствия было бы гораздо меньше. inflabzВторого человека, который делал изменения кнопок (inflabz) на форуме уже давно не было, от дел он кажется уже отошел и пропал с горизонта. Он в свое время довольно сильно продвинулся в адаптации прошивки openwrt для smartbox, выкладывал все в паблик. Вел свой чат по смартбоксам. Он делал изменение кнопок. Я смог на него выйти через другого человека из прошивочной тусовки. Уважаемый inflabz, говорил как препод в шараге, отвечал вопросом на вопрос, но скриптов так и не дал, сам менять брид отказался. Кое-что полезное он таки сказал, а главное не дал моему интересу к теме угаснуть. Довольно одиозная личность в узких кругах. У него огромный опыт работы с различными моделями устройств, какое-то чумовое кол-во сообщений и ачивка супермодератор на gsm-forum. Он изгнан с форума 4pda за ведение коммерческой деятельности, но в нашем чате он состоит. Поскольку он сделал прошивки своим заработком, бесплатно делится знаниями он не настроен. По имеющимся данным он является обладателем нужных скриптов для модификации, который получил по блату от velomas. В чате пишет часто, но очень осторожно, больше читает. Его я даже не спрашивал. Четвертый (нештатный) способ прерывания загрузки breedОпытным путем был открыт этот способ, который пару раз выручал меня, когда первые три не работали. Перед моментом запуска прошивки, когда брид уже передал управление следующей программе есть примерно 2 секунды, в которые брид уже загружен и работает, но еще не успел запустить прошивку. Если отключить DHCP и вручную установить IP адрес компьютера и шлюза (192.168.1.1), то за эти 2 секунды можно подключиться к брид через telnet и передать команды на отключение автозагрузки. Вот эти: Успеть за это время довольно сложно, поэтому получается через раз. Но на безрыбье и рак — рыба. Описание структуры загрузчика breedДля истории и тех, кто захочет поковыряться самостоятельно. Применительно к MT7621, который установлен в smartbox flash, giga, turbo nand_header_t устроен так: После заголовка идет предзагрузчик, который настраивает чип, распаковывает сжатый lzma загрузчик, загружает его и передает ему управление. Место, где начинается основной код загрузчика содержит заголовок с минимальным числом параметров. Для поиска заголовка загрузчика используется уникальный идентификатор Breed. 32 битное число 0x37540178. Затем идет 4 байта размера тела загрузчика, потом 4 байта адреса памяти, куда предзагрузчик записывает загрузчик, дальше 4 байта адреса точки входа, откуда будет запущен загрузчик. Это участок программы, где с волшебного числа 0x37540178 начинается заголовок breed. Сразу после заголовка Breed идет заголовок lzma длиной 13 байт. Значение байта с параметрами сжатия вычисляются по формуле: pb * 5 + lp * 9 + lc . Обратно значения параметров вычисляются так: В самом начале запуска чипа, после того как контроллер памяти MT7621A в состоянии считывать данные NAND памяти, он умеет работать только с uimage заголовком. Т.е. он умеет проверять только 1 контрольную сумму заголовка, копировать себя в нужный участок оперативной памяти, а потом начать выполнять код предзагрузчика из заданной в заголовке точки входа (ep). Предзагрузчик становится умнее, понимает lzma. Распаковывает из архива код breed и уступает ему место. Все это довольно очевидно. Для человека, который знаком с работой подобных устройств, все становится понятно сразу при виде знакомых идентификаторов. Я не такой, поэтому очень здорово, что Nicky F. посмотрел и любезно согласился все объяснить мне. В этом плане в нашей мини-тусовке есть критическая масса людей, которые готовы начать объяснять «от печки» или чуть дальше алфавита. Новичков натыкающихся на бетонную стену профессионалов легко развернуть в направлении выхода. А ведь как тяжело бывает этим профессионалам опускаться на уровень новичка. Все компьютерщики, которым приходилось побывать в шкуре мастера по настройке исчезнувшего курсора мышки, хорошо поймут о чем я толкую. Тайну всех контрольных сумм разбирали несколько дней, я старался без устали, но все понял только когда меня ткнули носом в нужный участок исходного кода другого загрузчика mt7621. Поскольку для запуска загрузчика вторая контрольная сумма nand crc не проверяется, то успешно, если как-то самостоятельно записать даже такой неполноценный загрузчик, то работать он будет не хуже нормального. На этом можно было бы и остановиться. Как говорится: «Работает — не трогай!» Но очень хотелось пройти этот квест, поэтому никто не бросил. Прошло еще несколько дней прежде, чем сначала обнаружилось присутствие этой спрятанной контрольной суммы, а потом нашелся алгоритм подсчета этой контрольной суммы. Кто-то может сказать: «Ну что тут такого? Открыл исходники и все увидел». Таким я хочу напомнить, что загрузчик breed это программа с закрытым исходным кодом, автор китаец, который на вопросы и просьбы через гитхаб не отвечает. Как я сказал, вторая контрольная сумма, которая не предусмотрена каноническим заголовком uimage спрятана в том участке, в котором записывается имя образа (image name). 32 байта для имени образа сократили до 12, а оставшиеся 20 байт пошли под еще 1 заголовок с еще 1 контрольной суммой. Вторая контрольная сумма в отличие от первой подсчитывается не по алгоритму crc32, а по старому алгоритму crc стандарта POSIX. Вот как это работает.
Как все былоПару недель назад, не теряя надежды модифицировать брид, я забрел в соседний чат специлизирующийся на прошивке PADAVAN для SMARTBOX. Слово за слово и откликнулся человек %username%, который на 4pda Nicky F. Он согласился помочь в разборе breed, хотя у него даже нет тех моделей роутеров, для которых я хотел делать модификацию. Видимо увидел в чате приятные сердцу слова про реверс и дизасм. В чатах довольно много людей что-то постоянно просят, но в основном приходят те, у кого не работает модем или что-то не так с прошивкой. Nicky F. рассказал что и куда нажимать. Я отвечал впопад, поэтому дело заладилось. Так я в первый раз дизасембировал код программы. Я не могу назвать себя совсем нубом в вопросе, так как уже к тому времени приходилось использовать отладчик, делать какие-то вставки в программы на языке ассемблера. Я видел ассемблер, но это были либо вставки в собственные простейшие программы или полученный во время компиляции ассемблерный код, который производит компилятор. Переводить именно машинный код в ассемблер мне не приходилось ни разу. Чистый ассемблер полученный без оптимизаций компилятора, перемежающийся с исходным кодом и оптимизированный до неузнаваемости машинный код, который преобразован дизассемблером — это, как говорят в Одессе, 2 большие разницы. Страшно сказать, но первый моим дизассемблером стала Ghidra, та самая, которая родилась в недрах АНБ, но с недавних пор выложена в публичный доступ. Через пару дней мытарств и безуспешных поисков обращений к участкам памяти, которые чип MT7621 использует в качестве интерфейса взаимодействия и управления GPIO. У нас только вчера появился MT7621 ProgrammingGuide на английском, где все четко и понятно написано. А тогда у нас был исходный код ядра линукс с драйверами для MT7621 и какие-то обрывки данных с китайских сайтов на китайском языке. Это был поиск чего-то примерно такого, выполняющее что-то примерно этакое. Но удача любит смелых, поэтому она мне улыбнулась. Nicky F. написал, что нашел нужную функцию. Китаец hackpascal (Weijie Gao — автор breed) заботливо написал функцию, которая прямо первым аргументом брала в десятичном виде номер нужного GPIO. А ведь управление осуществляется установкой нужных битов, поэтому вполне могло быть что-то типа такого в исходном коде: Тут еще, поморщив брови, можно разобраться. Но чем это станет на ассемблере? Ведь тут код в виде MACRO, который компилятору попадает уже в виде просто чисел. Для наглядности покажу то место в коде breed. Я быстро сделал версии для обоих роутеров. Чик, чик и чудо случилось. Не пришлось даже сильно рисковать. Так как брид позволяет запустить себя без физической записи на чип памяти. Можно просто загрузить код в оперативную память и указать точку входа для запуска. Брид с работающей кнопкой сброса заработал. Затем я прошил его на место старого загрузчика и скрестив пальцы выключил и включил питание. Роутер включился, но к тому времени я уже несколько раз портил загрузчик и успешно перепаивал микросхему памяти. Паяльная станция стояла рядом, поэтому я переживал не сильно. ЗаключениеДенег мне за это не платят, в значительной степени я занимаюсь всем этим ради таких моментов. Когда своими руками и головой удается заставить что-то работать это непередаваемое чувство. И почти неважно что именно ты создаешь этими руками. Это может быть сделанная стяжка пола в квартире, замена дисплея на разбитом айфоне сестры. Упорный труд плюс успешный результат дает это чувство. Я много лет работал в офисе, там этого сильно меньше. Офисный планктон с 9 до 18 перекатывают ручку с одного конца стола на другой, потом покупает форд фокус или даже бмв и квартиру в ипотеку, а потом едет в ГОА искать смысл жизни. А я с китайской паяльной станцией ковыряюсь с микросхемой памяти в общем не сильно нужного мне роутера, но я делаю и от этого счастлив, чего и вам желаю. |