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

Форум / Электротранспорт / Электросамокаты / Xiaomi Mijia Electric Scooter / Разборка прошивки электросамоката Xiaomi M365
#прошивка
Форум / Электротранспорт / Электросамокаты / Xiaomi Mijia Electric Scooter / Разборка прошивки электросамоката Xiaomi M365
Open header post
Ed01
Продвинутый форумчанин
Rating: 583
Ed01
05 august 2018, 14:00
Posted: 05 august 2018, 14:00
[quote="Conejo"]светодиод (а так же балансировка) - на совести STM8, так что раз мигает - какая-то прошивка в нём есть[/quote]

Теперь понятно.

А в этом эксперименте, STM8 с прошивкой, отвечал на стандартные запросы оставаясь "голым" (без БМС) на столе: https://electro.club/f/31928. Значит, в такой ситуации, чип не может не отвечать.

[quote="FIR3MAN"]Но контроллер на неё ругается, говорит Communication error[/quote]

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

Должно быть: Красный в сторону центра платы, черный - к ее краю.

Поэтому и зарядка не работает.

Answers: 1

 1   
Conejo
Продвинутый форумчанин
МадридRating: 703
Conejo
05 august 2018, 15:25
Posted: 05 august 2018, 15:25

Ed01, с зеркальным - плюсую стоя! :))


Голый STM8 отличается в поведении от полной платы без батареи. В первом случае прошивка быстро обнаруживает отсутствие связи с BQ и уходит в аварийный цикл мигания с обработкой команд из UART (и ничего более). Во втором стартует основной цикл с измерениями итд, а там в зависимости от измеренного в каких-то видимо запредельных случаях UART может игнорироваться. Надо бы попробовать запустить плату с закороченной I2C, но я временно в отъезде, пока  только дизассемблирование и теоретизирование.

 2   
FIR3MAN
Новичок
ВаршаваRating: 4
FIR3MAN
07 august 2018, 18:38
Posted: 07 august 2018, 18:38
Ответ пользователю
Ed01 : 05 august 2018, 14:00
на это сообщение (развернуть)
[цитата Conejo] Теперь понятно.А в этом эксперименте, STM8 с прошивкой, отвечал на стандартные запросы оставаясь...
[quote="Conejo"]светодиод (а так же балансировка) - на совести STM8, так что раз мигает - какая-то прошивка в нём есть[/quote]

Теперь понятно.

А в этом эксперименте, STM8 с прошивкой, отвечал на стандартные запросы оставаясь "голым" (без БМС) на столе: https://electro.club/f/31928. Значит, в такой ситуации, чип не может не отвечать.

[quote="FIR3MAN"]Но контроллер на неё ругается, говорит Communication error[/quote]

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

Должно быть: Красный в сторону центра платы, черный - к ее краю.

Поэтому и зарядка не работает.

Иди сюда дорогой дай обниму <3


Блин ну это просто ппц, действительно по запаре припаял зеркально. Провода перепаял, все работает. Спасибо большое!

Кому интересно откуда брал БМС могу скинуть ссылку. Стоило это чудо 73$

 1   
FIR3MAN
Новичок
ВаршаваRating: 4
FIR3MAN
07 august 2018, 21:26
Posted: 07 august 2018, 21:26

Радовался я не долго так как решил я на всякий случай через BT принудительно накатить оригинальную прошивку БМС 1.1.5 (мало ли что туда китаец залил). После прошивки обьявилась ошибка 22 BMS Password Invalid.

Опять пришлось розковырять батарею и вытаскивать бмс ну и чёрт с ним.

Но тут интересная особинность, когда я пытаюсь прочитать EEPROM я получаю ошибку The device is protected

Спойлер


Как мне быть?

FIR3MAN
Новичок
ВаршаваRating: 4
FIR3MAN
07 august 2018, 22:25
Posted: 07 august 2018, 22:25

