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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> И еще раз по защите Flash
toweroff
сообщение May 18 2009, 19:06
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Может чего-то не понял, но из мануала, например, по LPC2101/02/03:


Code security

This feature of the LPC2101/02/03 allow an application to control whether it can be
debugged or protected from observation.
If after reset on-chip bootloader detects a valid checksum in flash and reads 0x8765 4321
from address 0x1FC in flash, debugging will be disabled and thus the code in flash will be
protected from observation. Once debugging is disabled, it can only be enabled by
performing a full chip erase using the ISP.


то есть, тостаточно прописать некую константу по адресу 0x1FC со значением 0x87654321, линкер ее там разместит, при прошивке данное значение ляжет куда надо и все, можно не заморачиваться?

Если так, то как правильно записать?

Код
code unsigned int protect=0x87654321 _at_ 0x1FC


Оно?
Go to the top of the page
 
+Quote Post
KRS
сообщение May 18 2009, 21:22
Сообщение #2


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(toweroff @ May 18 2009, 23:06) *
то есть, тостаточно прописать некую константу по адресу 0x1FC со значением 0x87654321, линкер ее там разместит, при прошивке данное значение ляжет куда надо и все, можно не заморачиваться?

Главное объяснить линкеру что класть нужно именно туда. И есть еще момент в том что эта константа очень неудачно расположена т.е. надо что бы в этом месте не было кода. Т.е. основной код можно расположить с адреса 0x200. Но тогда остается место между векторами и 0x1FC, там можно, например, разместить обработчик прерывания...
Go to the top of the page
 
+Quote Post
toweroff
сообщение May 18 2009, 21:37
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



нашел... поиск рулит... (а то я чавой-та на синтаксис х51-го полез smile.gif )

#pragma location=0x1FC /* защита от копирования */
const long CodeSecure = 0x87654321;
#pragma required = CodeSecure

Остаются следующие вопросы:

1. В старших моделях (например 2468) это значение нужно записать в регистр CSPR в течение 256 первых тактов. Но как поправить бутлоадер, чтобы он это сделал?
Далее в мануале на эту модель говорится, что, после проверки целостности flash, бут пишет значение ячейки 0x1FC в регистр CSPR и ключевое значение оного блокирует кристалл от дебага и вообще доступа к содержимому. В чем принципиальное отличие этих двух путей? Можно ли во втором случае дорваться к прошивке через вообще что-то (бут, жтаг, ...)?

2. В модели 2478 есть вообще три уровня защиты:

There are three levels of the Code Read Protection.

CRP1 disables access to chip via the JTAG and allows partial flash update (excluding
flash sector 0) using a limited set of the ISP commands. This mode is useful when CRP is
required and flash field updates are needed but all sectors can not be erased.

CRP2 disables access to chip via the JTAG and only allows full flash erase and update
using a reduced set of the ISP commands.

Running an application with level CRP3 selected fully disables any access to chip via the
JTAG pins and the ISP. This mode effectively disables ISP override using P2[10] pin, too.
It is up to the user’s application to provide (if needed) flash update mechanism using IAP
calls or a call to reinvoke the ISP command to enable flash update via UART0.


Что это за "уменьшенный" и "ограниченный" набор команд ISP?
Правильно ли я понимаю, что в третьем варианте, если я не предусмотрю своего механизма обновления, такой чип в случае необходимости перепрошивки нужно будет выкинуть в помойку и впаять новый?

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


Цитата(KRS @ May 19 2009, 01:22) *
Главное объяснить линкеру что класть нужно именно туда. И есть еще момент в том что эта константа очень неудачно расположена т.е. надо что бы в этом месте не было кода. Т.е. основной код можно расположить с адреса 0x200. Но тогда остается место между векторами и 0x1FC, там можно, например, разместить обработчик прерывания...


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

Сообщение отредактировал toweroff - May 18 2009, 21:39
Go to the top of the page
 
+Quote Post
KRS
сообщение May 18 2009, 22:08
Сообщение #4


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(toweroff @ May 19 2009, 01:37) *
1. В старших моделях (например 2468) это значение нужно записать в регистр CSPR в течение 256 первых тактов. Но как поправить бутлоадер, чтобы он это сделал?
Далее в мануале на эту модель говорится, что, после проверки целостности flash, бут пишет значение ячейки 0x1FC в регистр CSPR и ключевое значение оного блокирует кристалл от дебага и вообще доступа к содержимому.

