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

Форум / Электротранспорт / Электросамокаты / Xiaomi Mijia Electric Scooter / Разборка прошивки электросамоката Xiaomi M365
#прошивка
+
Форум / Электротранспорт / Электросамокаты / Xiaomi Mijia Electric Scooter / Разборка прошивки электросамоката Xiaomi M365
Открыть шапку темы
Ed01
Продвинутый форумчанин
Rating: 568
Ed01
22 february 2018, 1:23
Posted: 22 february 2018, 1:23
[quote="Тарас"]все прошивки которые сдесь выложены, на MAIN плату,не рабочие! При прошивке контроллера - ноль![/quote]
[quote="Ed01"]Процесс обновления этих данных - есть Активация[/quote]
[quote="demonizer"]

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

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

[/quote]

На примере прошивки БМС, как части общей прошивки, как раз это и выяснялось. Клонировать все данные (включая пользовательские) в новый чип легко. Но чтобы получить рабочий вариант этого недостаточно.


Клонированная БМС, сама по себе работает, но если подключить её к контроллеру, начинает мигать красным. А контроллер выдает "BMS ошибкa пароля" https://electro.club/f/3171


7957-84.jpgСерийный номер не имеет особого значения и его можно менять. Но существует привязка к  аппаратному "чип ID" самого контроллера. А сформировать пользовательские данные под этот ID не зная алгоритма, все равно что отгадать серийник к Фотошопу).

[quote="demonizer"]По поводу прошивки контроллера, появилась мысль написать свою, в сущности, задача довольно тривиальная[/quote]

Тут, еще проблема может возникнуть на этапе тестирования. Выявляя ошибки и подстраивая режимы, рулить прошивку можно бесконечно). Малая задача - произвольный откат прошивок (БМС теперь можно). И возможно, обход проверки батареи. У АП - разработчика кастомной прошивки такое намечалось. Но видимо есть подводные камни и теперь в разработке у него аппаратная обманка v3.0.

 3   
Ed01
Продвинутый форумчанин
Rating: 568
Ed01
22 february 2018, 8:00
Posted: 22 february 2018, 8:00

Сконвертировал HEX в BIN (ранее слитый с БМС). В дампе содержится больше данных, т.к он перекрывает всё адресное пространство Flash-памяти. Данные состоят из трех частей:


1). С адреса 0x8000 - вероятно, Boot-загрузчик. Он одинаков в обоих BMS и не обновляется при штатной перепрошивке.


2). C адреса 0x9000 - собственно сама прошивка. Сравнил по содержимому с известным файлом прошивки. И он полностью совпадает. Это говорит о том, что бинарники с сервера не используют шифрование или сжатие.


3). C адреса 0xC800 - вторая копия прошивки. Не знаю зачем. Встречал такое в TV Самсунг.

 4   
demonizer
Участник
Rating: 76
demonizer
22 february 2018, 8:09
Posted: 22 february 2018, 8:09
Ответ пользователю
Ed01 : 22 february 2018, 1:23
на это сообщение (развернуть)
[цитата Тарас] [цитата Ed01] [цитата demonizer] На примере прошивки БМС, как части общей прошивки, как раз это и...
[quote="Тарас"]все прошивки которые сдесь выложены, на MAIN плату,не рабочие! При прошивке контроллера - ноль![/quote]
[quote="Ed01"]Процесс обновления этих данных - есть Активация[/quote]
[quote="demonizer"]

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

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

[/quote]

На примере прошивки БМС, как части общей прошивки, как раз это и выяснялось. Клонировать все данные (включая пользовательские) в новый чип легко. Но чтобы получить рабочий вариант этого недостаточно.


Клонированная БМС, сама по себе работает, но если подключить её к контроллеру, начинает мигать красным. А контроллер выдает "BMS ошибкa пароля" https://electro.club/f/3171


7957-84.jpgСерийный номер не имеет особого значения и его можно менять. Но существует привязка к  аппаратному "чип ID" самого контроллера. А сформировать пользовательские данные под этот ID не зная алгоритма, все равно что отгадать серийник к Фотошопу).

[quote="demonizer"]По поводу прошивки контроллера, появилась мысль написать свою, в сущности, задача довольно тривиальная[/quote]