Ок.
Разблокировал чип, все удалилось.
Залил бин (Program memory) из поста Ed01 на второй странице, а EEPROM взял из оригинальной БМС. Прошел процедуру активации, все пока что ок.
Всем спасибо за помощь 

Answers: 1
 2   
Ed01
Продвинутый форумчанин
Rating: 583
Ed01
07 august 2018, 22:52
Posted: 07 august 2018, 22:52
[quote="FIR3MAN"] через BT принудительно[/quote]

Такая ситуация, могла возникнуть рано или поздно и при случайном обновлении. Если офф. обновление срубило активацию, значит в прошивке БМС, были какие-то отклонения от оригинала.

С другой стороны, если до обновления все работало, то прошивка которая там стояла, родственна оригиналу. И это хорошо.

[quote="FIR3MAN"]После прошивки обьявилась ошибка 22 BMS Password Invalid.[/quote]

БМС не активирована и да, это в DATA MEMORY (EEPROM)

[quote="FIR3MAN"]получаю ошибку The device is protected[/quote]

Значит на чипе БМС установлена защита от чтения и записи. Снять ее просто, но тогда все данные в нем будут стерты.

Этот момент отличается от оригинала (в оригинале открыт). И слить резервную копию, не удалось бы, даже до обновления.

----

А не обратили внимание, до обновления, какая версия там стояла и был ли серийный номер батареи?

ST-LINK, похоже настроен правильно. Cкриншоты при установленной защите чипа:

Answers: 2

 2   
Ed01
Продвинутый форумчанин
Rating: 583
Ed01
07 august 2018, 23:18
Posted: 07 august 2018, 23:18
[quote="FIR3MAN"]Разблокировал чип, все удалилось.
Залил бин (Program memory) из поста Ed01 на второй странице, а EEPROM взял из оригинальной БМС. Прошел процедуру активации, все пока что ок.[/quote]

Упс. Пока отвечал уже все свершилось!

Браво!!!

FIR3MAN
Новичок
ВаршаваRating: 4
FIR3MAN
08 august 2018, 15:43
Posted: 08 august 2018, 15:43
Ответ пользователю
Ed01 : 07 august 2018, 22:52
на это сообщение (развернуть)
[цитата FIR3MAN] Такая ситуация, могла возникнуть рано или поздно и при случайном обновлении. Если офф....
[quote="FIR3MAN"] через BT принудительно[/quote]

Такая ситуация, могла возникнуть рано или поздно и при случайном обновлении. Если офф. обновление срубило активацию, значит в прошивке БМС, были какие-то отклонения от оригинала.

С другой стороны, если до обновления все работало, то прошивка которая там стояла, родственна оригиналу. И это хорошо.

[quote="FIR3MAN"]После прошивки обьявилась ошибка 22 BMS Password Invalid.[/quote]

БМС не активирована и да, это в DATA MEMORY (EEPROM)

[quote="FIR3MAN"]получаю ошибку The device is protected[/quote]

Значит на чипе БМС установлена защита от чтения и записи. Снять ее просто, но тогда все данные в нем будут стерты.

Этот момент отличается от оригинала (в оригинале открыт). И слить резервную копию, не удалось бы, даже до обновления.

----

А не обратили внимание, до обновления, какая версия там стояла и был ли серийный номер батареи?

ST-LINK, похоже настроен правильно. Cкриншоты при установленной защите чипа:

Для потомков скажу. что в бмс китайцем была залита версия 1.1.5.
Но я на всякий случай решил залить оригинал, потому что не хотелось чтоб кривая прошивка БМС устроила мне пожар дома :)

alex9k
Участник
МоскваRating: 53
alex9k
09 august 2018, 14:00
Posted: 09 august 2018, 14:00

Для жаждущих - ссылка на BMS на Taobao

https://item.taobao.com/item.htm?spm=2013.1.20141001.2.7b8430b338hamh&id=558851030400

