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

Форум / Электротранспорт / Электросамокаты / Xiaomi Mijia Electric Scooter / Разборка прошивки электросамоката Xiaomi M365
#прошивка
Форум / Электротранспорт / Электросамокаты / Xiaomi Mijia Electric Scooter / Разборка прошивки электросамоката Xiaomi M365
Open header post
demonizer
Участник
Rating: 78
demonizer
25 february 2018, 7:27
Posted: 25 february 2018, 7:27
Ответ пользователю
LIST : 25 february 2018, 2:45
на это сообщение (развернуть)
Очень интересная тема! Если бы пол года  - мес 8 назад начал читать подобное - вправда поверил бы, что это...

Очень интересная тема! Если бы пол года  - мес 8 назад начал читать подобное - вправда поверил бы, что это возможно.

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

держитесь парни - я с вами!

Всем добра! :))

А мы все равно попробуем.)))


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

 2   
Ed01
Продвинутый форумчанин
Rating: 584
Ed01
25 february 2018, 15:56
Posted: 25 february 2018, 15:56

Вот есть такая Ардуинка на чипе в точности как в контроллере.

https://ru.aliexpress.com/item/STM32F103C8T6-STM32-ARM-Cortex-M3-Minimum-System-Development-Board/32802556794.html



Когда заказывал, зачем-то взял с STM-firmware. А нужно было Arduino Boot Solder. Было бы полегче.

Answers: 1
demonizer
Участник
Rating: 78
demonizer
25 february 2018, 16:00
Posted: 25 february 2018, 16:00
Ответ пользователю
Ed01 : 25 february 2018, 15:56
на это сообщение (развернуть)
Вот есть такая Ардуинка на чипе в точности как в...

Вот есть такая Ардуинка на чипе в точности как в контроллере.

https://ru.aliexpress.com/item/STM32F103C8T6-STM32-ARM-Cortex-M3-Minimum-System-Development-Board/32802556794.html



Когда заказывал, зачем-то взял с STM-firmware. А нужно было Arduino Boot Solder. Было бы полегче.

Да ну, какая ардуинка? Это всего лишь макетка на stm32f103c8 )))))

Да, есть такая, какая разница, какой загрузчик в неё залит?)))



 1   
Ed01
Продвинутый форумчанин
Rating: 584
Ed01
25 february 2018, 16:15
Posted: 25 february 2018, 16:15

Когда оригинальный чип установлен на программатор, о работе прошивки можно судить по мигающему светодиоду. Он коммутируется перемычкой на ногу "6". В оригинале это зеленый светодиод контроллера. Источник схемы контроллера: https://electro.club/f/30490

Answers: 1
demonizer
Участник
Rating: 78
demonizer
25 february 2018, 16:17
Posted: 25 february 2018, 16:17
Ответ пользователю
Ed01 : 25 february 2018, 16:15
на это сообщение (развернуть)
[attachment=8083]Когда оригинальный чип установлен на программатор, о работе прошивки можно судить по мигающему...

Когда оригинальный чип установлен на программатор, о работе прошивки можно судить по мигающему светодиоду. Он коммутируется перемычкой на ногу "6". В оригинале это зеленый светодиод контроллера. Источник схемы контроллера: https://electro.club/f/30490

Это и так понятно, но я пошёл дальше-поменял чипы местами;)

Ed01
Продвинутый форумчанин
Rating: 584
Ed01
25 february 2018, 16:24
Posted: 25 february 2018, 16:24

Зашита от считывания прошивки stm32:

http://tqfp.org/stm32/zashita-ot-schityvaniya-proshivki-stm32.html

И цитата из комментариев к статье:

спойлер

demonizer
Участник
Rating: 78
demonizer
25 february 2018, 16:38
Posted: 25 february 2018, 16:38

Много букав, у меня мысль такая: я притворяюсь  не обновлённым контроллером и заставляю приложение скачать и скормить мне бинарник, потом ковыряюсь с бинарником, нахожу привязку к железу, модифицирую  под свой серийник и заливают в чистый камень на контроллере

 2   
Ed01
Продвинутый форумчанин
Rating: 584
Ed01
25 february 2018, 17:47
Posted: 25 february 2018, 17:47
[quote="demonizer"]Да, есть такая, какая разница, какой загрузчик в неё залит?)))[/quote]

