реклама на сайте
подробности

 
 
> Защита для прошивки
Alex@ndr
сообщение Dec 23 2006, 02:20
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 22-12-06
Пользователь №: 23 802



Здравствуйте,
У меня такая ситуация: есть прошивка(в CodeVisionAVR под AtMega16), нужно передать её другому человеку, но так, чтоб он смог использовать её только для одного устройства.

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

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

Посоветуйте как это можно реализовать, или может есть способы попроще
Go to the top of the page
 
+Quote Post
4 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 56)
defunct
сообщение Dec 23 2006, 02:29
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Alex@ndr @ Dec 23 2006, 02:20) *
Посоветуйте как это можно реализовать, или может есть способы попроще

Да есть.. Продавать прошитые чипы. (хотя бы с Вашим бутлоадером)

А Ваш вариант к сожалению работать не будет, т.к. у Вашей прошивки не будет возможности ни залочить чип, ни проверить статус локов. Нельзя достучаться из прошивки к фузам и локам..
Go to the top of the page
 
+Quote Post
Alex@ndr
сообщение Dec 23 2006, 02:40
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 22-12-06
Пользователь №: 23 802



Цитата(defunct @ Dec 23 2006, 01:29) *
Да есть.. Продавать прошитые чипы. (хотя бы с Вашим бутлоадером)

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

К сожалению передать прошитый чип нет возможности.
Может всёже есть другие варианты защитить прошивку?
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Dec 23 2006, 03:15
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
К сожалению передать прошитый чип нет возможности.Может всёже есть другие варианты защитить прошивку?

Разве что написать свой программатор который будет заливать шифрованный код(бутлоадер) и тут же ставить бит защиты. Но программатор можно дизассемблировать, так что защита получится не очень надежной. Стопроцентнная защита - это только бутлоадер с шифрованием.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 23 2006, 03:37
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Alex@ndr @ Dec 23 2006, 02:40) *
К сожалению передать прошитый чип нет возможности.

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

Цитата
Может всёже есть другие варианты защитить прошивку?

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

Заказчик заливает прошивку в оба чипа.

Первый чип (1) подает второму (2) команду залочить себя
(2) лочит (1), после чего перезапускает и сообщает (1), что тот залочен.
(1) пишет в EEPROM статул лока, для того чтобы больше не просить (2) себя лочить, и генерит некий код который надо сообщить Вам по телефону.
Ну а дальше уже так как Вы описали в самом первом посте.
Только самое важное, чтобы программа без второго чипа была неработоспособной.
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Dec 23 2006, 12:12
Сообщение #6


Профессионал
****

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



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


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Dec 23 2006, 12:15
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Alex@ndr @ Dec 23 2006, 02:20) *
Посоветуйте как это можно реализовать, или может есть способы попроще

Есть простой и надежный способ - работать на доверии.
А если не доверяешь - не работать.
smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Alex@ndr
сообщение Dec 23 2006, 13:38
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 22-12-06
Пользователь №: 23 802



Цитата(Валентиныч @ Dec 23 2006, 11:12) *
Можно попробовать прочитать заводскую инфу из самого чипа (к примеру - калибровочную константу CLC, она для разных экземпляров чипов будет наверняка разной, хотя совпадения и возможны), и использовать ее как идентификатор.
Ваш заказчик должен будет выслать Вам значение этой калибровочной константы, а дальше - Ваша задача написать загрузчик, который будет использовать при записи контроль содержимого чипа, с блокировкой записи при несовпадении данных.

А как можно считать константу CLC(ну кроме как через програматор), сам контроллер может считать свою константу?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 23 2006, 15:50
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(defunct @ Dec 23 2006, 07:37) *
Цитата(Alex@ndr @ Dec 23 2006, 02:40) *

К сожалению передать прошитый чип нет возможности.

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

Цитата
Может всёже есть другие варианты защитить прошивку?

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

Заказчик заливает прошивку в оба чипа.

Первый чип (1) подает второму (2) команду залочить себя
(2) лочит (1), после чего перезапускает и сообщает (1), что тот залочен.
(1) пишет в EEPROM статул лока, для того чтобы больше не просить (2) себя лочить, и генерит некий код который надо сообщить Вам по телефону.
Ну а дальше уже так как Вы описали в самом первом посте.
Только самое важное, чтобы программа без второго чипа была неработоспособной.


Взламывается на раз, два, плюнуть - достаточно умного слэйва-напарника вместо (2) для вычисления лок-бит, ну и, естественно, программиста для всей этой раскалбасни...Хотя, тогда ни вижу смысла всей этой галиматьи...


--------------------
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Dec 23 2006, 15:51
Сообщение #10


Профессионал
****

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Цитата(Alex@ndr @ Dec 23 2006, 15:38) *
А как можно считать константу CLC(ну кроме как через програматор), сам контроллер может считать свою константу?

Насколько я знаю, эту константу можно прочитать только через программатор (ИМХО).


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 23 2006, 16:28
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(beer_warrior @ Dec 23 2006, 07:15) *
Цитата
К сожалению передать прошитый чип нет возможности.Может всёже есть другие варианты защитить прошивку?

Разве что написать свой программатор который будет заливать шифрованный код(бутлоадер) и тут же ставить бит защиты. Но программатор можно дизассемблировать, так что защита получится не очень надежной. Стопроцентнная защита - это только бутлоадер с шифрованием.
Вы сами то пробовали дизассемблировать win32 приложение? Я не говорю, что это сложно для того, кто этим занимается часто, НО... Не такая уж тривиальная задача, если подойти к этому с умом.


--------------------
Go to the top of the page
 
+Quote Post
Alex@ndr
сообщение Dec 23 2006, 17:06
Сообщение #12


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 22-12-06
Пользователь №: 23 802



Свой програматор написать несмогу, поставить второй чип наверно тоже неполучится.
Может можно привязать прошивку к чему нибудь уникальному для каждого устройства, типа серийного номера или особенностей остальных элементов устройства?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 23 2006, 18:01
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Alex@ndr @ Dec 23 2006, 16:06) *
Может можно привязать прошивку к чему нибудь уникальному для каждого устройства, типа серийного номера или особенностей остальных элементов устройства?

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Dec 23 2006, 18:50
Сообщение #14


Профессионал
****

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Цитата(Alex@ndr @ Dec 23 2006, 19:06) *
Свой програматор написать несмогу...

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


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
chief_olimp
сообщение Dec 23 2006, 19:36
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 249
Регистрация: 31-10-05
Из: Украина Нетешин
Пользователь №: 10 344



сделай так что бы устройство 10 мин работало а дальше циклилось. такое устройство точно не будут в комерческих целях использовать. А дизасемблировать? ну извините по моему лучше свое написать чем в чужом разбираться.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Dec 23 2006, 19:43
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(chief_olimp @ Dec 23 2006, 23:36) *
сделай так что бы устройство 10 мин работало а дальше циклилось. такое устройство точно не будут в комерческих целях использовать. А дизасемблировать? ну извините по моему лучше свое написать чем в чужом разбираться.
"расциклить" такое устройство с помощью AVRStudio пара пустяков...


--------------------
Go to the top of the page
 
+Quote Post
Alex@ndr
сообщение Dec 23 2006, 20:23
Сообщение #17


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 22-12-06
Пользователь №: 23 802



Цитата(Валентиныч @ Dec 23 2006, 17:50) *
А зачем писать программатор?!
Нужно написать кусок кода, который при инициализации камня будет проверять значение заводской константы, прописанной в служебных битах, и при ее идентификации разрешать выполнение основной программы.

Тоесть код для контроллера?Можно пример, как вытащить эту константу.
А по поводу защиты от дизасемблирования, может можно программой проверять контрольную сумму флэша, если она не как у оригинальной прошивки, блокировать работу?Если можно, подскажите как(для CodeVision).
Go to the top of the page
 
+Quote Post
bodja74
сообщение Dec 23 2006, 21:37
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(Alex@ndr @ Dec 23 2006, 20:23) *
Цитата(Валентиныч @ Dec 23 2006, 17:50) *

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

Тоесть код для контроллера?Можно пример, как вытащить эту константу.
А по поводу защиты от дизасемблирования, может можно программой проверять контрольную сумму флэша, если она не как у оригинальной прошивки, блокировать работу?Если можно, подскажите как(для CodeVision).

