Xiaomi Gateway (eu version — Lumi.gateway.mieu01 ) Hacked

    Xiaomi Zigbee Gateway Hack

    В этой статье я хочу поделится с Вами своими наработками и достигнутыми успехами в разборе Xiaomi шлюза (Версия с евровилкой с беру.ру). Расскажу как установить на него альтернативное ПО, как восстанавливать шлюз с затертым софтом и даже оживлять шлюз с затертым u-boot.

    ---------МНОГО КАРТИНОК-------------



    В первую очередь расскажу как подключится к плате шлюза и получить рут.

    Для начала немного подробностей про шлюз.

    В данной статье рассматривается версия шлюза построенная на процессоре imx6ull.

    Немного технических характеристик платы:

    • Wifi RTL8723BS — драйвер от него почему то подгружается отдельно.
    • CPU IMX6ULL
    • RAM 256 mb
    • ROM 256 mb
    • Модуль ZIgbee на базе JN5169.

    На плате выведены служебные пятаки, P2 и P4. В идеале они сделаны под погопины, но к ним проще подпаятся.

    P2 — это уарт 0 процессора куда выводится вся служебная информация, бутлог uboot и управление системой, можно использовать любой usb-uart адаптер.

    P4 — USB OTG, который используется для заливки прошивки в nand. (Как полноценный OTG до конца я не смог его запустить, при подключении устройство определяется, но видимо чего то еще не хватает).



    К пятакам P4 идельно подходит китайская плата usb переходника.



    После того как все распаяно и подключено в первую очередь нужно получить root.

    Я делал по этой инструкции (ссылка на мануал) но с небольшими уточнениями после пункта 5 необходимо набрать команду boot иначе система сидит и ждет команду, инструкцию видимо писали с надеждой что все разбираются в линуксах.

    SSH сервер тоже по инструкции почему то не включился и включался только запуском вручную, команда для запуска /etc/init.d/dropbear start

    Следующим этапом после получения рута я скопировал содержимое системы с помощью WinScp (при создании подключения выбираем режим SCP).

    Дальше по хорошему нужно выполнить бэкап полной системы, на случай если эксперименты приведут к печальным последствиям (как у меня и произошло, а бэкап я не сделал)

    Флеш память шлюза разбита на 4 раздела.



    Свободного места как оказалось тоже не очень много, при этом в памяти очень много различных дубликатов файлов.



    Поигравшись пару часиков я что-то изменил в софте и шлюз перестал загружаться :)

    Теперь давайте разберемся как оживлять данную железку и заливать в нее все что угодно.
    Выполнять действия только в том случаем если у вас кирпич!


    Процессор Imx6ULL содержит всю информацию в открытом виде, все датащиты и референс мануалы доступны на сайте производителя после регистрации.

    U-boot у меня еще грузился… Но пока я пытался восстановить случайно скопировал лишнюю команду и затер целиком нанд. А u-boot как оказалось находился в нанде. И получил кирпич.

    Процессор поддерживает различные режимы загрузки. В референс мануале они все описаны.



    На девелоперских платах обычно ставят переключатели, но тут ничего подобного нет. В датащите описано какие это конкретно пятаки процессора.



    И тут китайцы сделали тоже очень приятный подарок. Они вывели их в очень удобное место и почти подписали )

    На плате рядом с процессором распаяно два резистора, куда как раз подходят пины boot-mode.



    Эти два резистора как раз и являются переключателями boot режимов, по умолчанию стоит на нанд, но сдвинув каждый из них в бок мы получим режим сериал бута.

    Свой шлюз я перевел в сериал бут моде, в некотором роде этот режим удобнее тестировать различные прошивки.

    Для заливки прошивки используется фирменная утилита от NXP mfgtools. Единственное в ней требуется подготовить профиль под процессор.

    Скачиваем mfgtools. В архиве уже подготовленная версия со всеми необходимыми настройками.

    Подключаем шлюз по USB. В serial boot режиме шлюз будет пытаться загрузить прошивку через USB интерфейс и на компьютере появится новое устройство HID.

    Mfgtools в свою очередь сообщит что видит новое устройство.



    Иногда компьютер его не видит, с чем именно связано сказать не могу.

    После того как утилита его увидила нажимаем Start, и начнется процесс загрузки прошивки.
    Утилита отформатирует нанд, зальет новый убут, ядро, дтб и рутфс. Рутфс входящий в архив был собран товарищем Aleksandr Faronov, он собрал чистую сборку линукса на Yocto. Разделы U-boot, Kernel, DTB были выдернуты из родной прошивки шлюза.

    В этой сборке линукса загрузится только чистая система, больше там ничего не будет (зигби тоже пока не работает).

    После того как утилита отработает в моем случае шлюз ничего делать не будет и грузится тоже, потому что как мы помним процессор в сериал бут моде.

    Поэтому ему нужно дать загрзочный образ U-boot. В архиве с mfgtools лежит дополнительная утилитка uuu которая выполняет загрузку U-boot в Ram платы, перейдем в папку ее содержащую.
    Закрываем mfgtools и переподключаем шлюз по новой, устройство HID снова должно определится, после выполняем команду.

    uuu u-boot-small.imx

    Плата начнет загружаться, но так как env у нее нет то встанет после загрузку U-boot. В консоли шлюза выполняем две команды, прописываем ENV для загрузки.

    setenv bootargs 'console=ttymxc0,115200 ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs cma=96M mtdparts=gpmi-nand:3m(boot),7m(kernel),1m(dtb),-(rootfs)'

    и стартуем загрузку boot начнется загрузка шлюза с нанда и с той прошивки которую мы залили.



    По большому счету на этом все. В mfgtools в папке \Profiles\Linux\OS Firmware\files лежат все файлы прошивки, подменив которые можно загружать любую совместимую систему. Я пробовал загружать openwrt.



    Система грузится, но я до конца не разобрался как подсунуть нужное ядро, и где его взять.

    Надеюсь совместными усилиями мы все таки доведем данный шлюз до логического завершения )
    Бэкап директорий шлюза. Телеграм для обсуждения.

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 27

      +2
      Когда рассказываете про устройства xiaomi (шлюзы, выключатели и прочее), пожалуйста, указывайте их внутренние названия. Иначе те, кто попробуют повторить ваши шаги, просто убьют своё устройство.
      Ваш шлюз — lumi.gateway.mieu01
        +2
        Изменил заголовок
          +2
          Я бы добавил еще и артикульный код, чтобы наверняка: DGNWG05LM.
            0
            А вот это как раз не наверняка, потому что с таким артикулом бывают два типа устройств. Одно позволяет разблокировать работу в локальной сети просто через пару команд через припаянную консоль, а другое — это, в котором локальной работы нет совсем. Можно только подменить файл исполняемый на написанный энтузиастами, что позволит использовать часть функций через специальные модули.
              0
              Вы с DGNWG02LM путаете. 05-е насколько я знаю вообще никакие не разблокируются.
                0
                Это как раз 5-й как оказалось
                  0
                  02-й с китайской вилкой, 05-й с европейской.
                    0
                    Насколько помню, натыкался давно на отзывы, что 05 разблокировались через UART ранее нормально, а потом уже пошли новые версии, где это стало невозможно.
                      0
                      Я на такое только в отношении 02 натыкался, про 05 не видел.
            0

            не смогут :) Там нет этих точек подключения.

              0
              Да точно таких нет, но есть крайне похожие. И с китайцев станется выпустить ещё новую похожую плату в будущем, а статья так останется на хабре.
              С указанием конкретного кода устройства таких проблем уже нет.
                0

                Например? Предыдущая версия отличается значительно.

                0
                Я думаю, умельцы найдутся. Так что все верно указали
                0
                может есть где место в котором собрана вся информация подобного рода?
                пока выяснили что DGNWG05LM, ZHWG11LM внутри одинаковые
                  0
                  Увы, не видел ни одного полного источника. Везде только обрывки информации типа «Я нашёл такое-то устройство, выглядит так-то, маркировки такие-то»,
                +1
                Наибольший интерес конечно ZigBee шлюз представляет, чтоб можно было вместе с Home Assistant и т.п. использовать. В отличие от DGNWG02LM разблокировать управление из локальной сети на нём до последнего не было возможным.
                  0
                  Отличная новость! У меня в плане его купить, розетка уже сделана под потолком в стратегическом месте — чтобы зигби добивал везде. И заодно как аварийный уведомлятор о событиях, типа протечки, будет. Откладывал покупку т.к. там стоит черт знает что и черт знает куда подключено. Ленар, спасибо за проделанную работу, надеюсь получится подсунуть «правильное» ядро.
                    +1
                    Если ещё не куплено — можно просто поставить raspberry pi с zigbee донглом, это будет надёжнее и удобнее.
                      –1
                      У меня розетка на видном месте. Красивая белая шайба — одно дело. А вот raspberry в каком корпусе втыкать? Чтобы и БП внутри был, и гладенько-хайтечно всё? Супруга стимпанк в прихожей не одобрит )))
                        0
                        Посмотрите в сторону шлюза SLS (https://github.com/slsys/Gateway). Это конечно пока «девайс для гиков», но у меня на нем висит больше 20 Zigbee устройств, без особых глюков. Сейчас даже Lua скрипты завезли для простеньких автоматизаций, если основная система ушла в оффлайн.
                        У меня он правда в отдельном корпусе, но у многих работает и в родном Xiaomi шлюзе.
                      0

                      Эта железяка довольно дохлая, умный дом там нормально завести не получится. Хотя как zigbee шлюз можно.

                        0
                        Именно как шлюз, сам сервер будет в серверной на десктопном железе. Еще он умеет лампочками мигать и есть динамик для оповещений, осталось только всё это взять под контроль, т.е. отобрать контроль у дядюшки Ли.
                          0
                          уже все взято и отобранно :), портировали ZESP на него для работы с сторонними зигби устройствами, ну и работу со звуком и светом прокинули в мктт, так же умеет теперь работать как колоночка для Logitech Media Server
                      0
                      Система грузится, но я до конца не разобрался как подсунуть нужное ядро, и где его взять.

                      Собрать самому. Копать в сторону openwrt-imagebuilder
                      http://downloads.openwrt.org/
                      http://downloads.openwrt.org/releases/19.07.2/targets/imx6/generic/
                      http://downloads.openwrt.org/snapshots/targets/imx6/generic/
                      https://openwrt.org/docs/guide-user/additional-software/imagebuilder

                        0
                        Ленар, имеется данный шлюз, купил его в наборе с двумя датчиками открытия дверей, двумя датчиками движения и кнопкой. Сей комплект планируется использовать в системе умного дома под управлением Home Assistant.
                        Сделано следующее:

                        Получен root доступ, по инструкции этого парня community.openhab.org/u/cadavre

                        настроен автоматический старт SSH:
                        cd /etc
                        nano rc.local

                        #/home/root/gw 2>&1 &
                        /etc/init.d/dropbear start — добавляете эту строчку в файл rc.local
                        /home/root/fac/fac_test

                        закинул кастомный файл miio_client, (взял здесь github.com/roth-m/miioclient-mqtt/tree/master/miio_client) запускал его командой:
                        killall miio_client && /tmp/miio_client

                        Шлюз добавился в Home Assistant (нужно использовать custom component github.com/Frank802/miio_gateway)

                        но, естественно, после рестарта шлюза команду требуется выполнять повторно,
                        поэтому, согласно одной из рекомендаций добавил эти строки в rc.local:

                        sleep 20
                        killall miio_client && /home/root/miio_client

                        Сначала ничего не происходило совсем, но я поигрался с синтаксисом и шлюз перестал загружаться, повторная подпайка к P2 показала что он завис в boot, выполнение команды boot позволило загрузить шлюз, но он перестал цепляться к WIFI и реагировать на нажатие кнопки. Проверка файла rc.local показала, что файл пустой (к счастью я сделал бэкап).

                        Если вам требуется полный бэкап системы готов его предоставить (только подскажите как его сделать).
                          0
                          Нашел информацию куда добавить
                          sleep 20
                          killall miio_client && /home/root/miio_client

                          (да, кастомный файл miio_client, соответственно, должен лежать в директории root и мне пришлось изменить на него права доступа chmod 744 miio_client)

                          необходимо вставить эти строки в файл start_ot.sh (/lumi/app/miio), после этого файл будет выглядеть следующим образом:

                          #!/bin/sh

                          cd /lumi/app/miio
                          #./wifi_start.lumi_gw.sh &
                          /lumi/app/miio/wifi_start.sh &
                          ./miio_client -l 0 -d /lumi/conf &
                          ./miio_client_helper_nomqtt.sh /lumi/conf &

                          sleep 20
                          killall miio_client && /home/root/miio_client

                          Сейчас всё работает просто замечательно, даже после перезагрузки шлюза.

                          Пробовал сделать для вас полный бэкап системы, при помощи winscp. Но, не позволяет скопировать некоторые папки: dev, sys, var.

                          Чтобы скопировать все полностью, наверное будет необходимо подпаять провода к микросхеме памяти и, например, адаптеру для micro SD карты, чтобы скопировать как с обычной флешки (читал о подобной манипуляции для ремонта LCD телевизора).
                          Что посоветуете?

                          Если скопированных файлов достаточно могу выложить на google disk.
                            0
                            На самом деле там все намного проще и бэкап системы уже сделан. Зайдите в телеграмм канал, там все раскажут.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое