Перейти к содержанию
    

Простенькая защита бинарника прошивки для STM32

Пишу новые прошивки для уже существующих устройств. Юзеры сами могут заливать бинарники в имеющееся у них устройства (обычным китайским STLINK'ом). Но хочется сделать свою работу хотя б чуток оплачиваемой (хотя б от 200 до 1000р с носа в зависимости от сложности ПО и поддержки). Однако.. не знаю какой способ защиты от копирования выбрать для открытого бинарника. Пока понятно только одно - у юзера будет простой способ ввести какой-то ключ, и этот ключ запишется куда в свободное место флэша STM32. А вот, что делать дальше и какие проверки проводить непонятно. Ибо открытый бинарник всегда можно дизассемблировать. В крайнем случае, можно править сам бинарник без пересборки.

Вот сижу чешу репу.. Если кто подскажет куда копать и как лучше к этому делу подступиться, буду благодарен :good:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, MX_Master сказал:

Вот сижу чешу репу.. Если кто подскажет куда копать и как лучше к этому делу подступиться, буду благодарен :good:

Давно аналогичной проблемой озадачен.

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

Т.е. юзеры дают вам значение функции от ID-чипа (seed=f1(ID)). Вы в ответ передаете другое значение (key=f2(seed)). Юзеры используют key для инициализации устройства.

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

Третий вариант - некое аппаратное устройство, которое проинициализирует изделие. В этом устройстве вами будет заложено N штук лицензий с возможностью пополнения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

49 minutes ago, MX_Master said:

Юзеры сами могут заливать бинарники в имеющееся у них устройства (обычным китайским STLINK'ом)

Понимаю, что Казань уже наша.. но всё же. Почему такой способ выбрали? Без загрузчика, без всего. Даёте голый бинарь) С другой стороны, кому нужно что-то ломать, на это же нужно тратить время. Защититься от копирования можно привязкой к ID микроконтроллера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ломать прошивку экономически нецелесообразно! Дешевле с нуля написать код!!!

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

И да, я считаю хамством брать деньги за апгрейженную версию прошивки!!! Если вы хотите заработать на существующих юзерах, берите с них деньги за реализацию фичриквестов конкретного юзера (и не факт, что эти фичи войдут в мейнлайн).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понимаю, что первоначальный физический доступ и собственный загрузчик решают задачу чуть ли не на 100%. Вариант собственного устройства у меня уже намечен. Но мулька как раз в том, чтоб не перепродавать пользователям перепрошитые устройства другого производителя. Пользователь должен сам решать вопрос о замене ПО своего устройства. Ну, типа, как в настольных реалиях - выбор ОС для своего ПК.

За апгрейды денег мне не надо. А вот за первую установку полностью нового софта - хотелось бы маленько брать.

Привязка к ID чипа - это самое очевидное. Именно так и надо делать. Но самое неочевидное, как этот механизм привязки к чипу спрятать в открытом бинарнике? :blush:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, Eddy_Em said:

И да, я считаю хамством брать деньги за апгрейженную версию прошивки!!! Если вы хотите заработать на существующих юзерах, берите с них деньги за реализацию фичриквестов конкретного юзера (и не факт, что эти фичи войдут в мейнлайн).

Так и делаем на серийных изделиях , все доступно на сайте , все обновления и старые архивы прошивок. Юзеры скачивают и обновляют сами.

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

Берем, если юзеру нужно что то свое , кастомное и только ему нужное. Иногда это входит в стоимость пусконаладки оборудования.

14 minutes ago, MX_Master said:

Привязка к ID чипа - это самое очевидное. Именно так и надо делать. Но самое неочевидное, как этот механизм привязки к чипу спрятать в открытом бинарнике?

Искать проверку совпадения ID в бинарнике - не благодарное дело.

Кому надо - наверное быстрее свой код напишут на ваше железо.

Ни разу не защищал код от заказчиков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

38 minutes ago, MX_Master said:

За апгрейды денег мне не надо. А вот за первую установку полностью нового софта - хотелось бы маленько брать.

Хочется взять, и поделить на нуль!

Чем же апгрейд отличается от "полностью нового софта" в случае железяки?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Eddy_Em сказал:

Хочется взять, и поделить на нуль!

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

2 часа назад, Eddy_Em сказал:

Это - железяка, а не компьютер.

И что? Для "железки" программы пишутся сами, в отличие от компов?

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 hours ago, MX_Master said:

Привязка к ID чипа - это самое очевидное. Именно так и надо делать. Но самое неочевидное, как этот механизм привязки к чипу спрятать в открытом бинарнике?

Вспоминается полиморфный код вирусов во времена доса. Почитайте. Я уже не помню эту тему. Но суть в том, что Вы код верификации ID-микроконтроллера имеете в прошивке в неком зашифрованном виде (ну хотя бы "отксоренном" (xor)). Затем, расшифровываете его и загружаете в ОЗУ. Там в ОЗУ выполняете, и по результатам проверки запускаете прошивки или лочите её. Я думаю, что пользователь замучается всё это искать, и просто не будет тратить своё время. Можно только ID "отксорить". Его уже в чистом виде не будет в бинарнике.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо всем за советы. Из обсуждения я подметил, что полностью открытым бинарник быть не обязан. Частично открытой (но хитрой) частью, надо бы сделать загрузчик. Он должен проверять серийники, править и проверять регистры защиты флэша, и уметь расшифровывать остальной функционал, в котором тоже могут быть проверки серийников и регистров защиты. Ещё бы, по-хорошему, надо накинуть в разных местах проверки CRC32 важных мест бинарника.

Наверное, этого будет достаточно, как думаете? 

Изменено пользователем MX_Master

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, MX_Master said:

Ещё бы, по-хорошему, надо накинуть в разных местах проверки CRC32 важных мест бинарника

Зачем в разных местах? CRC32 на весь бинарник недостаточно?

1 hour ago, MX_Master said:

Наверное, этого будет достаточно, как думаете? 

Знать бы, что Вы за устройства делаете, какова их цена и какой спрос. Если Вы защищаете детскую говорящую игрушку, то достаточно. Можно вообще не защищать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, haker_fox сказал:

Знать бы, что Вы за устройства делаете

https://www.cnc-club.ru/forum/viewtopic.php?f=41&t=16788&view=unread#unread

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В этой сфере большая вероятность, что будут ломать прошивку. Китайцы "с Алиэкспресса" в том числе.

 

PS. Есть три вещи, на которые можно смотреть вечно: вода, огонь и работающий CNC :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, destroit said:

А в этой ветке точно ли вопрос по CNC? Здесь бы ответ автора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Честно говоря, почитал, что там по ссылке, и аж оторопел! Не ожидал я такого "ардуинства", честно говоря!!!

Я как-то себе более вменяемыми воспринимал все эти разработки: коль уж пользуешься шаговиком, так поставь на него инкрементальный энкодер (чтобы проверять, не пропускает ли шаги); тики на драйвер ШД нужно обязательно генерировать аппаратным таймером (ШИМ), а никак не "ногодрыгом". И очень много других претензий. Я вообще не понимаю, как "малинка" и т.п. одноплатники под управлением линукса (который вообще ни разу ни ОСРВ даже с патчами!) могут рулить ЧПУшным станком напрямую, без аппаратной прокладки в виде пусть даже того же STM32F072 (у которого как раз хватит таймеров, чтобы рулить тремя осями с обратной связью; сам занят сейчас разработкой такой трехкоординатной подвижки, только с другими целями: точно позиционировать светоприемник)!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...