В среде Arduino IDE как-то полегче. Мы ее немного проходили ковыряясь с обманкой. Но загрузчик, конечно можно и заменить.

[quote="demonizer"]Это и так понятно, но я пошёл дальше-поменял чипы местами;)[/quote]

Паять их сложно. Печать того и гляди отвалиться. Особенно это касается БМС. Да и лак мешает. Отмачивал в ацетоне.

А следы неотмытого лака помогает увидеть УФ-фонарик.

[quote="demonizer"] потом ковыряюсь с бинарником, нахожу привязку к железу, модифицирую  под свой серийник и заливают в чистый камень на контроллере[/quote]

А как же бут? Его не передают "по воздуху". Тогда нужно будет искать точку входа в бинарнике. Чтобы запустить прошивку без бута.

Answers: 1
demonizer
Участник
Rating: 78
demonizer
25 february 2018, 17:55
Posted: 25 february 2018, 17:55
Ответ пользователю
Ed01 : 25 february 2018, 17:47
на это сообщение (развернуть)
[цитата demonizer] В среде Arduino IDE как-то полегче. Мы ее немного проходили ковыряясь с обманкой. Но загрузчик,...
[quote="demonizer"]Да, есть такая, какая разница, какой загрузчик в неё залит?)))[/quote]

В среде Arduino IDE как-то полегче. Мы ее немного проходили ковыряясь с обманкой. Но загрузчик, конечно можно и заменить.

[quote="demonizer"]Это и так понятно, но я пошёл дальше-поменял чипы местами;)[/quote]

Паять их сложно. Печать того и гляди отвалиться. Особенно это касается БМС. Да и лак мешает. Отмачивал в ацетоне.

А следы неотмытого лака помогает увидеть УФ-фонарик.

[quote="demonizer"] потом ковыряюсь с бинарником, нахожу привязку к железу, модифицирую  под свой серийник и заливают в чистый камень на контроллере[/quote]

А как же бут? Его не передают "по воздуху". Тогда нужно будет искать точку входа в бинарнике. Чтобы запустить прошивку без бута.

Феном сдувается прямо с лаком, все норм, паял уже два раза туда-обратно.


Можно и без бута запустить, думаю, посмотрим.


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

 2   
Ed01
Продвинутый форумчанин
Rating: 584
Ed01
25 february 2018, 18:05
Posted: 25 february 2018, 18:05
[quote="demonizer"]Если лить прошивку, ардуиновский бут, все равно, похерится.[/quote]

Да точно, он же во Flash будет мешать. Спасибо

demonizer
Участник
Rating: 78
demonizer
26 february 2018, 0:01
Posted: 26 february 2018, 0:01

На данном этапе, макетка на 8-й меге, притворяется контроллером, корректная связь есть, все ок. Завтра разберусь с запросом прошивки и, возможно, солью бинарник 1.3.4


 3   
H3ku
Гость
Rating: 3
H3ku
02 march 2018, 20:32
Posted: 02 march 2018, 20:32

Hi, sorry for write in English but I don't know Russian.


I want to share my progress with the reversing of the Mi Home app, I managed to cipher and decipher all messages from the app to the server an same in opposite direction, the problem is that I don't have access to an outdated scooter so I cant capture the traffic in the update process (check if there are any updates etc). So maybe if someone can share a traffic capture with all of this information we can make a fake server like with the older ninebots products.


Just to mention that in Android all the packets contain the necessary information to perform the decipher but in the case of IOS part of the key its only available on one of the responses from the login process.


Hers all the information.

https://github.com/h3ku/Unleash-the-m365

 3   
Ed01
Продвинутый форумчанин
Rating: 584
Ed01
02 march 2018, 21:10
Posted: 02 march 2018, 21:10

Со стороны чипа. Попробовал написать такой скетч: При первом запуске программа устанавливает защиту на чип. При втором снимает ее изнутри. И.т.д по кольцу.

спойлер

Как оказалась, на втором шаге, вместе с защитой удаляются и все данные Flash. Причем, вместе с самой программой)

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

Answers: 2
 1   
