|
lpc2114/2124 Защита программы от считывания, "Сделайте одолжение, войдите в положение..." |
|
|
|
Jul 12 2006, 05:42
|
Участник

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

|
Делаю девайс на lpc2124, прога почти готова макет уже пашет. А фирма заказчик не совсем "чиста на руку". Есть там паренек, который жаждет "слизать" девайс и получать прибыль за мой счет. Суть проблемы: Сколько не рылся в документации не могу найти защиты программы от считывания. Поэтому возникают сл. вопросы: 1. Есть ли штатная защита и как ее включить. 2. Если нет, можно ли организовать программно. 3. Если нет, то аппаратно.
Буду благодарен за любые идеи по этим вопросам.
P.S. Девайс возможно будет дорабатываться после испытаний, поэтому вариант обкусывания ножек, не совсем подходит.
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 39)
|
Jul 12 2006, 06:01
|

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

|
Цитата(electroveni @ Jul 12 2006, 08:42)  Сколько не рылся в документации не могу найти защиты программы от считывания. Ну зачем-же обанывать на счет "рылся" :-( Конечно есть. Конечно устанавливается программно и блокирует JTAG и ISP (кроме возможности стереть все нафиг). Конечно есть раздел в документе по ISP.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 12 2006, 06:29
|
Тутэйшы
   
Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263

|
Если в Кейле Код #pragma NOINIT const unsigned long code_protection __at 0x1FC = 0x87654321; В яре на сахаре видал на асме.
|
|
|
|
|
Jul 12 2006, 06:30
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jul 12 2006, 06:40
|
Участник

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

|
"Ну зачем-же обанывать на счет "рылся" :-( Конечно есть. Конечно устанавливается программно и блокирует JTAG и ISP (кроме возможности стереть все нафиг). Конечно есть раздел в документе по ISP."
Я не обманываю, может проглядел, а может в той документации которая у меня это не указано(у меня ведь далеко не вся).
Если не затруднит можно подробней как включить, или скажите в каком описании написано сам попробую разобраться. Я в IAR работаю.
|
|
|
|
|
Jul 12 2006, 06:45
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jul 12 2006, 07:00
|
Участник

Группа: Новичок
Сообщений: 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
|
|
|
|
|
Jul 12 2006, 07:05
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jul 12 2006, 07:09
|
Участник

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

|
Вот спасибо ОГРОМНОЕ всем!!! Буду пробовать. P.S. Простите иногда тормажу по дикому  .
|
|
|
|
|
Jul 12 2006, 08:44
|
Участник

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

|
Получилось!!! Получилось!!! Теперь при попытке читать флеш или рам lpc2000 Flash Utility выдает ошибку Cannot communicate with test board Но приэтом может проситать ID процессора командой Read Device ID. А сделал так: в программе где описываются глобальные переменные (до main), написал следующее #pragma location=0x1FC const unsigned long code_protection = 0x87654321; Спасибо всем ответевшим!!! Тему можно считать исчерпаной.
|
|
|
|
|
Jul 12 2006, 10:06
|

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

|
Цитата(GetSmart @ Jul 12 2006, 13:56)  На самом деле есть такой потайной регистр в LPC-шках, в который ботлоадер просто копирует слово из адреса 0x1FC. И именно этот регистр аппаратно блокирует отладку и чтение флэша. Это значит, что потом при желании можно снова разблокировать защиту. Я вот думаю, если записать по адресу 0x1FC поверх старых 0x87654321 скажем все нули, то защита исчезнет? Да нет там потайного регистра! Бутлоадер просто отключает JTAG при помощи PINSEL2 регитсра и все. А перед выполнением команд проверяет была ли защита флеша или нет! Можно в программе разрешить отладку по JTAG даже если защита была включена просто установить нужные биты в PINSEL2 регистре.
|
|
|
|
|
Jul 12 2006, 20:21
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Даю выдержку из ботлоадера LPC2138: Код 0x7FFFD000 E59FF018 LDR PC, [PC, #+24] ; [0x7FFFD020] =0x7FFFD1BC ................. 0x7FFFD1BC E59F0018 LDR R0, [PC, #+24] ; [0x7FFFD1DC] =SCCSPR (0xE01FC184) 0x7FFFD1C0 E51F1014 LDR R1, [PC, #-20] ; [0x7FFFD1B4] =0x1FC 0x7FFFD1C4 E5912000 LDR R2, [R1, #+0] 0x7FFFD1C8 E5802000 STR R2, [R0, #+0] 0x7FFFD1CC E51F2188 LDR R2, [PC, #-392] ; [0x7FFFD04C] =RAMEND (0x40007FFF) 0x7FFFD1D0 E242D01F SUB SP, R2, #0x1F 0x7FFFD1D4 E59FE004 LDR LR, [PC, #+4] ; [0x7FFFD1E0] =0x7FFFD3AB 0x7FFFD1D8 E12FFF1E BX LR Лично я обнаружил недокументированный регистр SCCSPR с адресом 0xE01FC184. Однако, что он делает пока не выяснил.
Сообщение отредактировал GetSmart - Jul 12 2006, 20:28
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 12 2006, 21:14
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Оказывается он и в ПДФ-е (LPC213x User Manual(rev.01-24.06.2005).pdf) есть: Цитата Code Security/Debugging CSPR Code Security Protection Register RO 0 0xE01FC184 А об этой штуке кто-нить знает: Цитата Reset RSID Reset Source Identification Register R/W 0 0xE01FC180 Непонятны описания полей и всё остальное. У себя найти не могу.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 12 2006, 21:53
|

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

|
Цитата(GetSmart @ Jul 12 2006, 23:21)  Даю выдержку из ботлоадера LPC2138: Бутлоадеры у 213x и прочих разные. У прочих даже такой регистр не используется. Цитата А об этой штуке кто-нить знает:
Reset RSID Reset Source Identification Register R/W 0 0xE01FC180 Непонятны описания полей и всё остальное. У себя найти не могу. Ну полагаю RSIR Код RSIR Function Description Reset Value 0 POR Assertion of the POR signal sets this bit, and clears all of the other bits in this register. But if another Reset signal (e.g., External Reset) remains asserted after the POR signal is negated, then its bit is set. This bit is not affected by any of the other sources of Reset. see text 1 EXTR Assertion of the RESET signal sets this bit. Ths bit is cleared by POR, but is not affected by WDT or BOD reset. 2 WDTR This bit is set when the Watchdog Timer times out and the WDTRESET bit in the Watchdog Mode Register () is 1. It is cleared by any of the other sources of Reset. 3 BODR This bit is set when the 3.3V power falls below 2.6V. If the voltage continues to decline o the level at which POR is asserted (nominally 1V), this bit is cleared, but if the voltage comes back up without reaching that level, this bit remains 1. This bit is not affected by External Reset nor Watchdog Reset. 7:4 Reserved Reserved, user software should not write ones to reserved bits. 0 Ну и что здесь непонятного?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 12 2006, 22:20
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Вот спасибо. А то я поиском не нашёл. Очепятки есть даже у буржуев. А как убедительно звучало: Цитата(zltigo) Подтверждаю - нету... Пока я выдержку не привёл. Есть он или его нету пока не ясно. В других ботлоадерах он может и в другом месте прописываться. У меня вот других процов нет и я сам проверить не могу. А то, что регистр бессмысленный это ну очень маловероятно. Применительно к процессорам с внешней памятью (не к 213х) должны быть ещё некоторые типы защиты. Например, выполнение из внешней флэш, или из внешней рамы, и может что ещё.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 13 2006, 06:01
|

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

|
Цитата(GetSmart @ Jul 13 2006, 01:20)  А как убедительно звучало: 0. А что? Регистр не документирован :-)? 1.Посмотрите на типы процессоров, о которых спрашивал автор. 2.Бутлоадеры для них (в отличие от 2x3x серии, или уже и их выложили? ) лежат на официальном сайте. Таким образом можете их поизучать и не имея чипа.... Я еще думал, а какого черта для 2x3x серии другие боотлоадеры замутили, теперь, видимо, получил ответ - завели регистр с временными воротами для блокировок JTAG и начали им пользоваться. 3.Для большинства "прочих" чипов прошивка "защищенного" боотлоадера вообще появилась много много позже выпуска "железа".
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 14 2006, 11:24
|

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

|
Еще при исследовании бутлоадера я нашел уязвимость!! Проверил на 2 чипах LPC2129 версия 1.63 и LPC2119 версия 1.64. На LPC2103 версия 2.2 не работает (возможно, другое распределение памяти), я не разбирался. В общем сегодня, послыкой определнной строки мне удалось отключить защиту и считать flash Послал письмо инеженру Филипс, который был на семинаре у нас в прошлом году. Может быть у них есть новые версии бутлоадера. Хотя можно и этот исправить
|
|
|
|
|
Jul 14 2006, 13:06
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(KRS) В общем сегодня, послыкой определнной строки мне удалось отключить защиту и считать flash Круто! Я так и знал, что что-то там не в порядке. Халтурщики же они. Делают очень дешёвые и средне глючные чипы. Но именно дешевизна и прильщает при такой огромной производительности.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 14 2006, 14:01
|

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

|
Цитата(GetSmart @ Jul 14 2006, 17:06)  Цитата(KRS) В общем сегодня, послыкой определнной строки мне удалось отключить защиту и считать flash Круто! Я так и знал, что что-то там не в порядке. Халтурщики же они. Делают очень дешёвые и средне глючные чипы. Но именно дешевизна и прильщает при такой огромной производительности. Да чипы у них действительно быстрые и дешевые, да и появляются часто раньше конкурентов. У меня сейчас в 2 проектах LPC2103 он вообще 3 бакса стоит Кстати вот на следующей неделе попробую покапаться в его бутлоадере. А то у меня возникли сомнения что защита у них лучше, просто в даташите громко названо Code Read Protection, а реализация мне кажется такая же.
|
|
|
|
|
Jul 14 2006, 14:13
|

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

|
Цитата(GetSmart @ Jul 14 2006, 18:07)  zltigo правильно сказал - надо писать свои ботлоадеры для надёжной защиты. Хотя, надёжна ли она будет на 100%? У LPC работа с FLASH не документирована, только через IAP, а IAP вместе бутлоадером и записывается, причем насколько я знаю через IAP нельзя переписать сектор в котором она же и находится. Бутлоадер можно конечно переписать и даже улучшить, написан он кстати кривовато, и явно на С. Но вот записать его во FLASH стандартными средствами не удастся. Кстати сам бутлоадер вызыват IAP причем тем способом который описан в даташите, напрмую функции не дергает.
|
|
|
|
|
Jul 14 2006, 14:24
|

Местами Гуру
    
Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323

|
Цитата(KRS @ Jul 14 2006, 14:59)  Цитата(Harbour @ Jul 14 2006, 15:35)  для более -менее секьюрных вещей lpc лучше не применять. Есть инфа что флешка читается в не зависимости от содержимого бутлодера и справедливо это для всех ихних чипов.
А откуда такая инфа? Мне пришол ответ от Philips что изучат проблему и к сентябрю выпутстят новый бутлоадер Дык, причем же тут бутлодырь если он даже выполнятся не успевает, принцип снятия защиты состоит в приостановке в нужный момент главного клока. дальше думаю понятно.
|
|
|
|
|
Jul 14 2006, 14:33
|

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

|
Цитата(Harbour @ Jul 14 2006, 18:24)  Дык, причем же тут бутлодырь если он даже выполнятся не успевает, принцип снятия защиты состоит в приостановке в нужный момент главного клока. дальше думаю понятно. Так если клок остановить клок JTAG тоже остановится. А так не успеть остановить чип!! вот начало бутлоадера, никаих переходов первые команды отключают JTAG надо успеть остановить чип до выполнения 3 команды! насколько я понимаю это невозможно! Ноги DBG_BREAK у филипса нет, а посылка по JTAG займет больше вермени... Код intvect:00000000 LDR R2, =0xE002C014 intvect:00000004 MOV R3, #0 intvect:00000008 SWP R0, R3, [R2]
Сообщение отредактировал KRS - Jul 14 2006, 14:52
|
|
|
|
|
Jul 14 2006, 15:21
|

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

|
Цитата(GetSmart @ Jul 14 2006, 19:03)  Да ладно! Нет ничего невозможного. I think I can do it! Только вот ботлоадер какой-то вымышленный. Не вымышленный это из версии 1.63 для LPC2129 кстати 1.64 так же начинается а вот у LPC2103 начало немного другое Код 00000000 E59F4034 LDR R4, [PC, #+52] 00000004 E3A05002 MOV R5, #0x2 00000008 E5845000 STR R5, [R4, #+0] 0000000C E3A05003 MOV R5, #0x3 00000010 E5845004 STR R5, [R4, #+4] 00000014 E59F201C LDR R2, [PC, #+28] ; [0x38] =0xE002C014 00000018 E3A03000 MOV R3, #0x0 0000001C E1020093 SWP R0, R3, [R2] 00000020 E2822028 ADD R2, R2, #0x28 00000024 E1021093 SWP R1, R3, [R2] JTAG отрубается 10ой командой
|
|
|
|
|
Jul 14 2006, 15:27
|

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

|
Цитата(GetSmart @ Jul 14 2006, 18:07)  Хотя, надёжна ли она будет на 100%? 100% гарантию дает только страховой полис.. Но по крайней мере он будет явно тупее и в его кодах никто копаться не будет. Цитата(KRS @ Jul 14 2006, 17:13)  У LPC работа с FLASH не документирована, только через IAP, а IAP вместе бутлоадером и записывается, причем насколько я знаю через IAP нельзя переписать сектор в котором она же и находится. А достаточно легкого патча для перехода на свой bootloader после первых "правильных" команд. IAP останется. В самой прошивалке ничего страшного нет, но недокументированность работы с FLASH навевает мысли на возможность смены его производителем в любой момент и соответственно возникновению ненужных проблем с очередным чипом или даже партией. Завшивка или через JTAG или просто ручками подправить в штатной boot обновлялке.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 14 2006, 23:59
|

Местами Гуру
    
Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323

|
Цитата(KRS @ Jul 14 2006, 17:33)  Цитата(Harbour @ Jul 14 2006, 18:24)  Дык, причем же тут бутлодырь если он даже выполнятся не успевает, принцип снятия защиты состоит в приостановке в нужный момент главного клока. дальше думаю понятно.
Так если клок остановить клок JTAG тоже остановится. А так не успеть остановить чип!! вот начало бутлоадера, никаих переходов первые команды отключают JTAG надо успеть остановить чип до выполнения 3 команды! насколько я понимаю это невозможно! Ноги DBG_BREAK у филипса нет, а посылка по JTAG займет больше вермени... У жтага свой клок, и он никак не связан с девайсом.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|