Разборка прошивки электросамоката Xiaomi M365

Форум / Электросамокаты / Электросамокаты Xiaomi / Разборка прошивки электросамоката Xiaomi M365
#прошивка
+
Настройки
Закладки
Транспорт
Укажите тэги для этой темы: аккумулятор аксессуары амортизация вопрос гидроизоляция закрыта запчасти кирпичи колеса модели модернизация мотор новости обслуживание отзывы поломка приложение прошивка свет тормоза узел складывания электрика электроника

Подписчики:

Всего просмотров темы: 25795
Статистика просмотров за последние 7 дней:
2018-10-17 : 24
2018-10-16 : 231
2018-10-15 : 124
2018-10-14 : 121
2018-10-13 : 115
2018-10-12 : 100
2018-10-11 : 159
Форум / Электросамокаты / Электросамокаты Xiaomi / Разборка прошивки электросамоката Xiaomi M365
Владимир Лаврулин
Москва
Рейтинг: 2232
Член клуба
Владимир Лаврулин
20 февраля 2017 в 14:38
Опубликовано: 20 февраля 2017 в 14:38
​​​Предлагаю здесь делиться информацией о прошивке и работе приложений для Xiaomi M365. 

Основная задача - сделать аппарат наиболее опциональным.
Чтобы ограничение максимальной скорости было опцией
Чтобы Zero-Start был опцией
​​Ну и т.д. и т.п. :)

Что сейчас есть:
1. История версий прош​​​ивки в txt:
https://electro.club/data/users/2193/files/Xiaomi/CNESCVersion.txt

2. Декомпилированный APK-файл приложения MiHome (одна из версией, распаковалась криво, но много познавательного кода имеется):
https://electro.club/data/users/2193/files/Xiaomi/MiHome_4.0.8_source_from_JADX.rar

 1   
nicomunet123
Рейтинг: 142
Член клуба
nicomunet123
20 февраля 2017 в 22:02
Опубликовано: 20 февраля 2017 в 22:02
Владимир, попобуйте посмотреть, куда MiHome лезет, когда ищет обновления. Это тоже будет полезно. 
Владимир Лаврулин
Москва
Рейтинг: 2232
Член клуба
Владимир Лаврулин
03 марта 2017 в 20:54
Опубликовано: 03 марта 2017 в 20:54
​Прошу прощения за такую задержку :) Никак не доходили руки поставить снифер на роутер.

В общем, лезет он на ​​58.83.160.17/app/home/latest_version
(домен api.io.mi.com)

Скрин во вложении.

Файл для Wireshark:​​​
https://electro.club/data/users/2193/files/Xiaomi/xiaomi-m365-check_firmware_ver.zip

Жду дальнейших инструкций :) Я понимаю, что лучше всего мне откатиться и перехватить все пакеты во время обновления. Но я пока не знаю как откатиться и чем это грозит :)​​

 2   
nicomunet123
Рейтинг: 142
Член клуба
nicomunet123
03 марта 2017 в 23:32
Опубликовано: 03 марта 2017 в 23:32
Не уверен я, что можно откатиться...

А пока я приблизительно понял, где запрос на сервер формируется в коде...​​
Владимир Лаврулин
Москва
Рейтинг: 2232
Член клуба
Владимир Лаврулин
04 марта 2017 в 8:50
Опубликовано: 04 марта 2017 в 8:50
[quote="nicomunet123"]А пока я приблизительно понял, где запрос на сервер формируется в коде...​​[/quote]
Так поделитесь, пожалуйста :)
Владимир Лаврулин
Москва
Рейтинг: 2232
Член клуба
Владимир Лаврулин
07 марта 2017 в 13:52
Опубликовано: 07 марта 2017 в 13:52
​Откатиться у владельцев NineBot Mini получалось не просто, но получалось. Возможно, к самокату такой же метод подойдет:
http://forum.electricunicycle.org/topic/4257-how-to-downgrade-your-ninebot-xiaomi-nine-9-segway-mini-mini-pro-from-128-to-117-firmware/

Для этого требовалось обмануть приложение, направить на свой сервер и подсунуть любую прошивку под видом последней версии. Просто подняв DNS-сервер и заменив адрес. Все необходимое они собрали в один файл и инструкцию:
https://electro.club/data/users/2193/files/Xiaomi/9BDgrader.rar

И главное! Использовать версию приложения ДО 3.6.0
Приведенные там ссылки на старые версии не работают, постараюсь еще где-то найти.

Инструкцию выложу отдельно:​
https://electro.club/data/users/2193/files/Xiaomi/NineBot%20Mini%20Downgrade%20Readme.pdf​​