Vladimir Lavrulin
Раздаю лайки
МоскваRating: 4826
Vladimir Lavrulin
02 march 2018, 21:24
Posted: 02 march 2018, 21:24
Ответ пользователю
Ed01 : 02 march 2018, 21:10
на это сообщение (развернуть)
Со стороны чипа. Попробовал написать такой скетч: При первом запуске программа устанавливает защиту на чип....

Со стороны чипа. Попробовал написать такой скетч: При первом запуске программа устанавливает защиту на чип. При втором снимает ее изнутри. И.т.д по кольцу.

спойлер

Как оказалась, на втором шаге, вместе с защитой удаляются и все данные Flash. Причем, вместе с самой программой)

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

Оффтопну. Просто для справки: благодаря нескольким темам (включая эту) совсем недавно была добавлена полезная фича: https://electro.club/f/31719

:)))


 1   
demonizer
Участник
Rating: 78
demonizer
02 march 2018, 21:52
Posted: 02 march 2018, 21:52
Ответ пользователю
Ed01 : 02 march 2018, 21:10
на это сообщение (развернуть)
Со стороны чипа. Попробовал написать такой скетч: При первом запуске программа устанавливает защиту на чип....

Со стороны чипа. Попробовал написать такой скетч: При первом запуске программа устанавливает защиту на чип. При втором снимает ее изнутри. И.т.д по кольцу.

спойлер

Как оказалась, на втором шаге, вместе с защитой удаляются и все данные Flash. Причем, вместе с самой программой)

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

Нене, этот механизм защит железной, не важно, как разлочивать чип, изнутри или снаружи, флеш потрется.

 1   
Ed01
Продвинутый форумчанин
Rating: 584
Ed01
02 march 2018, 21:55
Posted: 02 march 2018, 21:55

Шаг назад. О BMS и ее чипе:

8230-84.jpgВзял чистый чип STM8 и поставил на программатор. Программатор - это в общем-то слот для чипа с разводкой на внешние пины (чтобы  не паять). С помощью ST-Link залил в чип полную прошивку БМС (клон).

8231-84.jpgЧип на программаторе (без платы БМС) работает. На запросы из терминалки дает осмысленные ответы.

8232-84.jpgПоданы сигналы: 3.3v (8) и общий провод (7). RX и TХ - соответственно 27 и 28 пины.


Подключил эту конструкцию к самокату вместо БМС. Результат оказался неожиданным: Самокат не пищит, дает полную скорость и тормоз работает. Только на странице приложения, статус батареи - error и abnormal.


8233-84.jpg8234-84.jpg8235-84.jpg


Раннее было известно, что если поменять местами образы EEPROM между двумя батареями, то обе будут пищать ошибку пароля БМС. Делал предположение, что привязка идет к чип ID STM8. А не к BQ-шке ли они привязаны?


Образы EEPROM двух батареек в HEX:

bms_data_memory_bat1.zipbms_data_memory_bat2.zip


Удобный конвертер из HEX в BIN и обратно: http://advantex.ru/joom/content/view/78/86/

----

Но главное, что чип БМС можно запустить на столе.

 1   
Neo
Гость
Rating: 9
Neo
03 march 2018, 1:41
Posted: 03 march 2018, 1:41

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


Ed01, вы говорите, что ограничение скорости активируется в прошивке BMS, а не в основном контроллере?


Что касается основного контроллера, если невозможно считывать данные вспышки STM32F1, возможно, мы сможем использовать альтернативный загрузчик для запуска двоичного пространства прикладного пространства?

Этот загрузчик для STM32: https://github.com/akospasztor/stm32-bootloader
Он даже поддерживает обновление прошивки OTA, как загрузчик M365.


Кстати, я успешно разобрал двоичный файл V1.3.0 для набора инструкций ARMv7, но я не могу от него никакого смысла.


Нам нужен способ запустить его в эмуляции / новом чипе, чтобы можно было сориентироваться в процедурах.
У кого-нибудь есть такой опыт?

 2   
Ed01
Продвинутый форумчанин
Rating: 584
Ed01
03 march 2018, 2:03
Posted: 03 march 2018, 2:03
[quote="Neo"]Ed01, вы говорите, что ограничение скорости активируется в прошивке BMS, а не в основном контроллере?[/quote]

