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

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

Подписчики:


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

nicomunet123

lukaville

Бася

Ed01

Sergevit

Тарас

FIR3MAN

flashstrong

ezhfan

Xela

demonizer

LIST

H3ku

STM32 bootloader

Neo

Олег

Михаил

Антон Бердов

Andrey

Alex_VI

pradeep

Андрей

Дмитрий

Всего просмотров темы: 8155
Статистика просмотров за последние 7 дней:
2018-07-21 : 33
2018-07-20 : 52
2018-07-19 : 45
2018-07-18 : 48
2018-07-18 : 1
2018-07-18 : 1
2018-07-18 : 1
Форум / Электросамокаты Xiaomi / Разборка прошивки электросамоката Xiaomi M365
Владимир Лаврулин
Рейтинг: 1833
Член клуба
Владимир Лаврулин
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
Рейтинг: 123
Член клуба
nicomunet123
20 февраля 2017 в 22:02
Опубликовано: 20 февраля 2017 в 22:02
Владимир, попобуйте посмотреть, куда MiHome лезет, когда ищет обновления. Это тоже будет полезно. 
0
Владимир Лаврулин
Рейтинг: 1833
Член клуба
Владимир Лаврулин
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
Рейтинг: 123
Член клуба
nicomunet123
03 марта 2017 в 23:32
Опубликовано: 03 марта 2017 в 23:32
Не уверен я, что можно откатиться...

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

С процедурой даунгрейда тоже все понятно.​ Сложно будет разобрать, изменить и собрать прошивку в формате​​ bin. Как вы собираетесь это делать?
0
Владимир Лаврулин
Рейтинг: 1833
Член клуба
Владимир Лаврулин
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
Рейтинг: 35
OLEG
09 марта 2017 в 22:03
Опубликовано: 09 марта 2017 в 22:03
Нет, к сожалению я не по этой части.
0
Владимир Лаврулин
Рейтинг: 1833
Член клуба
Владимир Лаврулин
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
Владимир Лаврулин
Рейтинг: 1833
Член клуба
Владимир Лаврулин
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
Тарас
Рейтинг: 42
Тарас
18 августа 2017 в 9:52
Опубликовано: 18 августа 2017 в 9:52
всем привет. все прошивки которые сдесь выложены, на MAIN плату,не рабочие! При прошивке контроллера - ноль!
как проверял? брал обсолутно новую плату выпаивал контроллер, дабы сохранить прошивку, запаивал новый - шил на выходе полный ноль. Новая плата полностью рабочая НО в ПО зашито другие серийники на что идет постоянный писк, а в Ninebot apk показывает ошибку серийкиков. При этом все работает, но скорость макс ~12кмч точно не смотрел.  
4
Ed01
Рейтинг: 361
Ed01
08 февраля 2018 в 23:32
Опубликовано: 08 февраля 2018 в 23:32
[quote="Тарас"]Новая плата полностью рабочая НО в ПО зашито другие серийники на что идет постоянный писк[/quote]

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


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


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


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

0
Тарас
Рейтинг: 42
Тарас
10 февраля 2018 в 2:45
Опубликовано: 10 февраля 2018 в 2:45

В srt32 нет eeprom.

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

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

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

1
demonizer
Рейтинг: 72
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
Рейтинг: 72
demonizer
19 февраля 2018 в 23:30
Опубликовано: 19 февраля 2018 в 23:30

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



3
Ed01
Рейтинг: 361
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
Рейтинг: 72
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

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



21 июля 2018 в 20:04

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

Отправить    Редактор    Сохранить

Cообщение на форуме от Виталий
Всем привет, очень хочу купить этот самокат в подарок...
Cообщение на форуме от Денис
Понял)) В защиту скажу одно: он же маленький )) 12 дюймов...
Cообщение на форуме от Leo
Конешно ) Но только основная активность по покатушкам...
Cообщение на форуме от HYUGO
привет народ отзывается на покатушки???
Cообщение на форуме от HYUGO
а забыл выключить...и хотел гостю написать да не туда...
Cообщение на форуме от grego71
Всем доброго дня! Подскажите, кто знает, начала...
Cообщение на форуме от Борян
Ну короче эти джекхоты как выяснилось все капец какие...
Cообщение на форуме от Рукожоп
Там офигенная латунная гайка рядом с никак не...
Cообщение на форуме от Чебуратор
Нагрев покрышек колеса это и есть трение, выше...
Cообщение на форуме от sergey230
Здравствуйте, таже проблема, есть ли схема чтоб было...
Еще
Общая тема Kugoo S2
Электромотоцикл
Встречи электросамокатов в Москве
Jack Hot отключается
Xiaomi Mijia M365 Прошивка сяоката на кастомную версию 1000w до 32 км/ч
citycoco harley
Проблема с ходовым колесом
Установка антипрокольной бескамерной покрышки 14*2.5"
Выбираем моноколесо
Зарядка в здании финляндского вокзала рядом с бургер кингом