Проблема только в том, что самих прошивок нет :) И, кстати, на сайте ninebot.cn все старые прошивки трутся (или они поменяли адрес?). В общем, сейчас их там нет.

На всякий случай дублирую то, что удалось найти nicomunet123 на наш сервер, чтобы никуда не делось :) Но пытаться обновиться до этой версии я не рискну :)
https://electro.club/data/users/2193/files/Xiaomi/ESC_Driver_V1.0.4.zip
nicomunet123
Рейтинг: 142
Член клуба
nicomunet123
07 марта 2017 в 21:17
Опубликовано: 07 марта 2017 в 21:17
Ответ пользователю
Владимир Лаврулин : 04 марта 2017 в 8:50
на это сообщение (развернуть)
[цитата nicomunet123] Так поделитесь, пожалуйста :)
[quote="nicomunet123"]А пока я приблизительно понял, где запрос на сервер формируется в коде...​​[/quote]
Так поделитесь, пожалуйста :)
​Новые все прошивки качаются с сайта Xiaomi. Ну я так понял.
Я просто вбил в поиске по коду строчки из WireShark'a...
Приблизительное место нашел, но потом что-то подзабыл об этом.
(http://electrotransport.ru/ussr/index.php?topic=43910.msg1029960#msg1029960)​​​​
OLEG
09 марта 2017 в 16:25
Опубликовано: 09 марта 2017 в 16:25
​​Найти Ninebot 3.5.1 не составило труда:
https://electro.club/data/users/2209/files/Ninebot351.rar

С процедурой даунгрейда тоже все понятно.​ Сложно будет разобрать, изменить и собрать прошивку в формате​​ bin. Как вы собираетесь это делать?
Владимир Лаврулин
Москва
Рейтинг: 2232
Член клуба
Владимир Лаврулин
09 марта 2017 в 16:54
Опубликовано: 09 марта 2017 в 16:54
Ответ пользователю
OLEG : 09 марта 2017 в 16:25
на это сообщение (развернуть)
​​Найти Ninebot 3.5.1 не составило труда: https://electro.club/data/users/2209/files/Ninebot351.rar С процедурой даунгрейда тоже все...
​​Найти Ninebot 3.5.1 не составило труда:
https://electro.club/data/users/2209/files/Ninebot351.rar

С процедурой даунгрейда тоже все понятно.​ Сложно будет разобрать, изменить и собрать прошивку в формате​​ bin. Как вы собираетесь это делать?
​Приветствую, OLEG! А мы вот ждем когда к этой затее присоединиться еще и хороший низкоуровневый программист :) У Вас, случайно, нет подобных навыков?

Ну и гугл нам в помощь, конечно...​​
OLEG
09 марта 2017 в 22:03
Опубликовано: 09 марта 2017 в 22:03
Нет, к сожалению я не по этой части.
Владимир Лаврулин
Москва
Рейтинг: 2232
Член клуба
Владимир Лаврулин
06 апреля 2017 в 10:22
Опубликовано: 06 апреля 2017 в 10:22
Ну вот с соседнего форума прилетели логи bluetooth обновления с 1.2.9 до 1.3.0

Снимались по этому методу:
http://stackoverflow.com/questions/23877761/sniffing-logging-your-own-android-bluetooth-traffic

Внутри два лога:
1. Соединение, обновление, отсоединение.
2. Соединение, отсоединение.

Файл копирую на наш диск для сохранности:
https://electro.club/data/users/2193/files/Xiaomi/xiaomi_bt_log.zip
 1   
lukaville
Рейтинг: 2
Гость
lukaville
08 апреля 2017 в 0:34
Опубликовано: 08 апреля 2017 в 0:34
Отписался на этом форуме:
 http://electrotransport.ru/ussr/index.php?topic=42849.msg1058294#msg1058294

Там есть ссылка на прошивку 1.3.0 и на proof-of-concept Android приложение, которое может отправлять запросы на самокат.
 2   
Владимир Лаврулин
Москва
Рейтинг: 2232
Член клуба
Владимир Лаврулин
08 апреля 2017 в 9:23
Опубликовано: 08 апреля 2017 в 9:23
lukaville, благодарю! :)

Ну и опять-таки, поскольку на электротранспорте все что касается прошивки находится в 10-ти сообщениях и разнесено в сотнях страниц 3-х разных тем, то я продолжаю пытаться соединить все в одно целое в этой теме :)

Перехваченный файл обновления представляет собой ZIP-архив:
https://electro.club/data/users/2193/files/Xiaomi/xiaomi_m365_update_130.zip