Команда LPM очень легко и непринужденно находиться в асме,так что подпрограмму проверки контрольной суммы найти и отключить несложно,а при желании "раскусить" подпрограмму проверки пин-кода тоже можно.
Если хотите 100% защиты-как уже советовали ,отсылайте прошитый камень
А если не 100% - подумайте над тем ,будет ли нуждаться в ваших услугах заказчик ,если он будет иметь хакера ,если программист способен разобратся в чужом коде,то сможет написать свой не хуже вас wink.gif
Ну а если ломанут,это будет большая честь для Вас,так как ломают дорогие и популярные вещи,и программеры способные создавать такие вещи как правило без работы и денег не сидят.
Так что в любом случае Вы выигрываете. smile.gif
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Dec 23 2006, 21:56
Сообщение #19


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



А может, вместе с прошивкой, высылать клиенту SIM-карту от сотового? Далеко не все SIM-карты клонируются без проблем. Прошивка должна уметь с ней работать, обмениваться информацией, считывать серийный номер, да мало ли ещё что делать. Можно кусок кода в ней хранить и прошивать в процессор при начальной инициализации. А после прошивки, процессор стирает информацию в SIM. То-есть прошить можно будет только ОДНО устройство! Правда, тут без бутлоадера не обойтись.
P.S. А ещё можно применить 1-Wire от Dallas со встроенной RAM. Эта RAM умеет защищаться паролем от считывания, а в ней кусок кода. Но опять-же, нужен BootLoader.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Dec 23 2006, 22:24
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Как вариант в защищаемую фузами область FLASH (максимальная бутовая) укладывается часть функций и работа с ними по фиксированным адресам. Т.е. для специально спрятанных функций заводим сегменты в xcl, замапливаем обычные, но нужные функции туда pragma location, ну и вроде должно помочь...


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 24 2006, 13:11
Сообщение #21


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sensor_ua @ Dec 23 2006, 21:24) *
Как вариант в защищаемую фузами область FLASH (максимальная бутовая) укладывается часть функций и работа с ними по фиксированным адресам. Т.е. для специально спрятанных функций заводим сегменты в xcl, замапливаем обычные, но нужные функции туда pragma location, ну и вроде должно помочь...
Так оно прекрасно работает (сами так делаем), но как я понял автор не имеет возможности лично прошить в конечный проц эту область и защитить ее фузами.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Alex@ndr
сообщение Dec 24 2006, 14:21
Сообщение #22


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 22-12-06
Пользователь №: 23 802



С SIM-карты защита точно не получится.Там два кода, IMSI-ничем незащищён(его даже через мобильный можно посмотреть),KI-защищён, но у тех карт которые не клонируются, его вычислить невозможно.

Ладно, я так понял нормальной защиты всё равно неполучится, ну мне хотябы защититу от простого копирования прошивки в другой МК. Вот мне идея понравилась проверять заводскую константу CLC.
Может кто-нибудь дать пример кода, как считать эту константу?
Go to the top of the page
 
+Quote Post
bodja74
сообщение Dec 24 2006, 14:25
Сообщение #23


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Как вариант ,
1 зашивать скриптованную программу с "внутренним" бутлоадером,
2 писать программку для ПК ,которая проверяет проверяет установку фузов.
3 при установленных фузах ,разрешает прием ключа (случайное число от МК) и возвращает дескриптор ключа и прошивки.
4 После этого "внутренний" бутлоадер распаковывает прошивку.
5 Можно добавить ,ложные байты,дескрипторы,подать "1" на порт закороченный на землю при неправильных ключах smile.gif ,короче усложнить жизнь хакеру.

При таком подходе ,потребуется не только перехват потока,но и полная эмуляция программ с анализом работы шифрования,что в принципе равноценно написанию прошивки с "нуля" ,без этой головной боли.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Dec 24 2006, 21:57
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Вау,что я вычитал,
оказывается в мегах48\88\168 программа МК может прочитать фузы защиты,так что задача значительно прощается ,дерзайте.smile.gif
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 25 2006, 00:57
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



А высылать как будете в HEX или в исходниках???

Если в HEX, то самый лучший способ - это какой-нибудь DALAS (как писали). Например часы или термометр. Убедите, что они нужны на плате для работы схемы. Дальше пусть пропишут Вам код (64бит). Его сверяйте при первом запуске, но не сначала. И код должен быть разбросан а не лежать в одном месте (чтоб не нашли).

Если не совпадает, то вылетать куда-нибудь ч/з произвольное время работы, но не в месте сравнения.
Go to the top of the page
 
+Quote Post
Alex@ndr
сообщение Dec 25 2006, 08:11
Сообщение #26


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 22-12-06
Пользователь №: 23 802



C константой калибровочного бита CLC разобрался, беру в регистре OSCCAL.
Буду попробовать, может и фьюзы защиты найду где брать...
Go to the top of the page
 
+Quote Post
add
сообщение Dec 25 2006, 10:55
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
Думаю сделать это так: при первом запуске контроллер генерит случайный код

Странно что на это никто не обратил внимание? я очень извиняюсь но как вы собираетесь это сделать? - генерить случайный код? генератором случайных чисел? можно поподробнее :-)
зы: может я в танке? :-)


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Dec 25 2006, 13:32
Сообщение #28


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446



Цитата(add @ Dec 25 2006, 10:55) *
... но как вы собираетесь это сделать? - генерить случайный код? генератором случайных чисел? можно поподробнее :-)

Это можно сделать очень просто - при первом включении прибор ждёт нажатия кнопки (или замыкания перемычки), в общем реакции заказчика, и при этом работает тот-же TCNT1 от максимальной тактовой частоты, ну а далее, использовать это значение для инициализации генератора случайных чисел. Можно сделать несколько нажатий кнопки, если хочется совсем уж случайно.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
add
сообщение Dec 25 2006, 14:03
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
Это можно сделать очень просто - при первом включении прибор ждёт нажатия кнопки

Да, согласен. Спасибо.


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 25 2006, 14:20
Сообщение #30


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Alex@ndr @ Dec 25 2006, 08:11) *
C константой калибровочного бита CLC разобрался, беру в регистре OSCCAL.
Буду попробовать, может и фьюзы защиты найду где брать...

Это дело не сработает...
Во-первых там всего 256 возможных значений из которых реально используется отсилы 20.
Во-вторых бывает, что у всех МК одной партии значения калибровочных констант равны.
Go to the top of the page
 
+Quote Post
Alex@ndr
сообщение Dec 26 2006, 00:45
Сообщение #31


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 22-12-06
Пользователь №: 23 802



Генерировать случайные числа буду через АЦП, например так: провёл 1000 замеров, три младших разряда суммы результатов -трёхзначное случайное число. Защёт погрешности АЦП результат будет абсолютно непредсказуемый и случайный.
Цитата(defunct @ Dec 25 2006, 13:20) *
Это дело не сработает...
Во-первых там всего 256 возможных значений из которых реально используется отсилы 20.
Во-вторых бывает, что у всех МК одной партии значения калибровочных констант равны.
Ну больше подходящих вариантов я невижу, а так хоть какаято защита.
И ещё очень легко организуема, вызовет зависание:
...
while (OSCCAL!=0x6A)
{
};
...

Кстати, я надеюсь калибровочную константу МК изменить нельзя?

Сообщение отредактировал Alex@ndr - Dec 26 2006, 00:52
Go to the top of the page
 
+Quote Post
fate
сообщение Dec 26 2006, 01:30
Сообщение #32


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 12-01-05
Пользователь №: 1 915



Ну если есть хотя-бы минимум доверия, то можно поступить следующим образом: разделить задачу на две части, на bootloader который вы отдаете свободно, который, так сказать готовит камень заказчика (вот здесь то и нужно доверие, если вы конечно хотите знать на какое конкретно устройство все это будет установлено) который генерирует пару не симметричных ключей (DES, SHA или еще что…) и сохраняет их, открытый ключ bootloader сообщает пользователю, он вам, вы шифруете этим ключом firmware и передаете заказчику, при установке bootloader с помощью закрытого ключа его расшифровывает и программирует в камень по пути устанавливая все флаги, вот собственно и все.

Кстати, за основу можно взять Application Notes AVR231, там не так много надо переделовать
Go to the top of the page
 
+Quote Post
bodja74
сообщение Dec 26 2006, 01:57
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(Alex@ndr @ Dec 26 2006, 00:45) *
Ну больше подходящих вариантов я невижу, а так хоть какаято защита.
И ещё очень легко организуема, вызовет зависание:

делайте случайное число от таймера, проттос дело говорит.
Цитата
Кстати, я надеюсь калибровочную константу МК изменить нельзя?

А вот и не угадали smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 26 2006, 03:48
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(fate @ Dec 26 2006, 00:30) *
вот собственно и все.

