|
Защита для прошивки |
|
|
|
Dec 23 2006, 02:20
|
Участник

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

|
Здравствуйте, У меня такая ситуация: есть прошивка(в CodeVisionAVR под AtMega16), нужно передать её другому человеку, но так, чтоб он смог использовать её только для одного устройства.
Думаю сделать это так: при первом запуске контроллер генерит случайный код, записывает его в EEPROM и выводит на LCD.Код передаётся мне, я составляю ответный код, передаю его, он вводится в устройство, контроллер записывает его в EEPROM.Далее при каждом включении контроллер сверяет на правильность коды из EEPROM, при несоответствии работа устройства блокируется.
Но для этого думаю нужно контролировать что стоит фьюз защиты от чтения EEPROM(иначе не генерить первый код) и генератор реально случайных чисел(не псевдослучайных).
Посоветуйте как это можно реализовать, или может есть способы попроще
|
|
|
|
|
 |
Ответов
(15 - 29)
|
Dec 23 2006, 20:23
|
Участник

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

|
Цитата(Валентиныч @ Dec 23 2006, 17:50)  А зачем писать программатор?! Нужно написать кусок кода, который при инициализации камня будет проверять значение заводской константы, прописанной в служебных битах, и при ее идентификации разрешать выполнение основной программы. Тоесть код для контроллера?Можно пример, как вытащить эту константу. А по поводу защиты от дизасемблирования, может можно программой проверять контрольную сумму флэша, если она не как у оригинальной прошивки, блокировать работу?Если можно, подскажите как(для CodeVision).
|
|
|
|
|
Dec 23 2006, 21:37
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Цитата(Alex@ndr @ Dec 23 2006, 20:23)  Цитата(Валентиныч @ Dec 23 2006, 17:50)  А зачем писать программатор?! Нужно написать кусок кода, который при инициализации камня будет проверять значение заводской константы, прописанной в служебных битах, и при ее идентификации разрешать выполнение основной программы.
Тоесть код для контроллера?Можно пример, как вытащить эту константу. А по поводу защиты от дизасемблирования, может можно программой проверять контрольную сумму флэша, если она не как у оригинальной прошивки, блокировать работу?Если можно, подскажите как(для CodeVision). Команда LPM очень легко и непринужденно находиться в асме,так что подпрограмму проверки контрольной суммы найти и отключить несложно,а при желании "раскусить" подпрограмму проверки пин-кода тоже можно. Если хотите 100% защиты-как уже советовали ,отсылайте прошитый камень А если не 100% - подумайте над тем ,будет ли нуждаться в ваших услугах заказчик ,если он будет иметь хакера ,если программист способен разобратся в чужом коде,то сможет написать свой не хуже вас  Ну а если ломанут,это будет большая честь для Вас,так как ломают дорогие и популярные вещи,и программеры способные создавать такие вещи как правило без работы и денег не сидят. Так что в любом случае Вы выигрываете.
|
|
|
|
|
Dec 23 2006, 21:56
|

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

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

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

|
С SIM-карты защита точно не получится.Там два кода, IMSI-ничем незащищён(его даже через мобильный можно посмотреть),KI-защищён, но у тех карт которые не клонируются, его вычислить невозможно.
Ладно, я так понял нормальной защиты всё равно неполучится, ну мне хотябы защититу от простого копирования прошивки в другой МК. Вот мне идея понравилась проверять заводскую константу CLC. Может кто-нибудь дать пример кода, как считать эту константу?
|
|
|
|
|
Dec 24 2006, 14:25
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
Как вариант , 1 зашивать скриптованную программу с "внутренним" бутлоадером, 2 писать программку для ПК ,которая проверяет проверяет установку фузов. 3 при установленных фузах ,разрешает прием ключа (случайное число от МК) и возвращает дескриптор ключа и прошивки. 4 После этого "внутренний" бутлоадер распаковывает прошивку. 5 Можно добавить ,ложные байты,дескрипторы,подать "1" на порт закороченный на землю при неправильных ключах  ,короче усложнить жизнь хакеру. При таком подходе ,потребуется не только перехват потока,но и полная эмуляция программ с анализом работы шифрования,что в принципе равноценно написанию прошивки с "нуля" ,без этой головной боли.
|
|
|
|
|
Dec 25 2006, 08:11
|
Участник

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

|
C константой калибровочного бита CLC разобрался, беру в регистре OSCCAL. Буду попробовать, может и фьюзы защиты найду где брать...
|
|
|
|
|
Dec 25 2006, 10:55
|

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

|
Цитата Думаю сделать это так: при первом запуске контроллер генерит случайный код Странно что на это никто не обратил внимание? я очень извиняюсь но как вы собираетесь это сделать? - генерить случайный код? генератором случайных чисел? можно поподробнее :-) зы: может я в танке? :-)
--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
|
|
|
|
|
Dec 25 2006, 13:32
|

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

|
Цитата(add @ Dec 25 2006, 10:55)  ... но как вы собираетесь это сделать? - генерить случайный код? генератором случайных чисел? можно поподробнее :-) Это можно сделать очень просто - при первом включении прибор ждёт нажатия кнопки (или замыкания перемычки), в общем реакции заказчика, и при этом работает тот-же TCNT1 от максимальной тактовой частоты, ну а далее, использовать это значение для инициализации генератора случайных чисел. Можно сделать несколько нажатий кнопки, если хочется совсем уж случайно.
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Dec 25 2006, 14:03
|

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

|
Цитата Это можно сделать очень просто - при первом включении прибор ждёт нажатия кнопки Да, согласен. Спасибо.
--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|