Это бутлоадер сам и делает. При включении чипа всегда бутлоадер стартует он первым делом и врубает защиту. Так что обычно ничего специально делать не надо, только нужны код в 0x1FC прописать.

Цитата(toweroff @ May 19 2009, 01:37) *
Что это за "уменьшенный" и "ограниченный" набор команд ISP?
Правильно ли я понимаю, что в третьем варианте, если я не предусмотрю своего механизма обновления, такой чип в случае необходимости перепрошивки нужно будет выкинуть в помойку и впаять новый?

Ограниченый набор - JTAG вырублен, а писать флеш можно весь, кроме 0 страницы. в даташите хорошо описано ( чисто софтовое ограничение бутлоадер не воспринимает другие команды)
В третьем варианте - действительно чип можно выкинуть.

Цитата(toweroff @ May 19 2009, 01:37) *
ух, чуть-чуть не успел smile.gif я так понимаю, что как раз прагмы и укажут линкеру на то, что там будет только это значение и ничто иное?

Я честно говоря не эксперементировал так с линкером у меня просто основной сегмент кода начинается с 0x200, а в начале инициализация (свой сегмент) или данные какие либо.
Тут просто линкер должен найти функцию(функции) которая полностью влезет до 0x1FC потом дырка на 4 байта потом опять можно код размещать. ( В любом случае надо что бы сегмент кода состоял из двух частей, с дыркой в 4 байта и это надо объяснять линкеру)
Go to the top of the page
 
+Quote Post
toweroff
сообщение May 18 2009, 22:50
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(KRS @ May 19 2009, 02:08) *
Я честно говоря не эксперементировал так с линкером у меня просто основной сегмент кода начинается с 0x200, а в начале инициализация (свой сегмент) или данные какие либо.
Тут просто линкер должен найти функцию(функции) которая полностью влезет до 0x1FC потом дырка на 4 байта потом опять можно код размещать. ( В любом случае надо что бы сегмент кода состоял из двух частей, с дыркой в 4 байта и это надо объяснять линкеру)


спасибо, все более-менее проясняется smile.gif

по линкеру - где это ему говорить? и как?
Go to the top of the page
 
+Quote Post
KRS
сообщение May 19 2009, 07:34
Сообщение #6


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(toweroff @ May 19 2009, 02:50) *
по линкеру - где это ему говорить? и как?

так это от линкера зависит smile.gif
Например в сатром IAR ( 4.xx) в xcl файле
Код
-Z(CODE)PROTECT=001FC-001FF

А в своем asm стратапе у меня используется так
Код
#ifdef FIRMWARE_PROTECT
        RSEG PROTECT:CODE:ROOT(2)
      dc32 0x87654321
#endif

Но можно и как у вас в С файле, только указать #pragma location="PROTECT", указать

А если 5.xx IAR там принцип тот же, только icf надо править, там посложнее.
Go to the top of the page
 
+Quote Post
buba
сообщение May 27 2009, 17:52
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 24-07-07
Из: Ташкент
Пользователь №: 29 326



Цитата(KRS @ May 19 2009, 12:34) *
А если 5.xx IAR там принцип тот же, только icf надо править, там посложнее.


А я как раз искал, как прописать это именно в студии 5.хх. Нашёл:
http://supp.iar.com/Support/?note=36121&am...m=search+result
Go to the top of the page
 
+Quote Post
Lexy_one
сообщение Jul 18 2011, 12:37
Сообщение #8


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

Группа: Участник
Сообщений: 90
Регистрация: 28-07-09
Из: Чернигов
Пользователь №: 51 621



Подскажите!
Вопрос №1:
Есть вопрос по поводу CRP3.
Можно ли послее ее установки как нибудь разлочить процессор.

Например не получиться ли следующий алгоритм:
В процессоре живет бутлоадер использующий IAP.
в бутлоадаре предусмотрена команда стирания IAP с сектора 0 до последнего...
и при визове ее сотрется ли весь проц и соответственно защита CRP3 ???

и еще можно ли таким путем стирать все уровни защиты (CRP1,CRP2,CRP3).