Перед 'все', заказчику нужно не полениться считать установившийся bootloader и затем копировать его в нужных количествах smile.gif. И зачем тогда все эти пляски?
Цитата
Кстати, за основу можно взять Application Notes AVR231, там не так много надо переделовать

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
fate
сообщение Dec 26 2006, 05:19
Сообщение #35


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 12-01-05
Пользователь №: 1 915



В идеале, лучше переделать на SHA и это не так уж и сложно smile.gif
mega640/1280/1281/2560/2561(возможно и mega88/168 и некоторые другие, надо проверять, по крайней мере для 640/1280/1281/2560/2561 - это даже описанно в документации) позволяет програмировать биты LB2, LB1, так что ничто не мешает bootloader-у их запрограммировать перед генерацией ключей
Go to the top of the page
 
+Quote Post
arttab
сообщение Dec 26 2006, 06:40
Сообщение #36


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



А чем неустраивает поставки мк с зашитыми загрузщиками и золочеными битами? Другого варианта не вижу.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Tanya
сообщение Dec 26 2006, 10:19
Сообщение #37


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Вот еще такой бредовый вариант.
Вы сами шьете дистанционно.
Go to the top of the page
 
+Quote Post
TomaT
сообщение Dec 26 2006, 10:35
Сообщение #38


Частый гость
**

Группа: Свой
Сообщений: 195
Регистрация: 25-01-06
Из: г. Троицк, МО
Пользователь №: 13 575



Цитата(Tanya @ Dec 26 2006, 10:19) *
Вот еще такой бредовый вариант.
Вы сами шьете дистанционно.

При большом желании ловится сниффером...
Go to the top of the page
 
+Quote Post
Tanya
сообщение Dec 26 2006, 11:01
Сообщение #39


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(TomaT @ Dec 26 2006, 10:35) *
Цитата(Tanya @ Dec 26 2006, 10:19) *

Вот еще такой бредовый вариант.
Вы сами шьете дистанционно.

При большом желании ловится сниффером...

Вот это Вы напрасно. SSH, sftp...
Другое дело, что есть "подсматривающие" программы, но получив права root'а, можно все процессы в системе контролировать.

Сообщение отредактировал Tanya - Dec 26 2006, 11:02
Go to the top of the page
 
+Quote Post
ahulap
сообщение Dec 26 2006, 11:43
Сообщение #40


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 22-06-06
Из: Kharkiv, UA
Пользователь №: 18 284



А такой вариант: прошивка совмещается с простеньким программатором (напр. byte-blaster) и передается в виде одного exe-файла. При первом удачном программировании создает ключи в реестре, скрытые файлы и т.п. ... и дальше отказывается работать.
Можно попытаться хотя бы имитировать защиту покруче, что может отбить охоту заниматься взломом или запускать на другом комрьютере... понти - велика сила smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 26 2006, 14:24
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(fate @ Dec 26 2006, 04:19) *
ничто не мешает bootloader-у их запрограммировать перед генерацией ключей

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Alex@ndr
сообщение Dec 26 2006, 20:37
Сообщение #42


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 22-12-06
Пользователь №: 23 802



Вон чё в даташите на AtMega16 нарыл:
Прикрепленное изображение

Насколько я ничего не понимаю в английском, это значит что всётаки можно прочитать фьюзы и локи самим контроллером!!!Только как, для меня пока остаётся загадкой...
Go to the top of the page
 
+Quote Post
ahulap
сообщение Dec 26 2006, 21:24
Сообщение #43


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 22-06-06
Из: Kharkiv, UA
Пользователь №: 18 284



Например, как в app.note avr109 (flash.h).
Но как шифрование прошивки может помочь, если и загрузчик, и прошивку будет зашивать заказчик?
Go to the top of the page
 
+Quote Post
Alex@ndr
сообщение Dec 26 2006, 21:40
Сообщение #44


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 22-12-06
Пользователь №: 23 802



Цитата(ahulap @ Dec 26 2006, 20:24) *
Например, как в app.note avr109 (flash.h).

Спасибо, щас буду смотреть.
Цитата(ahulap @ Dec 26 2006, 20:24) *
Но как шифрование прошивки может помочь, если и загрузчик, и прошивку будет зашивать заказчик?

См. первое сообщение. Прошивка будет неработоспособна без моего кода, единственный вариант -считать ЕЕРRОМ с уже разблокированного МК(с обеими кодами) и шить его в остальные.
Go to the top of the page
 
