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

lpc2114/2124 Защита программы от считывания

Делаю девайс на lpc2124, прога почти готова макет уже пашет. А фирма заказчик не совсем "чиста на руку". Есть там паренек, который жаждет "слизать" девайс и получать прибыль за мой счет.

Суть проблемы:

Сколько не рылся в документации не могу найти защиты программы от считывания. Поэтому возникают

сл. вопросы:

1. Есть ли штатная защита и как ее включить.

2. Если нет, можно ли организовать программно.

3. Если нет, то аппаратно.

 

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

 

P.S.

Девайс возможно будет дорабатываться после испытаний, поэтому вариант обкусывания ножек, не совсем подходит.

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


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

Сколько не рылся в документации не могу найти защиты программы от считывания.

Ну зачем-же обанывать на счет "рылся" :-(

Конечно есть. Конечно устанавливается программно и блокирует JTAG и ISP (кроме возможности

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

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


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

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

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

Или она по умолчанию залочивает чтение???

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


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

Если в Кейле

 

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

 

В яре на сахаре видал на асме.

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


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

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

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

Или она по умолчанию залочивает чтение???

Галочка не возможна в принципе - сначала место должно быть зарезервировано, а это уже

в стартапе ручками должно быть сделано. В принцпе проcто сразу собирается release прошивка

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

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


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

"Ну зачем-же обанывать на счет "рылся" :-(

Конечно есть. Конечно устанавливается программно и блокирует JTAG и ISP (кроме возможности

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

 

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

 

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

Я в IAR работаю.

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


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

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

У же в 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.

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


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

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

У же в 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

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


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

Простите за назойливость, а как это правильно сделать?

Разместить именно это число именно по этому адресу. Один из вариантов приводился выше. Либо

что-то типа:

                ORG    0x1FC
                dc32    0         // Protect Label place - protect if 0x87654321

 

в startup.s79

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


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

Вот спасибо ОГРОМНОЕ всем!!! :cheers:

Буду пробовать.

P.S.

Простите иногда тормажу по дикому :( .

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


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

На самом деле это не аппаратная защита просто бутлоадер, который на филипсе всегда стартует первым (я его дизассемблировал от LPC2129 правда, но для остальных он такой же) первым делом запрещает JTAG (путем записи в PIN CONNECT BLOCK) потом проверяет это слово и если оно не равно 0x8765 4321 восстанавливает регистры PIN CONNECT BLOCK

Поэтому важно случайно при нинициализации чипа не разрешиь JTAG обратно.

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


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

Получилось!!! Получилось!!!

:biggrin:

Теперь при попытке читать флеш или рам lpc2000 Flash Utility выдает ошибку

Cannot communicate with test board

Но приэтом может проситать ID процессора командой

Read Device ID.

А сделал так:

в программе где описываются глобальные переменные (до main),

написал следующее

 

#pragma location=0x1FC

const unsigned long code_protection = 0x87654321;

 

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

:biggrin::biggrin::biggrin:

 

Тему можно считать исчерпаной.

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


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

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

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


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

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

Да нет там потайного регистра!

Бутлоадер просто отключает JTAG при помощи PINSEL2 регитсра и все.

А перед выполнением команд проверяет была ли защита флеша или нет!

 

Можно в программе разрешить отладку по JTAG даже если защита была включена просто установить нужные биты в PINSEL2 регистре.

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


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

Да нет там потайного регистра!

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

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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