Примерно 3 т.р. + доставка

 1   
Ed01
Продвинутый форумчанин
Rating: 583
Ed01
09 august 2018, 15:46
Posted: 09 august 2018, 15:46

На просторах Интернета найден дамп с прошивкой 1.4.1 Как известно, данная прошивка блокирует возможность отката на предыдущие версии. Причина в том, что она не воспринимает обычные открытые прошивки для обновления.

Внутри архива с дампом, также обнаружилась следующая версия - 1.4.2. И она уже закодирована. Обновление с 1.4.1 на 1.4.2 прошло успешно сторонним прошивальщиком. Но, откат с 1.4.2 на старые версии, тоже невозможен.


Спойлер

Answers: 1
alex9k
Участник
МоскваRating: 53
alex9k
09 august 2018, 16:19
Posted: 09 august 2018, 16:19

Наш одноклубник Никита (@nickkee) написал небольшую оболочку для раскирпичивания (downgrade с 1.4.1) и активации через st-link.
Вбиваете серийник, прописываете путь к прошивке и ST-link CLI и жмете кнопочку!

Answers: 2
 7   
Ed01
Продвинутый форумчанин
Rating: 583
Ed01
09 august 2018, 16:25
Posted: 09 august 2018, 16:25
Ответ пользователю
alex9k : 09 august 2018, 16:19
на это сообщение (развернуть)
Наш одноклубник Никита (@nickkee) написал небольшую оболочку для раскирпичивания (downgrade с 1.4.1) и активации через...

Наш одноклубник Никита (@nickkee) написал небольшую оболочку для раскирпичивания (downgrade с 1.4.1) и активации через st-link.
Вбиваете серийник, прописываете путь к прошивке и ST-link CLI и жмете кнопочку!

Супер. Попробовал, очень удобно.

Респект!

Answers: 1
alex9k
Участник
МоскваRating: 53
alex9k
10 august 2018, 12:02
Posted: 10 august 2018, 12:02
Ответ пользователю
Ed01 : 09 august 2018, 15:46
на это сообщение (развернуть)
На просторах Интернета найден дамп с прошивкой 1.4.1 Как известно, данная прошивка блокирует возможность...

На просторах Интернета найден дамп с прошивкой 1.4.1 Как известно, данная прошивка блокирует возможность отката на предыдущие версии. Причина в том, что она не воспринимает обычные открытые прошивки для обновления.

Внутри архива с дампом, также обнаружилась следующая версия - 1.4.2. И она уже закодирована. Обновление с 1.4.1 на 1.4.2 прошло успешно сторонним прошивальщиком. Но, откат с 1.4.2 на старые версии, тоже невозможен.


Спойлер

Что изменилось в механизме внутреннего обновления прошивки в 1.4.2 ? Только кодирование добавилось (кстати как кодируют?) или еще что-то?

Ed01
Продвинутый форумчанин
Rating: 583
Ed01
11 august 2018, 7:54
Posted: 11 august 2018, 7:54

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

Так было и раньше.


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

Если же заголовок соответствует, происходит расшифровка обновления в буфер на лету.


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

Обновление становится не рабочим.


Алгоритм шифрования сложный. Длина слова, похоже 128 бит. Ключ меняется через каждый 1KB. Его длина не известна.


Спойлер

Answers: 1

 1   
alex9k
Участник
МоскваRating: 53
alex9k
11 august 2018, 17:47
Posted: 11 august 2018, 17:47
Ответ пользователю
Ed01 : 11 august 2018, 7:54
на это сообщение (развернуть)
Бут остался прежним. Прошивка следит за его целостностью и при любых изменениях теряет активацию.Так было и...

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

Так было и раньше.


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

Если же заголовок соответствует, происходит расшифровка обновления в буфер на лету.


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

Обновление становится не рабочим.


Алгоритм шифрования сложный. Длина слова, похоже 128 бит. Ключ меняется через каждый 1KB. Его длина не известна.