+Quote Post
ahulap
сообщение Dec 26 2006, 22:30
Сообщение #45


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 22-06-06
Из: Kharkiv, UA
Пользователь №: 18 284



Цитата(Alex@ndr @ Dec 26 2006, 20:40) *
См. первое сообщение. Прошивка будет неработоспособна без моего кода, единственный вариант -считать ЕЕРRОМ с уже разблокированного МК(с обеими кодами) и шить его в остальные.

Но ведь прошивка открыта и посмотреть в ней таблицу соответствий или формулу вычисления ответного числа особого труда не составит. ?
Go to the top of the page
 
+Quote Post
Alex@ndr
сообщение Dec 27 2006, 00:00
Сообщение #46


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 22-12-06
Пользователь №: 23 802



Цитата(ahulap @ Dec 26 2006, 21:30) *
Но ведь прошивка открыта и посмотреть в ней таблицу соответствий или формулу вычисления ответного числа особого труда не составит. ?

Так если поставить защиту кодом + защиту по калибровочной константе + проверку контрольной суммы(чтоб прошивку труднее править было) +ещё чё нибудь придумать, это сколько головной боли будет у того кто захочет такую программу ломать.
Думаю будет проще написать собственную программу, чем с такою разбиратся.
Только надо ещё чтоб реализация всего этого была достаточно простой, ато защита программы получится сложнее самой программы.
Go to the top of the page
 
+Quote Post
bodja74
сообщение Dec 27 2006, 01:12
Сообщение #47


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(ahulap @ Dec 26 2006, 22:30) *
Но ведь прошивка открыта и посмотреть в ней таблицу соответствий или формулу вычисления ответного числа особого труда не составит. ?

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

Цитата
Насколько я ничего не понимаю в английском, это значит что всётаки можно прочитать фьюзы и локи самим контроллером!!!Только как, для меня пока остаётся загадкой...

Мдя,или в старых даташитах ничего не сказано или я опять прохлопал.

Могу обрадовать ,можно не только прочитать но и записать.

Порядок насколько понял такой.
Заносим в R0 следующее значение
7 6 5 4 3 2 1 0
1 1 BLB12 BLB11 BLB02 BLB01 1 1

Записываем в SPMCR “X0001001”
После чего в течении 4 тактов нужно подать команду SPM ,желательно при этом шаманстве отключить все прерывания.
Проверка конца записи идет чтением фузов.
Далее идут рекомендации для совместимости кода с другими камнями,но это не актуально.

Теперь чтение

Загружаем вектор в регистр Z=$0001 ,
потом устанавливаем биты BLBSET и SPMEN регистра SPMCR,
далее в течение трех тактов подать LPM
Проверка конца чтения по сбросу битов BLBSET и SPMEN
Go to the top of the page
 
+Quote Post
fate
сообщение Dec 27 2006, 04:57
Сообщение #48


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 12-01-05
Пользователь №: 1 915



Цитата(ahulap @ Dec 26 2006, 22:30) *
Но ведь прошивка открыта и посмотреть в ней таблицу соответствий или формулу вычисления ответного числа особого труда не составит. ?


Это не правильно, я ведь ранее писал что загрузчик вполне может закрыть прошивку от чтения запрограмировав биты LB1 LB2
Go to the top of the page
 
+Quote Post
arttab
сообщение Dec 27 2006, 05:54
Сообщение #49


Профессионал
*****

Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371



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


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
dch
сообщение Dec 27 2006, 06:06
Сообщение #50


Профессионал
*****

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



Цитата(prottoss @ Dec 23 2006, 16:28) *
Вы сами то пробовали дизассемблировать win32 приложение?

Почему, недавно видел проект, операционная система бинарно совместимая с Win, в исходных текстах. Драйвера от производителей железа там свободно пускаются. Причем 10 лет ей и разработчики вроде русские. Вопрос цены. Некоторые ничего вообще не умеют делать
Go to the top of the page
 
+Quote Post
dch
сообщение Dec 27 2006, 06:27
Сообщение #51


Профессионал
*****

Группа: Участник
Сообщений: 1 179
Регистрация: 15-09-04
Из: 141070 г. Королев МО, улица Горького 39-121
Пользователь №: 661



