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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Защита прошивки в LPC23xx/LPC24xx, написание специфического загрузчика
Vitaliy_ARM
сообщение Mar 20 2008, 15:30
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Пишу внутрипрограммный загрузчик.

Как понимаю, в этих процессорах защита организована так.
По адресу 0x000001FC во флешь находится поле Code Read Protection (CRP).
Записав в это поле определенное в даташите значение, устанавливается степень защиты кода.
При загрузки внутренний загрузчик смотрит на это поле и решает, что делать ISP.

Так же есть возможность определить программно, закрыт процессор или нет.

Только не приятно, что это поле находится в одной странице вместе с векторами прерывания. А загрузчик перешиваться не должен.
Как кто решает проблему программной установки этого поля перезаписи векторов прерывания?
Или может можно более красиво решить эту задачу?


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 20 2008, 15:38
Сообщение #2


Гуру
******

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



Цитата(Vitaliy_ARM @ Mar 20 2008, 18:30) *
Как кто решает проблему программной установки этого поля перезаписи векторов прерывания?

Очередную проблему Вы выдумали - защита штатного загрузчика должна быть активирована ВСЕГДА. А из своего - пишите через ISP что хотите.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
meister
сообщение Mar 20 2008, 18:46
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(Vitaliy_ARM @ Mar 20 2008, 18:30) *
Только не приятно, что это поле находится в одной странице вместе с векторами прерывания. А загрузчик перешиваться не должен.


У меня в векторах прерываний стоят бранчи на сектор обновляемой части прошивки, а оттуда - куда надо.
Go to the top of the page
 
+Quote Post
Kirill Frolov
сообщение Mar 20 2008, 19:10
Сообщение #4


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

Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241



Цитата(meister @ Mar 20 2008, 21:46) *
У меня в векторах прерываний стоят бранчи на сектор обновляемой части прошивки, а оттуда - куда надо.


В атмеловском арме можно выкрутиться без "бранчей" путём программирования контроллера прерываний и размещения минимального обработчика в бутлодыре (который call делает по вектору из контроллера). С FIQ аналогично, только jmp сместо call (вопрос возврата уже на совести обработчика FIQ). Для исключений вроде ABORT распечатка регистров и стека в RS232. У меня так.


--------------------
[ZX]
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 20 2008, 20:49
Сообщение #5


Гуру
******

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



Цитата(Kirill Frolov @ Mar 20 2008, 22:10) *
..размещения минимального обработчика в бутлодыре...

