Jump to content

    
Sign in to follow this  
pokk

boorloder+Tftp защита от "чужой" прошивки

Recommended Posts

Добрый день, сделал bootloader с загрузкой через tftp, работает хорошо.

В кратце boot работает так, если перепрошивка разрешена, то при приеме любого пакета(Write Request (WRQ)) по tftp, происходит перезагрузка в  Bootloader через програмный  Reset, а дальше по таймауту  клиент отправлет этот же запрос ешё раз и тут его уже принимает bootloader и запускаеться процесс перепрошивки.

Так вот  у меня физически 1 плата  с разной модификации, и на ней могут работать 3-4 разных программы.

Что бы не плодить кучу версий bootloader сделал его один на все верии ПО. И вот тут возникают возможные грабли, при обновлении через Tftp может зашить  ПО от другой прошивки ("чужой"). Вот  подумал что при обновлении надо как-то отследить что за ПО и запретить обновлении если оно "чужое".  Самым простой способ это под каждую ПО сделать свой bootloader, и в нем проверять уникальный номер, но все же не хочется, плодить кучу версий.  Второй вариант,  проверять что за прошивка прилетела, и если это  ''чужая" прошивка то не переходить в bootloder, но тут возникает проблема, что бы при принять первый пакет с данным tftp, надо клиенту отправить ACK на запрос Write Request (WRQ) и если это сделать то в bootloader, уже не поймает запрос Write Request (WRQ), и не сможет начать процес перепрошивки.

Есть ли еще какие нибудь идеи как это можно реализовать ?

   

 

 

Edited by pokk

Share this post


Link to post
Share on other sites
1 час назад, pokk сказал:

Есть ли еще какие нибудь идеи как это можно реализовать ?

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

Ну а если лень ковыряться в бинарниках, то ставьте нормальный FTP и идентифицируйтесь по имени пользователя.

Edited by mantech

Share this post


Link to post
Share on other sites

Заголовок  есть, в  отправляемом hex файле, но  проблема в том что первый пакет по tftp идет запрос с именем файла, и там нет данных из файла ни заголовка ничего. И после ответа на этот запрос уже прийдет пакет с данными, так вот если его пронять в прошивке, а потом перезагрузиться в  bootloader, то как процесс передачи инициализировать заного от клиента?

Edited by pokk

Share this post


Link to post
Share on other sites
38 minutes ago, pokk said:

но  проблема в том что первый пакет по tftp идет запрос с именем файла, и там нет данных из файла ни заголовка ничего.

ну так закодируйте тип прошивки в имени файла.

Share this post


Link to post
Share on other sites
4 часа назад, pokk сказал:

Заголовок  есть, в  отправляемом hex файле, но  проблема в том что первый пакет по tftp идет запрос с именем файла, и там нет данных из файла ни заголовка ничего. И после ответа на этот запрос уже прийдет пакет с данными, так вот если его пронять в прошивке, а потом перезагрузиться в  bootloader, то как процесс передачи инициализировать заного от клиента?

Если Вы собираетесь принимать прошивку в бутлоадере и сразу шить, но надёжно так никак не сделать. Сначала нужно принять прошивку целиком, проверить её целиком, и только после этого - шить во флешь программ.

Share this post


Link to post
Share on other sites
7 hours ago, pokk said:

Добрый день, сделал bootloader с загрузкой через tftp, работает хорошо.

Нынче удобнее делать bootloader через MQTT брокера. Дополнительно получите плюсом преодоление всех NAT-ов.  

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this