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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> lpc2114/2124 Защита программы от считывания, "Сделайте одолжение, войдите в положение..."
electroveni
сообщение Jul 12 2006, 05:42
Сообщение #1


Участник
*

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



Делаю девайс на lpc2124, прога почти готова макет уже пашет. А фирма заказчик не совсем "чиста на руку". Есть там паренек, который жаждет "слизать" девайс и получать прибыль за мой счет.
Суть проблемы:
Сколько не рылся в документации не могу найти защиты программы от считывания. Поэтому возникают
сл. вопросы:
1. Есть ли штатная защита и как ее включить.
2. Если нет, можно ли организовать программно.
3. Если нет, то аппаратно.

Буду благодарен за любые идеи по этим вопросам.

P.S.
Девайс возможно будет дорабатываться после испытаний, поэтому вариант обкусывания ножек, не совсем подходит.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 12 2006, 06:01
Сообщение #2


Гуру
******

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



Цитата(electroveni @ Jul 12 2006, 08:42) *
Сколько не рылся в документации не могу найти защиты программы от считывания.

Ну зачем-же обанывать на счет "рылся" :-(
Конечно есть. Конечно устанавливается программно и блокирует JTAG и ISP (кроме возможности
стереть все нафиг). Конечно есть раздел в документе по ISP.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Alechek
сообщение Jul 12 2006, 06:23
Сообщение #3


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

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(zltigo @ Jul 12 2006, 12:01) *
Конечно есть раздел в документе по ISP.

Еще б место под галочку было в филипсовкой флеш утилите....
Или она по умолчанию залочивает чтение???
Go to the top of the page
 
+Quote Post
vesago
сообщение Jul 12 2006, 06:29
Сообщение #4


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Если в Кейле

Код
#pragma NOINIT                                                            
const unsigned long code_protection __at 0x1FC = 0x87654321;


В яре на сахаре видал на асме.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 12 2006, 06:30
Сообщение #5


Гуру
******

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



Цитата(Alechek @ Jul 12 2006, 09:23) *
Цитата(zltigo @ Jul 12 2006, 12:01) *

Конечно есть раздел в документе по ISP.

Еще б место под галочку было в филипсовкой флеш утилите....
Или она по умолчанию залочивает чтение???

Галочка не возможна в принципе - сначала место должно быть зарезервировано, а это уже
в стартапе ручками должно быть сделано. В принцпе проcто сразу собирается release прошивка
с установленным 87654321 и все - заодно прошивальщики не смогут забыть поставить "галочку". При большом желании можете добавить ключик в гораздо более удобный в альтернативный ISP, исходники которого имеются.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
electroveni
сообщение Jul 12 2006, 06:40
Сообщение #6


Участник
*

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



"Ну зачем-же обанывать на счет "рылся" :-(
Конечно есть. Конечно устанавливается программно и блокирует JTAG и ISP (кроме возможности
стереть все нафиг). Конечно есть раздел в документе по ISP."

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

Если не затруднит можно подробней как включить, или скажите в каком описании написано сам попробую разобраться.
Я в IAR работаю.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 12 2006, 06:45
Сообщение #7


Гуру
******

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



Цитата(electroveni @ Jul 12 2006, 09:40) *
а может в той документации которая у меня это не указано(у меня ведь далеко не вся).

У же в user manual (полагаю, что есть :-) )сие упомянуто черным по белому.
Код
20.7 Code Read Protection (CRP)
Code read protection is enabled by programming the flash address location 0x1FC (User
flash sector 0) with value 0x8765 4321 (2271560481 Decimal). Address 0x1FC is used to
allow some room for the fiq exception handler. When the code read protection is enabled
the JTAG debug port, external memory boot and the following ISP commands are
disabled:
• Read Memory
• Write to RAM
• Go
• Copy RAM to Flash
The ISP commands mentioned above terminate with return code
CODE_READ_PROTECTION_ENABLED. The ISP erase command only allows erasure
of all user sectors when the code read protection is enabled. This limitation does not exist
if the code read protection is not enabled. IAP commands are not affected by the code
read protection.
Important: CRP is active/inactive once the device has gone through a power cycle.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
electroveni
сообщение Jul 12 2006, 07:00
Сообщение #8


Участник
*

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



Цитата(zltigo @ Jul 12 2006, 09:45) *
Цитата(electroveni @ Jul 12 2006, 09:40) *

а может в той документации которая у меня это не указано(у меня ведь далеко не вся).