В основном контроллере, конечно же. Имелось ввиду, что нет ограничения в 12км/ч, как обычно это бывает при ошибках BMS. Там просто screenshot на холостом ходу.

 2   
Neo
Гость
Rating: 9
Neo
06 march 2018, 22:39
Posted: 06 march 2018, 22:39

ENGLISH HERE: https://gist.github.com/losnir/78fae7e6cbb8cebf952bac8139beb258

----


Вчера это видео было загружено на youtube:



Некоторая группа испанских хакеров (я думаю?) Нашла способ взломать прошивку и даже написала приложение для Android, чтобы запустить взломанную прошивку и / или понизить рейтинг.


Детали:

Спойлер


Я не знаю, если это правда, но люди в комментариях говорят, что это просочившаяся версия прошивки DOC-HELLO (LIST?).
Он основан на V1.3.0 скутера.


Есть две взломанные версии:


- 200CFW (Максимальный 1000 Вт для двигателя, НЕ РЕКОМЕНДУЕТСЯ)
- 200CFW_W (Максимальный 800 Вт для двигателя, РЕКОМЕНДУЕТСЯ)


Они говорят, что НЕ рекомендуется использовать 1000W CFW, потому что он может повредить скутер, лучше использовать CFW 800W, потому что он безопаснее (менее требовательный).


---- РАЗБОРКА ----


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

Между CFW100 и CFW_W800 есть только несколько изменений, которые, я думаю, являются максимальными ограничениями мощности двигателя.
В коде сборки он показывает 5 раз в этих адресах:


(Из оригинальной прошивки V1.3.0)

0x00004e1e movw r2, # 0xc977
0x00004e26 movw r1, # 0xc977
0x00004e3e movw r2, # 0xc977
0x00004e46 movw r1, # 0xc977
0x00004e5c movw r3, # 0xc977


Процедура ARMv7m:

void sub_4dec (int arg0, int arg1, int arg2) {
    r2 = arg2;
    r12 = * (int8_t *) 0x20000610;
    r7 = 0x20000610;
    asm {ldrd r4, r3, [r7, # 0x8]};
    r7 = * (r7 + 0x4);
    если (r12> = 0x7) goto loc_4e70;
loc_4e06:
    goto * 0x4e0a [r2];
loc_4e70:
    asm {strd r1, r2, [r0]};
    вернуть;
loc_4e12:
    r2 = SAR (0xc977 * (sign_extend_32 (* 0x4001243c) - r4), 0xa);
    goto loc_4e70;
loc_4e54:
    r2 = * 0x4001283c;
    r2 = SAR (0xc977 * (sign_extend_32 (r2) - r4), 0xa);
    goto loc_4e70;
}


Различные силовые константы:

Спойлер


Итак, это говорит нам о двух вещах:

  1. Разница между CFW_W800 и CFW1000 - это только мощность двигателя, больше ничего.
  2. Нижнее значение для постоянной мощности двигателя означает большую мощность (низкий = высокая мощность, высокая = низкая мощность).

Не уверен, что означает число, может быть, это обратное значение физического RPM / ERPM двигателя (Electric RPM)?

Между V1.3.0 и CFW есть еще несколько изменений, конечно, это можно увидеть с помощью diff.
Между V1.3.0 и V1.3.4 изменения являются массивными, но, возможно, это можно взломать также с информацией, которую мы теперь имеем.


-----


Я подключил apk (Android), а также исполняемые файлы прошивки, которые я извлек из apk.
К сожалению, у меня не было времени, чтобы декомпилировать файлы класса Java / Dex и посмотреть, как приложение мигает прошивкой, но это может быть очень просто.

Разборка и декомпиляция с помощью Hopper (https://www.hopperapp.com).

Я попробую пользовательскую прошивку и отчитаюсь!

Удачи и удачи!

 7   
Xela
Участник
Rating: 40
Xela
07 march 2018, 0:21
Posted: 07 march 2018, 0:21

интересненько, мы тут в России ее взломали, каждый Россиянин покупал за кучу денег, а там какие то Испанцы ее же раздают на халяву??!! Есть у кого нибудь возможность раскопать ее? на возможность подключения Ардуинки, что б подменить батку на 12s и хотя бы остаток заряда общался.