Вопрос №2:
Можно ли при установленной защите (CRP1,CRP2,CRP3) читать флеш с сектора 0 по физическим адресам
например так:

pInt8U DevPrgVers = (pInt8U)DEV_PRG_VERS_ADDR;
Int8U DeviceVers[8];
for(Int8U i=0; i<8 ; i++) DeviceVers[i] = DevPrgVers[i] ;


P.S. процессор lpc2368
Go to the top of the page
 
+Quote Post
goodwin
сообщение Jul 19 2011, 19:07
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 481
Регистрация: 1-08-05
Пользователь №: 7 267



1. Сотрется. Пробовал. Еще при старте, когда работает только внутренний RC генератор. Замыкаешь, например, пару выводов между собой на определенное время. При выполнении условия, вызываешь процедуру IAP стирания фсего флэш.
2. Можно.
Go to the top of the page
 
+Quote Post
Lexy_one
сообщение Jul 20 2011, 06:00
Сообщение #10


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

Группа: Участник
Сообщений: 90
Регистрация: 28-07-09
Из: Чернигов
Пользователь №: 51 621



Тогда я не пойму что это за защита, если можно защищенную флеш прочитать?
Допустим прошить вместо заводской прошывки свою и прочитать всю защищенную область, выкинув ее допустим в ком порт???
и все .... защита взломана? у вас и заводская прошывка и защищенная область???!!!
или можно еще както побороться?
Go to the top of the page
 
+Quote Post
zuy
сообщение Jul 20 2011, 06:22
Сообщение #11


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

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



Цитата(Lexy_one @ Jul 20 2011, 09:00) *
Тогда я не пойму что это за защита, если можно защищенную флеш прочитать?
Допустим прошить вместо заводской прошывки свою и прочитать всю защищенную область, выкинув ее допустим в ком порт???
и все .... защита взломана? у вас и заводская прошывка и защищенная область???!!!
или можно еще както побороться?

Возможность уже запущенной программы иметь доступ к памяти контроллера никакого отношения к защите прошивки от копирования не имеет.
Предположим у вас есть устройство с загрузчиком в 0-м секторе, который грузит прошивку с 1-го и дальше и запускает ее.
Это, я думаю, стандартная схема.
Как вы прошьете вместо заводской прошивки свою при зашитах CRP2, CRP3 ?
Предположим, что прошили, как вы ее планируете запустить при любом уровне CRP ?
Go to the top of the page
 
+Quote Post
Lexy_one
сообщение Jul 20 2011, 09:35
Сообщение #12


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

Группа: Участник
Сообщений: 90
Регистрация: 28-07-09
Из: Чернигов
Пользователь №: 51 621



Цитата(zuy @ Jul 20 2011, 09:22) *
Как вы прошьете вместо заводской прошивки свою при зашитах CRP2, CRP3 ?
Предположим, что прошили, как вы ее планируете запустить при любом уровне CRP ?


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

тут я вижу только вариант кодирования исходника для прошывки.!!!
Go to the top of the page
 
+Quote Post
goodwin
сообщение Jul 20 2011, 16:14
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 481
Регистрация: 1-08-05
Пользователь №: 7 267



"тут я вижу только вариант кодирования исходника для прошывки.!!!"
Дык само-собой...
Go to the top of the page
 
+Quote Post
zuy
сообщение Jul 20 2011, 17:19
Сообщение #14


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

Группа: Свой
Сообщений: 173
Регистрация: 30-11-05
Из: San Francisco
Пользователь №: 11 593



Цитата(Lexy_one @ Jul 20 2011, 12:35) *
тут я вижу только вариант кодирования исходника для прошывки.!!!

Ну вот, мы вас и подвели к правильному решению.
Конечно все кодируется, а иначе какой смысл вообще в защите флеша, если можно скачать незакодированную прошивку из инета sm.gif
Go to the top of the page
 
+Quote Post
Lexy_one
сообщение Jul 21 2011, 08:43
Сообщение #15


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

Группа: Участник
Сообщений: 90
Регистрация: 28-07-09
Из: Чернигов
Пользователь №: 51 621



А вот подскажите...
Для кодирования вы изобретаете свои алгоритмы или все таки используете какие либо стандартные подходы?
Go to the top of the page
 
+Quote Post

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

 


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


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