Тут, еще проблема может возникнуть на этапе тестирования. Выявляя ошибки и подстраивая режимы, рулить прошивку можно бесконечно). Малая задача - произвольный откат прошивок (БМС теперь можно). И возможно, обход проверки батареи. У АП - разработчика кастомной прошивки такое намечалось. Но видимо есть подводные камни и теперь в разработке у него аппаратная обманка v3.0.

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


Ed01
Продвинутый форумчанин
Rating: 568
Ed01
22 february 2018, 8:11
Posted: 22 february 2018, 8:11

Поставил чип контроллера STM32F103C8T6 в программатор...

И да, к сожалению защита ROP на нем активна. Лить прошивку можно только вслепую.


 2   
demonizer
Участник
Rating: 76
demonizer
22 february 2018, 9:19
Posted: 22 february 2018, 9:19

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

Бася
Форумчанин
МоскваRating: 190
Бася
22 february 2018, 9:40
Posted: 22 february 2018, 9:40
Ответ пользователю
Ed01 : 22 february 2018, 8:00
на это сообщение (развернуть)
Сконвертировал HEX в BIN (ранее слитый с БМС). В дампе содержится больше данных, т.к он перекрывает всё адресное...

Сконвертировал HEX в BIN (ранее слитый с БМС). В дампе содержится больше данных, т.к он перекрывает всё адресное пространство Flash-памяти. Данные состоят из трех частей:


1). С адреса 0x8000 - вероятно, Boot-загрузчик. Он одинаков в обоих BMS и не обновляется при штатной перепрошивке.


2). C адреса 0x9000 - собственно сама прошивка. Сравнил по содержимому с известным файлом прошивки. И он полностью совпадает. Это говорит о том, что бинарники с сервера не используют шифрование или сжатие.


3). C адреса 0xC800 - вторая копия прошивки. Не знаю зачем. Встречал такое в TV Самсунг.

Возможно копия на случай сбоя при перепрошивке.

Ed01
Продвинутый форумчанин
Rating: 568
Ed01
22 february 2018, 10:26
Posted: 22 february 2018, 10:26
[quote="Бася"]Возможно копия на случай сбоя при перепрошивке.[/quote]

Возможно. В телевизорах было примерно так: при обновлении, новая версия шилась на новое место, а старая оставалась. При следующем обновлении, уже затиралась первая версия. и.т.д Это позволяло откатить прошивку в "один клик". Позже, когда пошла мода на принудительное обновление без возможности отката, кнопку переключения убрали из меню. Но принцип остался. Для надежности.

 1   
Тарас
Участник
Rating: 42
Тарас
24 february 2018, 17:26
Posted: 24 february 2018, 17:26

Может перехватить прошивку непосредственно при обновлении ? Или врезаться в uart Rx Tx на плате двумя уартами Rx ?

Тарас
Участник
Rating: 42
Тарас
24 february 2018, 17:27
Posted: 24 february 2018, 17:27

Я так когда-то клонировал протокол))

 1   
Ed01
Продвинутый форумчанин
Rating: 568
Ed01
24 february 2018, 19:21
Posted: 24 february 2018, 19:21
[quote="Тарас"]Может перехватить прошивку непосредственно при обновлении ? Или врезаться в uart Rx Tx на плате двумя уартами Rx ?[/quote]

Сама по себе прошивка есть. Вернее, обновляемая ее часть. Не хватает важной части - boot загрузчика.

Он зашит на заводе, не обновляется и сидит в начальных адресах Flash (0x08000000).  При старте передает управление на точку входа основной прошивки (обновляемой части). Поэтому, размещая перехваченную прошивку в любой части чистого чипа, мы никогда ее не запустим без бута.


Boot можно получить из чипа, считав дамп всего адресного пространства Flash. Но этому препятствует защита ROP.

Зашита перекрывает все команды доступа к памяти через встроенные в  ROM интерфейсы UART и SWD.

Она оставляет лишь одну команду - снять защиту. В этом случае вся память затирается вместе с бутом, успешно и быстро) Чип открыт, но считывать с него нечего.


Поэтому программатор оказался бесполезен. А чтобы снять защиту, всего-то нужно было заменить число 0xFF на 0xA5 в адресе 0x1FFFF800.


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


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

Всё ИМХО.

demonizer
Участник
Rating: 76
demonizer
24 february 2018, 19:29
Posted: 24 february 2018, 19:29

Тема по-прежнему актуально, но потребуется жертва. А именно:

1 не обновлённый контроллер, который не жалко

2 логический анализатор

3 время


Собственно, у меня есть только второе))))

demonizer
Участник
Rating: 76
demonizer
24 february 2018, 19:40
Posted: 24 february 2018, 19:40

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

Учитывая, что МАХ прошивка основана на 1.3.0 (совпадение?), вполне реально этот ключ вычленить, т.к. один раз это уже сделано.

Почему для прошивки на МАХ требуется отправлять контроллер? Ничего сложного в том, чтобы написать своё приложение, прошивающее сяо по воздуху через штатный загрузчик, не вижу. Для коммерции - оплата-ключ для одноразовой прошивки.


И ещё: можно попробовать заливать прошивку на конкретную страницу флеш, вдруг, программа, действительно, проверяет адрес вектора загрузки. Надо попробовать

Ed01
Продвинутый форумчанин
Rating: 568
Ed01
24 february 2018, 20:00
Posted: 24 february 2018, 20:00

Вот для БМС, легко вызвать обновление:

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


Но это нужно еще уточнять. До конца не делал.

А с контроллером, даже не знаю. А что там за шина, если не секрет?

demonizer
Участник
Rating: 76
demonizer
24 february 2018, 20:03
Posted: 24 february 2018, 20:03
Ответ пользователю
Ed01 : 24 february 2018, 20:00
на это сообщение (развернуть)

Вот для БМС, легко вызвать обновление:

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


Но это нужно еще уточнять. До конца не делал.

А с контроллером, даже не знаю. А что там за шина, если не секрет?

Контроллер с блютусом общается по однопроводной шине, там тот же уарт, только по одному проводу. Как lin-шина, но не совсем.

 1   
ezhfan
Участник
КрасногорскRating: 14
ezhfan
24 february 2018, 20:03
Posted: 24 february 2018, 20:03

Бут может использоваться для защиты прошивки, проверки подписи, контрольной суммы и, например, расшифровывать прошивку при загрузке в чип. Ну или обеспечивать загрузку по воздуху (OTA/FOTA). И такой бут может быть весьма нестандартным.

demonizer
Участник
Rating: 76
demonizer
24 february 2018, 20:09
Posted: 24 february 2018, 20:09
Ответ пользователю
ezhfan : 24 february 2018, 20:03
на это сообщение (развернуть)

Бут может использоваться для защиты прошивки, проверки подписи, контрольной суммы и, например, расшифровывать прошивку при загрузке в чип. Ну или обеспечивать загрузку по воздуху (OTA/FOTA). И такой бут может быть весьма нестандартным.

Прошивка очень врядли зашифрована, ибо в ней незашифрованный серийник.

Безусловно, протокол свой, и, естественно, с контрольной суммой. Но это не проблема.

Принцип примерно следующий: в контроллер отправляется некая последовательност байт, означающая начало обновления. Потом, например, передаётся 128 байт и crc, бут считает crc сам и сравнивает с той, что прилетела. Если ок, сохраняет во флешь. Если нет-повтор. После нескольких неудач-отменяем обновление и перезаливаем из резервной области, как было

 1   
demonizer
Участник
Rating: 76
demonizer
24 february 2018, 20:14
Posted: 24 february 2018, 20:14

Кстати, это и объясняет необходимость дублирования прошивки. Видимо, в начале обновления, записывается флаг, означающий начало записи во флеш. Если все байты получены, флаг снимается. Таким образом, если даже отключить питание физически при обновлении, при включении, бут увидит поднятый флаг, т.е. недописанный флеш и перезальет из резервной области.

Ed01
Продвинутый форумчанин
Rating: 568
Ed01
24 february 2018, 20:23
Posted: 24 february 2018, 20:23
[quote="demonizer"]Прошивка очень врядли зашифрована, ибо в ней незашифрованный серийник.[/quote]

Нет, нет, не зашифрована. В БМС, что не закрыта ROP, файл совпал с дампом чипа байт в байт. А модуль прошивки контроллера в том же пакете.

demonizer
Участник
Rating: 76
demonizer
24 february 2018, 20:25
Posted: 24 february 2018, 20:25

Ну и океюшки, значит, надо ковырять

LIST
Гость
Rating: 5
LIST
25 february 2018, 2:45
Posted: 25 february 2018, 2:45

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

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

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

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

 1