Также автором было разработано приложение, которое собирает все возможные значения. Рабочее название "Mijia Scooter Bluetooth Protocol Reverse Engineering" :) Исходники любезно предоставлены общественности:
https://github.com/lukaville/mijia-scooter-reverse-engineering

Вот перехваченный дамп, в котором сверху выделен серийный номер, снизу текущий заряд батареи.
[img]https://electro.club/data/users/2193/files/Xiaomi/xiaomi_bluetooth_data.jpg[/img]
https://electro.club/data/users/2193/files/Xiaomi/xiaomi_bluetooth_data.jpg


В целом проделана большая работа в этом направлении, автору однозначный респект! :)
 3   
Тарас
18 августа 2017 в 9:52
Опубликовано: 18 августа 2017 в 9:52
всем привет. все прошивки которые сдесь выложены, на MAIN плату,не рабочие! При прошивке контроллера - ноль!
как проверял? брал обсолутно новую плату выпаивал контроллер, дабы сохранить прошивку, запаивал новый - шил на выходе полный ноль. Новая плата полностью рабочая НО в ПО зашито другие серийники на что идет постоянный писк, а в Ninebot apk показывает ошибку серийкиков. При этом все работает, но скорость макс ~12кмч точно не смотрел.  
 4   
Ed01
08 февраля 2018 в 23:32
Опубликовано: 08 февраля 2018 в 23:32
[quote="Тарас"]Новая плата полностью рабочая НО в ПО зашито другие серийники на что идет постоянный писк[/quote]

Т.е был неактивированный контроллер? Вполне интересный результат.


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


Индивидуальные данные, возможно находятся в энергонезависимой памяти EEPROM (внутри чипа). Они похоже и отсутствуют.


Процесс обновления этих данных - есть Активация.  Вопрос лишь в том, затирается ли область EEPROM при снятии фьюза (защиты чипа ROP). То, что затирается прошивка во  Flash-памяти, это понятно. Но это другая область. Все ИМХО

Тарас
10 февраля 2018 в 2:45
Опубликовано: 10 февраля 2018 в 2:45

В srt32 нет eeprom.

Ed01
10 февраля 2018 в 3:30
Опубликовано: 10 февраля 2018 в 3:30
[quote="Тарас"]В srt32 нет eeprom.[/quote]

Точно. C STM8 перепутал. В STM8 3 вида памяти.