Совершенно не нужны никакие "обработчики c call" в bootloader-e - вектор 32bit - загружается одной командой
Код
                ldr     pc,[pc,#-0x120]         //  Jump directly to the address given by the AIC

в pc и все.
FIQ, если он один, действительно можно отправить, например, на 0 адрес основной прошивки.
Кроме, того вопрос-то был о другом.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Mar 21 2008, 13:25
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(zltigo @ Mar 20 2008, 18:38) *
Очередную проблему Вы выдумали - защита штатного загрузчика должна быть активирована ВСЕГДА. А из своего - пишите через ISP что хотите.


Понял.

Загрузчик теперь немного модифицировался. Нужно сделать еще и так.
Часть функций зашиврована и лежит в некоторой странице флешь. Потом, когда
загрузчик определит, что защита включена, он распакует содержимое флешь в область RAM.
И сразу запустит от туда обработчик команд. (компилятор IAR)

Первое решение влоб, это тупой перенос содержимого флешь в рам и использование фиксированной таблицы адресов функций, в которой будут указаны адреса со смещением, таким, что в табицу попадал адрес ее в рам, написать диспетчер, который будет прыгать по этой таблице и вызывать нужные функции, но это давольно заморочено.

Собственно думал заменить механизм инициализации __ramfunc, на собственный механизм распаковки.
Это вообще возможно?Или есть что-то лучше?


Цитата(meister @ Mar 20 2008, 21:46) *
У меня в векторах прерываний стоят бранчи на сектор обновляемой части прошивки, а оттуда - куда надо.


Дело в том, что я хотел внутрипрограммно устанавливать и снимать защиту кода. Для этого надо затирать и переписывать страницу вместе с векторами прерываний, если вдруг произойдет сбой и страница не запишется, все улетит, и придется лезть по COM порту и перезаливать прошивку. И еще минус сбоя, если сделать это умышлено, то по ISP можно вычитать оставшуюся прошивку приложения.

Остановился на полном закрытии загрузчика.

Нашел еще интересную ссылку про загрузчик.
http://caxapa.ru/105173.html?hilite=scmRTOS&todo=full

Только как в новом IAR 5.11 сделать копию векторов прерываний в область, раположенную не по адресу 0x00000000, а в 0x00003000?


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 21 2008, 15:44
Сообщение #7


Гуру
******

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



Цитата(Vitaliy_ARM @ Mar 21 2008, 16:25) *
Потом, когда
загрузчик определит, что защита включена...

Похоже не поняли - ЗАЩИТА ВКЛЮЧЕНА ВСЕГДА. И никаих танцев с бубнами, распаковок из FLASH в RAM просто не надо. Тем более, что это НЕ ЗАЩИТА, если есть моменты, когда сам загрузчик занимающийся расшифровкой можно считать smile.gif


Цитата(Vitaliy_ARM @ Mar 21 2008, 16:25) *
Только как в новом IAR 5.11 сделать копию векторов прерываний в область, раположенную не по адресу 0x00000000, а в 0x00003000?

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Mar 21 2008, 22:20
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(zltigo @ Mar 21 2008, 18:44) *
Похоже не поняли - ЗАЩИТА ВКЛЮЧЕНА ВСЕГДА. И никаих танцев с бубнами, распаковок из FLASH в RAM просто не надо. Тем более, что это НЕ ЗАЩИТА, если есть моменты, когда сам загрузчик занимающийся расшифровкой можно считать smile.gif


Понял, но не до конца изложил идею. Всегда теперь разрешаю защиту. Ни для кого не секрет, что китайцы пилят процессоры. Как-то находил, что спилить авр стоит около 200 долларов.
Для меня сейчас главное - это защитить часть функций загрузчика, такие как считывание некоторой области данных. Или вообще весь загрузчик распаковывать, если все ключи внутри верны.
Допустим, ключем является вся область страницы флешь памяти. Пусть человек получил после спила китайскую прошивку. После ее зашития в нормальный процессор, загрузчик либо закрывает доступ к процессору (если в прошивке также установлен CRP), и разрешает доступ к функциям (к которым можно достучаться по определенному мной и шифрованному протоколу), в этом случае нужно ломать протокол. Либо нужно модифицировать начало флешь, чтобы записать туда программу, которая вычитывает всю прошивку, но в этом случае она вычитает просто какой-то мусор(зашифрофанную прошивку), а правильно расшифровать уже будет не возможно. Думаю этот способ по-лучше, чем просто поставить CRP. smile.gif , только проблеммный.

Собственно для запуска прикладной программы используется переотображение векторов, поэтому про загрузчик ей вообще знать не нужно (как в ScmRtos Сергея Борща).
Пока лучше не нашел способа, может подскажете, где еще можно посмотреть альтернативные варианты запуска прикладной программы?

п.с. защита прикладной области пока не рассматривается


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
meister
сообщение Mar 21 2008, 22:42
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(Vitaliy_ARM @ Mar 22 2008, 01:20) *
Ни для кого не секрет, что китайцы пилят процессоры.


Можно поподробней про "пилить"? smile.gif

CRP запрещает ISP и JTAG. Если мой загрузчик умеет только стирать и писать, на вход принимает шифрованную прошивку и не запускает некорректную программу (у которой CRC не сошлась). МК с моей прошивкой можно "распилить"?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 22 2008, 00:18
Сообщение #10


Гуру
******

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



Цитата(Vitaliy_ARM @ Mar 22 2008, 01:20) *
..поэтому про загрузчик ей вообще знать не нужно

Ага, "не нужно" smile.gif может она у Вас и работать сможет в пороизвольном месте Flash? Нет? Тогда она уже обязана знать, что работает в области не занятой загрузчиком и соответственно знать о существовании загрузчика. В остальном тоже сполшные заморочки без всякой надобности. Почитайте пост meister
для просветления.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Mar 22 2008, 11:15
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(meister @ Mar 22 2008, 01:42) *
Можно поподробней про "пилить"? smile.gif


Спилить, это значит получить полый дамп вашей прошики не смотря на установленные биты защиты.
Есть много различных способов. Как от недокументированных багов загрузчика, так и получение прошивки электронным микроскопом. Здесь уже старенькая информация о коллекции "спиленных" процессоров:http://www.mcucrack.com/, но попадалась и новая информация.
Пока про взлом ARM не слышал, AVR ломают направо и налево. А ARM - это просто дело времени.

Цитата(meister @ Mar 22 2008, 01:42) *
CRP запрещает ISP и JTAG. Если мой загрузчик умеет только стирать и писать, на вход принимает шифрованную прошивку и не запускает некорректную программу (у которой CRC не сошлась). МК с моей прошивкой можно "распилить"?

Все это хорошо, но что будет, если получить полный дамп вышей прошивки вместе с загрузчиком и залить в новый процессор?

Цитата(zltigo @ Mar 22 2008, 03:18) *
Ага, "не нужно" smile.gif может она у Вас и работать сможет в пороизвольном месте Flash? Нет? Тогда она уже обязана знать, что работает в области не занятой загрузчиком и соответственно знать о существовании загрузчика. В остальном тоже сполшные заморочки без всякой надобности. Почитайте пост meister
для просветления.


Написать скрипт для компановщика для прикладной области, располагать таблицу векторов в строго фиксированном месте в прикладной области прошивки, а загрузчик эту область знает, просто переносит ее в ОЗУ и делает Remap. В данном случае прикладную программу можно отлаживать без загрузчика. А она может находиться в любой области Flash.

Сообщение отредактировал Vitaliy_ARM - Mar 22 2008, 11:21


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
meister
сообщение Mar 22 2008, 11:28
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(Vitaliy_ARM @ Mar 22 2008, 14:15) *
Как от недокументированных багов загрузчика


Стандартные загрузчики выключены (совсем).

Цитата(Vitaliy_ARM @ Mar 22 2008, 14:15) *
электронным микроскопом


Это, наверное, слишком дорого.

Цитата(Vitaliy_ARM @ Mar 22 2008, 14:15) *
Все это хорошо, но что будет, если получить полный дамп вышей прошивки вместе с загрузчиком и залить в новый процессор?


Будет клон.
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Mar 22 2008, 11:31
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(meister @ Mar 22 2008, 14:28) *
Будет клон.


Так вот именно, а как вы его отличите от вашего устройства и что сможете сделать, чтобы предотвратить клонирование?


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
meister
сообщение Mar 22 2008, 11:35
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(Vitaliy_ARM @ Mar 22 2008, 14:31) *
Так вот именно, а как вы его отличите от вашего устройства и что сможете сделать, чтобы предотвратить клонирование?


Единственная моя защита - использование только своего загрузчика (не умеет читать flash), который на вход принимает только шифрованную прошивку (эффективаная длина ключа - 126 бит).
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Mar 22 2008, 11:42
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(meister @ Mar 22 2008, 14:35) *
Единственная моя защита - использование только своего загрузчика (не умеет читать flash), который на вход принимает только шифрованную прошивку (эффективаная длина ключа - 126 бит).


К сожалению в вашем случае "против лома нет приема".


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post

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

 


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


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