А прошивка как прошивается в target? Может програмку в PC поправить, тогда с легкостью можно получить доступ к lock битам, калибровочным константам и вообще прописать во flash дельту к прошивке. Я например использовал такую схему для прошивки - на targete стоит COM порт, есть jumper-ы которые перекидывают RXD,TXD на линии используемы для последовательной прошивки. При этом для прошивки используется обычный COM портовый кабель, утилита прошивки uisp есть в исходных текстах. Защиту можно наращивать бесредельно :-)
Go to the top of the page
 
+Quote Post
add
сообщение Dec 27 2006, 10:07
Сообщение #52


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Делаем девайсину на контроллере залоченую, которая позволит один раз прошить(ну может два раза) контроллер заказчика и залочит его. При таком подходе стороннему программисту будет предоставлена минимальная возможность "снять" программу с линии spi(сведет к минимуму танцы с бубном и пляски..). т.е. можно конечно эмулировать контроллер и т.д. Можно прошить в контроллер прогу тест, которая ответит девайсу- программатору кодом по тому же спи, и уже в случае "положительного" ответа сразу шить основную прогу (+прошитая прога может проверить Ваш ли программатор ее прошил, иначе сотрет себя нафиг..). Это тоже конечно можно сэмулировать, но уже сложнее.
зы:вообще если уж настолько заказчик пускает слюни на Вашу прогу, ну поставте условие: поднимите цену за свободное распостронение, ограничте время работы прошивки и т. д.


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
ahulap
сообщение Dec 27 2006, 10:56
Сообщение #53


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 22-06-06
Из: Kharkiv, UA
Пользователь №: 18 284



Цитата(Alex@ndr @ Dec 26 2006, 23:00) *
Так если поставить защиту кодом + защиту по калибровочной константе + проверку контрольной суммы(чтоб прошивку труднее править было) +ещё чё нибудь придумать, это сколько головной боли будет у того кто захочет такую программу ломать.
Думаю будет проще написать собственную программу, чем с такою разбиратся.
Только надо ещё чтоб реализация всего этого была достаточно простой, ато защита программы получится сложнее самой программы.

Я понял, идея такова: при первом запуске контроллер себя лочит и генерирует случайный код. Заказчик сообщает этот код автору, тот дает ответный. Заказчик вводит этот код, устройство проверяет его и работает или нет.
Сам код будет закрыт, но ведь в самой прошивке можно найти место, где он проверятся (вычисление "правильного" ответа и сравнение его с введенным), и определить формулу. ничего ломать не надо.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Dec 27 2006, 12:26
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(ahulap @ Dec 27 2006, 09:56) *
Я понял, идея такова: при первом запуске контроллер себя лочит и генерирует случайный код.

Не "код" а открытый ключ для шифрования - отличие радикальное. Что правда не мешает ломать загрузчик на предмет НЕ установки защиты sad.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Alex@ndr
сообщение Dec 28 2006, 23:44
Сообщение #55


Участник
*

Группа: Новичок
Сообщений: 20
Регистрация: 22-12-06
Пользователь №: 23 802



Спасибо за ответы, но мож кто пример программы подкинет, как эти самые локи считать?
И ещё, неохота с загрузчиком связыватся, может можно произвести чтение фьюзов или локов из основной программы?
Go to the top of the page
 
+Quote Post
PWS
сообщение Jan 17 2007, 21:42
Сообщение #56





Группа: Новичок
Сообщений: 1
Регистрация: 17-01-07
Пользователь №: 24 524



Если у Вас и заказчика "выделенка" и у заказчика есть программатор, то попробуйте использовать "Remote Administrator (Radmin) 2.2", правда в этом случае заказчик должен Вам дать права администратора на один из своих компьютеров.
Go to the top of the page
 
+Quote Post
Семён
сообщение Jan 18 2007, 10:49
Сообщение #57


Частый гость
**

Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922



Цитата(Alex@ndr @ Dec 28 2006, 23:44) *
Спасибо за ответы, но мож кто пример программы подкинет, как эти самые локи считать?
И ещё, неохота с загрузчиком связыватся, может можно произвести чтение фьюзов или локов из основной программы?

Могу предложить Вам аппартный программатор на любое количество записей. Когда Вам вернут программатор Вы по новому сможите задать количество записей и использовать его практически неограниченное число раз.


--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 02:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.0213 секунд с 7
ELECTRONIX ©2004-2016