Спойлер

Правильно ли я понимаю:

1. У нас есть закодированная 1.4.1 (и 1.4.2)

2. У нас есть раскодированная 1.4.1 (и 1.4.2)

3. У нас есть модуль декодирования прошивок 1.4.X

4. У нас есть модуль проверки заголовка


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


Вопрос: каким образом была получена расшифрованная прошивка 1.4.2 ?

 1   
Ed01
Продвинутый форумчанин
Rating: 583
Ed01
11 august 2018, 18:38
Posted: 11 august 2018, 18:38
[quote="alex9k"]1. У нас есть закодированная 1.4.1 (и 1.4.2)[/quote]

Скачиванием обновления занимается не бутлоадер, а сама прошивка.

1.4.1 - последняя открытая прошивка. Она не закодирована, но механизм обновления в ней, уже нацелен на прием, только зашифрованных прошивок. 1.4.2 - первая из таких.


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

[quote="alex9k"]2. У нас есть раскодированная 1.4.1 (и 1.4.2)[/quote]

Да

[quote="alex9k"]

3. У нас есть модуль декодирования прошивок 1.4.X

4. У нас есть модуль проверки заголовка

[/quote]

Условно. Чтобы их достать, нужен дизассемблер, накопление соответствующих знаний и опыта.

[quote="alex9k"]с правильно закодированной прошивкой[/quote]

В том-то и дело, что нет кодировщика. Есть только раскодировщик. А старую прошивку нужно уложить в новый "контейнер".

[quote="alex9k"]нужный заголовок[/quote]

Это еще одна проблема. Но поменьше. Скорее всего, проверка нацелена на адрес запуска прошивки. Он записан, как раз где-то в начале. И в разных прошивках, он может быть разный. С "правильным" заголовком протаскивал файл забитый только нулями. Нули превратились в числа с определенной периодичностью. Два цикла: длина слова - 16 Байт, смена ключа - 1024.

[quote="alex9k"]

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


Вопрос: каким образом была получена расшифрованная прошивка 1.4.2 ?

[/quote]

Именно так и получена;) 1.4.1 сама ее распаковала в буфер чипа. Оставалось только скачать.

При обновлении, прошивка сначала попадает буфер. И если все успешно, после перезапуска, бутлоадер копирует ее из буфера в рабочую область. Где она и запускается.


 1   
Алексей
Гость
Rating: 4
Алексей
12 august 2018, 15:41
Posted: 12 august 2018, 15:41

Покопал прошивку 1.4.1 на предмет алгоритма шифрования, вот что удалось выяснить:

Алгоритм - TEA (Tiny Encryption Algorithm).

Ключи:

Спойлер


Подробнее тут: https://4pda.ru/forum/index.php?showtopic=828424&view=findpost&p=75970977

 4   
kracher
Новичок
Rating: 1
kracher
14 august 2018, 6:52
Posted: 14 august 2018, 6:52
Ответ пользователю
LIST : 25 february 2018, 2:45
на это сообщение (развернуть)
Очень интересная тема! Если бы пол года  - мес 8 назад начал читать подобное - вправда поверил бы, что это...

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

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

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

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

Сейчас то, уже можно, расскажи как это было на самом деле. 

kracher
Новичок
Rating: 1
kracher
14 august 2018, 7:05
Posted: 14 august 2018, 7:05

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

Conejo в какой среде дизасемблируете? 

Conejo
Продвинутый форумчанин
МадридRating: 703
Conejo
15 august 2018, 12:57
Posted: 15 august 2018, 12:57

Не нахожу 1.4.1/1.4.2 нигде что-то, не поделитесь? Посмотрел бы тоже что к чему.


kracher, IDA Pro. Для ST8 (BMS) собрал сторонний плагин https://github.com/CodeKill3r/Stm8Ida

Answers: 1
 1