Тогда полная проблема. И в каких адресах активация, совершенно не известно (

 1   
demonizer
19 февраля 2018 в 23:15
Опубликовано: 19 февраля 2018 в 23:15
Ответ пользователю
Ed01 : 08 февраля 2018 в 23:32
на это сообщение (развернуть)
[цитата Тарас] Т.е был неактивированный контроллер? Вполне интересный результат.Серийный номер контроллера...
[quote="Тарас"]Новая плата полностью рабочая НО в ПО зашито другие серийники на что идет постоянный писк[/quote]

Т.е был неактивированный контроллер? Вполне интересный результат.


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


Индивидуальные данные, возможно находятся в энергонезависимой памяти EEPROM (внутри чипа). Они похоже и отсутствуют.


Процесс обновления этих данных - есть Активация.  Вопрос лишь в том, затирается ли область EEPROM при снятии фьюза (защиты чипа ROP). То, что затирается прошивка во  Flash-памяти, это понятно. Но это другая область. Все ИМХО

Думаю, имеется в виду новый контроллер с родным STM-ом.

Если залить прошивку в голый камень, скорее всего, результат и будет нулевым.

Вариантов программной защиты может быть много, даже с корректным бинарником.


Например:

В контроллере есть написанный xiaomi загрузчик (bootloader), размер которого мы заранее не знаем, Программа может проверять адрес своего начала и, в случае, если он будет отличаться от нужного, просто не входить в рабочий режим.

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

Ну это как вариант. Думаю, без дизассемблера здесь не обойтись. Буду качать ida и ковыряться.


 2   
demonizer
19 февраля 2018 в 23:30
Опубликовано: 19 февраля 2018 в 23:30

Хотя, врядли что-то закодировано, в бинарнике в явном виде просмативается :"FLASH_NAME" (46 4c 41 53 48 5f 4e 41). Врядли это простое совпадение



 3   
Ed01
21 февраля 2018 в 8:12
Опубликовано: 21 февраля 2018 в 8:12

BMS основана на микроконтроллере STM8L151K6T6.

Подключился к контактам не распаянного разьема через ST-Link. Он использует SWIM-интерфейс.


С помощью программы STVP посмотрел две БМС. Защита ROP не используется. Все фьюзы по умолчанию.

Прошивка хранится во Flash, серийный номер и прочее в EEPROM. В программе все данные разбиты по типам:

Program Memory, Data Memory и Оption Вyte. Это удобно для выборочной записи и чтения.


Слил дамп памяти сток-прошивок v1.0.7 и 1.1.5 в HEX-формате:

bms_program_memory_v1.0.7.zipbms_program_memory_v1.1.5.zip


Прошивки универсальны, а дамп EEPROM подходит только для родной БМС. Поэтому его не выкладываю.

Вероятно используется привязка к уникальному номеру чипа. Это плохо для ремонта, если слетит область данных или нужно поменять чип. Работать не будет, при прочих равных. А вот серийный номер батареи, можно поменять. Если слить свои данные и скорректировать их.


Откатил версию прошивки вперед и назад - все отлично. Прошивка не затрагивает область данных. Оставил v1.0.7

Поменял в прошивке число 7800 (0x1E78) на реальную емкость своей батареи. Оно там встречается 4 раза.

---

p.s Все действия на свой страх и риск. Если потерять содержимое области данных, можно потерять БМС.


 10   
demonizer
21 февраля 2018 в 11:56
Опубликовано: 21 февраля 2018 в 11:56
Ответ пользователю
Ed01 : 21 февраля 2018 в 8:12
на это сообщение (развернуть)
BMS основана на микроконтроллере STM8L151K6T6.Подключился к контактам не распаянного разьема через...

BMS основана на микроконтроллере STM8L151K6T6.

Подключился к контактам не распаянного разьема через ST-Link. Он использует SWIM-интерфейс.


С помощью программы STVP посмотрел две БМС. Защита ROP не используется. Все фьюзы по умолчанию.

Прошивка хранится во Flash, серийный номер и прочее в EEPROM. В программе все данные разбиты по типам:

Program Memory, Data Memory и Оption Вyte. Это удобно для выборочной записи и чтения.


Слил дамп памяти сток-прошивок v1.0.7 и 1.1.5 в HEX-формате:

bms_program_memory_v1.0.7.zipbms_program_memory_v1.1.5.zip


Прошивки универсальны, а дамп EEPROM подходит только для родной БМС. Поэтому его не выкладываю.

Вероятно используется привязка к уникальному номеру чипа. Это плохо для ремонта, если слетит область данных или нужно поменять чип. Работать не будет, при прочих равных. А вот серийный номер батареи, можно поменять. Если слить свои данные и скорректировать их.


Откатил версию прошивки вперед и назад - все отлично. Прошивка не затрагивает область данных. Оставил v1.0.7

Поменял в прошивке число 7800 (0x1E78) на реальную емкость своей батареи. Оно там встречается 4 раза.

---

p.s Все действия на свой страх и риск. Если потерять содержимое области данных, можно потерять БМС.

Очень интересная инфа, спасибо!.


По поводу прошивки контроллера, появилась мысль написать свою, в сущности, задача довольно тривиальная: Управление BLDC-мотором, примеров в сети валом, да и ST-шники выпустили апноуты. Обратная связь - датчики Холла + BackEMF.

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

Что потеряем: скорее всего, возможность обновления прошивки через штатное приложение.

Что приобретем: невероятно гибкую настройку, работу с любыми батареями без обманок, как минимум, сэкономится место в деке)

 5   


Cообщение на форуме от Conejo
Мог и ошибиться, но похоже состояние зарядки в шестом...
Cообщение на форуме от Фёдоров
Для спины главное тяжести не носить. Куго s319 км ходу,...
Cообщение на форуме от Стриж Баржулька
Да, я снял все амортизаторы, напихал (умеренно) Литола...
Cообщение на форуме от Фёдоров
У вас как раз такой koogишь? Выглядит добротно, курок...
Cообщение на форуме от Symbiosis
Да в основном собираю суб или вск.  Всегда можно...
Cообщение на форуме от ded54
В следующем?..  :(  Жаль что по субботам покатушки...
Cообщение на форуме от Symbiosis
Думаю обязательно еще приедем в след сезон ! Оч круто у...
Cообщение на форуме от ASA1951
Привет. коллега!  Да я с этой группой столкнулся...
Cообщение на форуме от ded54
Здорово, жаль, что не смог...
Cообщение на форуме от Чебуратор
Доброго времени суток. Попробуйте посмотреть вот...
Еще
Разборка прошивки электросамоката Xiaomi M365
До работы и обратно
Halten 1200
Как выбрать электросамокат (общая тема)
Суббота 13 октября Царское село
Кто снимает свои покатушки на видео?
Speedway 3 Mini Pro и прочая хрень с Авито
2018.10.13 - Закрытие сезона. Покатушка и шашлыки.
Принципиальная схема драйвера мк Xiaomi M365
Kugoo m4