У же в user manual (полагаю, что есть :-) )сие упомянуто черным по белому.
Код
20.7 Code Read Protection (CRP)
Code read protection is enabled by programming the flash address location 0x1FC (User
flash sector 0) with value 0x8765 4321 (2271560481 Decimal). Address 0x1FC is used to
allow some room for the fiq exception handler. When the code read protection is enabled
the JTAG debug port, external memory boot and the following ISP commands are
disabled:
• Read Memory
• Write to RAM
• Go
• Copy RAM to Flash
The ISP commands mentioned above terminate with return code
CODE_READ_PROTECTION_ENABLED. The ISP erase command only allows erasure
of all user sectors when the code read protection is enabled. This limitation does not exist
if the code read protection is not enabled. IAP commands are not affected by the code
read protection.
Important: CRP is active/inactive once the device has gone through a power cycle.


Вы правы, простите проглядел. :-(
Как я понял, по адресу 0x1FC во флеш нужно записать число 0x8765 4321.
Простите за назойливость, а как это правильно сделать?
Например в начале до main написать const unsigned long ... =0x8765 4321.
А как указать компилятору что константу записать по адресу 0x1FC?

Сообщение отредактировал electroveni - Jul 12 2006, 07:05
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 12 2006, 07:05
Сообщение #9


Гуру
******

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



Цитата(electroveni @ Jul 12 2006, 10:00) *
Простите за назойливость, а как это правильно сделать?

Разместить именно это число именно по этому адресу. Один из вариантов приводился выше. Либо
что-то типа:
Код
                ORG    0x1FC
                dc32    0         // Protect Label place - protect if 0x87654321


в startup.s79


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
electroveni
сообщение Jul 12 2006, 07:09
Сообщение #10


Участник
*

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



Вот спасибо ОГРОМНОЕ всем!!! cheers.gif
Буду пробовать.
P.S.
Простите иногда тормажу по дикому sad.gif .
Go to the top of the page
 
+Quote Post
KRS
сообщение Jul 12 2006, 07:28
Сообщение #11


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

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



На самом деле это не аппаратная защита просто бутлоадер, который на филипсе всегда стартует первым (я его дизассемблировал от LPC2129 правда, но для остальных он такой же) первым делом запрещает JTAG (путем записи в PIN CONNECT BLOCK) потом проверяет это слово и если оно не равно 0x8765 4321 восстанавливает регистры PIN CONNECT BLOCK
Поэтому важно случайно при нинициализации чипа не разрешиь JTAG обратно.
Go to the top of the page
 
+Quote Post
electroveni
сообщение Jul 12 2006, 08:44
Сообщение #12


Участник
*

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



Получилось!!! Получилось!!!
biggrin.gif
Теперь при попытке читать флеш или рам lpc2000 Flash Utility выдает ошибку
Cannot communicate with test board
Но приэтом может проситать ID процессора командой
Read Device ID.
А сделал так:
в программе где описываются глобальные переменные (до main),
написал следующее

#pragma location=0x1FC
const unsigned long code_protection = 0x87654321;

Спасибо всем ответевшим!!!
biggrin.gif biggrin.gif biggrin.gif

Тему можно считать исчерпаной.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 12 2006, 09:56
Сообщение #13


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



На самом деле есть такой потайной регистр в LPC-шках, в который ботлоадер просто копирует слово из адреса 0x1FC. И именно этот регистр аппаратно блокирует отладку и чтение флэша. Это значит, что потом при желании можно снова разблокировать защиту. Я вот думаю, если записать по адресу 0x1FC поверх старых 0x87654321 скажем все нули, то защита исчезнет?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
KRS
сообщение Jul 12 2006, 10:06
Сообщение #14


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

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



Цитата(GetSmart @ Jul 12 2006, 13:56) *
На самом деле есть такой потайной регистр в LPC-шках, в который ботлоадер просто копирует слово из адреса 0x1FC. И именно этот регистр аппаратно блокирует отладку и чтение флэша. Это значит, что потом при желании можно снова разблокировать защиту. Я вот думаю, если записать по адресу 0x1FC поверх старых 0x87654321 скажем все нули, то защита исчезнет?

Да нет там потайного регистра!
Бутлоадер просто отключает JTAG при помощи PINSEL2 регитсра и все.
А перед выполнением команд проверяет была ли защита флеша или нет!

Можно в программе разрешить отладку по JTAG даже если защита была включена просто установить нужные биты в PINSEL2 регистре.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 12 2006, 10:21
Сообщение #15


Гуру
******

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



Цитата(KRS @ Jul 12 2006, 13:06) *
Да нет там потайного регистра!

Подтверждаю - нету. Чисто софтовая защита на существующих и документированных возможностях железа.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:58
Рейтинг@Mail.ru


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