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

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

Модераторы:




Подписчики:


Владимир Лаврулин

nicomunet123

lukaville

Бася

Ed01

Sergevit

Тарас

FIR3MAN

flashstrong

ezhfan

Xela

demonizer

LIST

H3ku

STM32 bootloader

Neo

Олег

Михаил

Антон Бердов

Всего просмотров темы: 5422
Статистика просмотров за последние 7 дней:
2018-04-25 : 11
2018-04-24 : 19
2018-04-23 : 21
2018-04-22 : 23
2018-04-21 : 32
2018-04-20 : 22
2018-04-19 : 16
Форум / Электросамокаты Xiaomi / Разборка прошивки электросамоката Xiaomi M365
Владимир Лаврулин
Рейтинг: 1571
Член клуба
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
Рейтинг: 117
Член клуба
20 февраля 2017 в 22:02
nicomunet123
20 февраля 2017 в 22:02
Владимир, попобуйте посмотреть, куда MiHome лезет, когда ищет обновления. Это тоже будет полезно. 
0
Владимир Лаврулин
Рейтинг: 1571
Член клуба
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
Рейтинг: 117
Член клуба
03 марта 2017 в 23:32
nicomunet123
03 марта 2017 в 23:32
Не уверен я, что можно откатиться...

А пока я приблизительно понял, где запрос на сервер формируется в коде...​​
0
Владимир Лаврулин
Рейтинг: 1571
Член клуба
04 марта 2017 в 8:50
Владимир Лаврулин
04 марта 2017 в 8:50
[quote="nicomunet123"]А пока я приблизительно понял, где запрос на сервер формируется в коде...​​[/quote]
Так поделитесь, пожалуйста :)
0
Владимир Лаврулин
Рейтинг: 1571
Член клуба
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
0
nicomunet123
Рейтинг: 117
Член клуба
07 марта 2017 в 21:17
nicomunet123
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)​​​​
0
OLEG
Рейтинг: 34
09 марта 2017 в 16:25
OLEG
09 марта 2017 в 16:25
​​Найти Ninebot 3.5.1 не составило труда:
https://electro.club/data/users/2209/files/Ninebot351.rar

С процедурой даунгрейда тоже все понятно.​ Сложно будет разобрать, изменить и собрать прошивку в формате​​ bin. Как вы собираетесь это делать?
0
Владимир Лаврулин
Рейтинг: 1571
Член клуба
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! А мы вот ждем когда к этой затее присоединиться еще и хороший низкоуровневый программист :) У Вас, случайно, нет подобных навыков?

Ну и гугл нам в помощь, конечно...​​
0
OLEG
Рейтинг: 34
09 марта 2017 в 22:03
OLEG
09 марта 2017 в 22:03
Нет, к сожалению я не по этой части.
0
Владимир Лаврулин
Рейтинг: 1571
Член клуба
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
Гость
08 апреля 2017 в 0:34
lukaville
08 апреля 2017 в 0:34
Отписался на этом форуме:
 http://electrotransport.ru/ussr/index.php?topic=42849.msg1058294#msg1058294

Там есть ссылка на прошивку 1.3.0 и на proof-of-concept Android приложение, которое может отправлять запросы на самокат.
2
Владимир Лаврулин
Рейтинг: 1571
Член клуба
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
Тарас
Рейтинг: 39
18 августа 2017 в 9:52
Тарас
18 августа 2017 в 9:52
всем привет. все прошивки которые сдесь выложены, на MAIN плату,не рабочие! При прошивке контроллера - ноль!
как проверял? брал обсолутно новую плату выпаивал контроллер, дабы сохранить прошивку, запаивал новый - шил на выходе полный ноль. Новая плата полностью рабочая НО в ПО зашито другие серийники на что идет постоянный писк, а в Ninebot apk показывает ошибку серийкиков. При этом все работает, но скорость макс ~12кмч точно не смотрел.  
4
Ed01
Рейтинг: 358
08 февраля 2018 в 23:32
Ed01
08 февраля 2018 в 23:32
[quote="Тарас"]Новая плата полностью рабочая НО в ПО зашито другие серийники на что идет постоянный писк[/quote]

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


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


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


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

0
Тарас
Рейтинг: 39
10 февраля 2018 в 2:45
Тарас
10 февраля 2018 в 2:45

В srt32 нет eeprom.

0
Ed01
Рейтинг: 358
10 февраля 2018 в 3:30
Ed01
10 февраля 2018 в 3:30
[quote="Тарас"]В srt32 нет eeprom.[/quote]

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

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

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

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


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


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


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

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

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

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


Например:

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

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

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


2
demonizer
Рейтинг: 68
19 февраля 2018 в 23:30
demonizer
19 февраля 2018 в 23:30

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



3
Ed01
Рейтинг: 358
21 февраля 2018 в 8:12
Ed01
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
Рейтинг: 68
21 февраля 2018 в 11:56
demonizer
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

Добавить сообщение


25 апреля 2018 в 17:37

25 апреля 2018 в 17:37

Почему я могу писать сообщения даже без регистрации?

Отправить    Сохранить

Cообщение на форуме от Чебуратор
Всех приветствую. Тут кому как... Ремонтопригодность у...
Cообщение на форуме от Alex
Че-т ничё не понял. ну меня тоже однажды остановил...
Cообщение на форуме от Eldrian (Дмитрий)
Да даже на дуалтроне как то не особо комфортно, что...
Cообщение на форуме от Victor Baker
Кто нибудь в курсе что за датчик Холла стоит в...
Cообщение на форуме от Murat
А что за изменения в es2+ И es4+ ?
Cообщение на форуме от WoWgAmR
Наконец-то забрал с почты ленту. Цвет просто...
Cообщение на форуме от prafsha
Три дырки заткнёте сами а рулевую наверное могут...
Cообщение на форуме от prafsha
Я прям вижу картину: е тау бустер влетает передним...
Cообщение на форуме от Eldrian (Дмитрий)
Будем надеяться на лучшее)
Cообщение на форуме от prafsha
Кто знает как это сделано в европах?
Еще

Mister Big Joe601
!GENgroup576
Владимир Лаврулин549
oska429
Leo399

Inokim OX
Электросамокаты и ПДД
Общая тема форума о Xiaomi Mijia M365
Электросамокат Ninebot by Segway ES1/ES2
Покраска или светоотражающая лента
Общая тема по Speedway/Starway Mini
Заказ от 24.04.2018
Электросамокат Xiaomi Mijia M187
Hoverbot F-6 по акции
Дополнительные батареи для моноколес.