Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Что там ST учудил с защитой кода.....
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
Dr.Alex
Вроде бы сразу несколько возможностей, а всё отстой какой-то....
Если сделать RDP Level 2, то необратимо отваливается JTAG.
Если включить всё остальное вместе взятое (RDP Level 1 и PCROP), то фактически защиты нифига никакой нет.
Пример: есть бутлодырь, грузящий шифрованную АЕСом прошивку по USB.
Но если подключиться жтагом во время прошивки, то можно будет найти в RAM расшифрованную прошивку, или сразу ключи АЕСа.
Так ведь? Или я во что-то не въехал?
adnega
Цитата(Dr.Alex @ Jun 9 2015, 22:04) *
Или я во что-то не въехал?

А какой именно камушек?
Ибо
CODE

Level 1: read protection
This is the default protection level when RDP option byte is erased. It is defined as well
when RDP value is at any value different from 0xAA and 0xCC, or even if the complement is not correct.
• User mode: Code executing in user mode can access main Flash memory and option
bytes with all operations.
• Debug, boot RAM and boot loader modes: In debug mode (with SWD) or when code
is running from boot RAM or boot loader, the main Flash memory and the backup
registers (RTC_BKPxR in the RTC) are totally inaccessible.
In these modes, even a simple read access generates a bus error and a Hard Fault
interrupt. The main Flash memory is program/erase protected to prevent malicious or
unauthorized users from reprogramming any of the user code with a dump routine. Any
attempted program/erase operation sets the PGERR flag of Flash status register
(FLASH_SR).
When the RPD is reprogrammed to the value 0xAA to move back to Level 0, a mass
erase of the main Flash memory is performed and the backup registers (RTC_BKPxR
in the RTC) are reset.

Неплохо защищает Flash и BKP. Если не хранить "необезображенную" копию в RAM не получается, то добро пожаловать в Level 2.
Чем он (Level 2) вас не устраивает? JTAG пропадает? А зачем он нужен? Не отлаживаться же.
Aner
Зачем так делать? Пишите свой бутлодырь с закрывашкой на конце.
Рестарт, затем грузите шифрованную АЕСом прошивку по USB. Второй рестарт, готово.
Dr.Alex
Цитата(adnega @ Jun 9 2015, 22:46) *
А какой именно камушек?

439

Цитата(adnega @ Jun 9 2015, 22:46) *
Если не хранить "необезображенную" копию в RAM не получается

Если нужна возможность фирмваре апдейта юзером, то и не получится никак.
Перед записью в любом случае инфа будет в раме, хоть побайтно, хоть поблочно, уже не так важно.
Даже если удастся удержать её в регистрах, чё толку? Регистры тоже через жтаг видны :-))))

Цитата(adnega @ Jun 9 2015, 22:46) *
Чем он (Level 2) вас не устраивает? JTAG пропадает? А зачем он нужен? Не отлаживаться же.

Может и устроит, но это требует тщательного тестирования бутлодыря.
А то есть хороший шанс запороть всю партию нафиг.
adnega
Цитата(Dr.Alex @ Jun 9 2015, 23:05) *
Если нужна возможность фирмваре апдейта юзером, то и не получится никак.
Перед записью в любом случае инфа будет в раме, хоть побайтно, хоть поблочно, уже не так важно.

Еще как получится, мне кажется вы слегка "перебдели")
Ну вижу я всю раму, что с того? Где начало прошивки, где конец, по какому адресу писать во Flash, как рассчитывается CRC для проверки корректности, и т.п.
Мало иметь данные, нужно иметь синхронизацию и знать весь алгоритм.
Чтобы было понятнее, я утрирую: "а вы не боитесь за свои пароли глядя на алфавит"?
Dr.Alex
Цитата(adnega @ Jun 9 2015, 23:16) *
Еще как получится, мне кажется вы слегка "перебдели")
Ну вижу я всю раму, что с того? Где начало прошивки, где конец, по какому адресу писать во Flash, как рассчитывается CRC для проверки корректности, и т.п.
Мало иметь данные, нужно иметь синхронизацию и знать весь алгоритм.
Чтобы было понятнее, я утрирую: "а вы не боитесь за свои пароли глядя на алфавит"?

Да не, неправильно вы говорите.
Если бы всё это было сложно установить, то люди бы до сих пор не изобрели АЕС, а "шифры" писали бы, заменяя одни буквы другими :-))))))
Если чё, я и сам когда-то в реверсинге довольно серьёзные вещи делал.
adnega
Цитата(Dr.Alex @ Jun 9 2015, 23:21) *
Да не, неправильно вы говорите.

Если обновляется только юзерская часть, а загрузчик фиксированный во Flash, то Level 1 вполне достаточно.
Прошивку можно вообще нешифрованной распространять (но нужно обезопасить себя от подделки прошивки) - толку от нее ноль без загрузчика.
Т.е. имея копию прошивки, враг не сможет производить устройства. Разве нет? Некоторые функции можно держать в виде экспортируемых из загрузчика.
Aner
QUOTE (adnega @ Jun 10 2015, 00:36) *
Если обновляется только юзерская часть, а загрузчик фиксированный во Flash, то Level 1 вполне достаточно.
Прошивку можно вообще нешифрованной распространять (но нужно обезопасить себя от подделки прошивки) - толку от нее ноль без загрузчика.
Т.е. имея копию прошивки, враг не сможет производить устройства. Разве нет? Некоторые функции можно держать в виде экспортируемых из загрузчика.

Это быстро раскалывается, с аесом, пока ни у кого из моих конкурентов не получилось, пытались раскалывать 12в импульсами, вроде как раньше пики, атмела открывали.
Пока только попалили STM процы.
Dr.Alex
Цитата(adnega @ Jun 9 2015, 23:36) *
Т.е. имея копию прошивки, враг не сможет производить устройства. Разве нет? Некоторые функции можно держать в виде экспортируемых из загрузчика.

Да вы што, ну хде хотя бы минимум фантазии??
Если протокол загрузки (и/или ключ АЕС) расколоты, то остаётся только загрузить свой код, который считает загрузчик.

Насчёт всяких колхозных "хитрушек" повторяю:: если бы они работали, то человечеству не пришлось бы изобретать шифры, хэши, цифровые подписи и так далее.

Вообще, у меня защита кода в контроллере это не основной уровень защиты.
В системе ещё есть сравнительно толстая плисина, которая производит аутентификацию специализированной микросхемы.
Но код в контроллере всё равно защитить хочется. Сегодня только комплексные меры работают. И то не против всех.
Golikov A.
перестановочный шифр не взламываемый, потому что не меняет энтропию текста.
проблема перестановочного шифра сохранить конфиденциальность ключа.

Если есть загрузчик закрытый и защищенный с этим ключем, и есть ваша прошивка сформированная по этому ключу, и вы его никому не сообщили, то какой толк от того что она лежит в РАМе и ее кто-то скачал.

на пальцах
вы решаете что 1 блок прошивке пишете в 5 адрес, 2 блок в 1, 3 в 4, 4 в 2, 5 в 3.
дальше прошивка 1 2 3 4 5 превращается в 5 1 4 2 3 - это вы и распространяете. Это человек и считает из РАМ, но только ваш загрузчик разложит это как надо чтобы оно запустилось. И реверс инженерить это никаких шансов, потому что строго говоря это каша а не прошивка.

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

И что не так?
Напоминаю что есть платная услуга по стравливанию кристалла и добычи из него прошивки, и стоит она не космических денег. Если это действительно кому то надо он обойдет все ваши заборы, а обычный гопник и простого не победит... главное не потратить на защиту больше чем она защищает....
Dr.Alex
Цитата(Golikov A. @ Jun 10 2015, 00:08) *

Глупости от начала до конца.
Ещё один наивный хочет защититься, переставив местами куски прошивки :-)))))))))

На всякий случай напоминаю::
Тема не о защите/взломе (уверяю, об этом я знаю больше подавляющего числа участников),
(и попрошу банальностей и сентенций на эту тему тут не писать)
Тема только об особенностях защиты в STM32F439. ВСЁ.
Golikov A.
ПРОСТИТЕ прочитал вашу добавку после того как написал.... Как вы просите:
да начудили они пендосы гадские... вы правы, делать нечего...


Дело ваше, вы видать в этом спец
Цитата
Если бы всё это было сложно установить, то люди бы до сих пор не изобрели АЕС, а "шифры" писали бы, заменяя одни буквы другими


эта фраза показывает что вы понимаете шифрование и зачем какой алгоритм развивают, и какие недостатки решают.

хотел дальше написать простенький и наглядный пример, но думаю приберегу бисерwink.gif...



как вам тогда такой вариант. Загрузчик не получив на вход специальной последовательности в течении какого-то времени сам отключает Jtag? Ведь он вам нужен только на случай
Цитата
Может и устроит, но это требует тщательного тестирования бутлодыря.
А то есть хороший шанс запороть всю партию нафиг.


Странно конечно видеть у такого профика сомнения в силах написать бутлоадер без ошибок, но тем не менее.. Пользователю при штатном обновлении он же не нужен, жетаг, а он дыра в вашей обороне, без кода он отключиться и проблема решена, что не так?
mantech
Цитата(Dr.Alex @ Jun 9 2015, 23:05) *
Может и устроит, но это требует тщательного тестирования бутлодыря.
А то есть хороший шанс запороть всю партию нафиг.


Бутлодырь такой навороченный, что его нельзя нормально протестить? Честно говоря никогда таких проблем не было laughing.gif
adnega
Цитата(Dr.Alex @ Jun 9 2015, 23:58) *
Если протокол загрузки (и/или ключ АЕС) расколоты, то остаётся только загрузить свой код, который считает загрузчик.

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

Если с помощью JTAG можно восстановить алгоритм работы загрузчика и узнать способ подделки прошивки, то JTAG нужно отключить.
Но мне кажется это очень-очень сложным (по шагам с анализом всей RAM), по сравнению с написанием собственной прошивки.

Да, загрузчик можно написать самый простейший. Не понятно в чем сложность и как можно загубить партию?
Dr.Alex
Цитата(mantech @ Jun 10 2015, 08:58) *
Бутлодырь такой навороченный, что его нельзя нормально протестить? Честно говоря никогда таких проблем не было laughing.gif

Ребята, вы немного не зазнавайтесь там :-)))
Помнится, я тут спрашивал, например, кто какой скорости работы по USB HS добился, в ответ молчок.
То есть никто вообще USB HS не использует (а у меня бутлодырь именно через него),
хотя я несколько месяцев с СТМ работаю, а некоторые якобы уже много лет,
зато все уверяют что могут за скромное время (адекватное задаче) всё это абсолютно безглючно написать и протестить :-))))
Ну блажен кто верует :-))))

Цитата(adnega @ Jun 10 2015, 09:17) *
Я же вводил условие, что прошивку нужно обезопасить от подделки, чтоб свой код врагу загрузить возможности не было.
А второе условие, что алгоритм работы загрузчика закрыт.

Как вы не поймёте, что единственная защита это неизвестность ключа АЕС
Именно это и ТОЛЬКО это и можно подразумевать под "прошивку обезопасить от подделки" и "алгоритм работы закрыт",
ну это же банальность, почему это приходится столько раз напоминать?
Иначе ваше "условие" звучит так: у меня самый навороченный замок, главное чтобы никто не догадался что ключ всегда под ковриком.

Цитата(adnega @ Jun 10 2015, 09:17) *
Да, загрузчик можно написать самый простейший. Не понятно в чем сложность и как можно загубить партию?

Вот русским языком же говорю третий раз что загрузчик написан (и не простейший, а нормальный по юсб),
и что вариант необратимо убить жтаг допускается, но НЕ ПРИВЕТСТВУЕТСЯ. Вот и всё.
mantech
Цитата(Dr.Alex @ Jun 10 2015, 09:55) *
То есть никто вообще USB HS не использует (а у меня бутлодырь именно через него),


Может не в тему, но зачем?? Там прошивка десятки мегабайт или нужно, чтоб прошилось за микросекунду?? Хотя, о чем я, флешка шьется гораздо дольше, чем передаются данные biggrin.gif
Я не зазнаюсь, конечно, но уж бутлодыри с усб, FS, конечно, делал и не один, шифрование использовал свой доработанный алгоритм, работал с усб флешки и сд карты, за полтора года ни одного нарекания на работу бута, контроллер стм 32ф407. Не вижу никаких проблем с тестированием бутлодыря.
Golikov A.
Я не очень понимаю смысл темы.

Вам говорят решения, в ответ мы слышим "чушь!", "фигня!", "бред!", "вы не разбираетесь, я вот все знаю". Ну знаете, так в чем проблема, к нам то вы чего пристали?
Пожаловаться на жизнь? Ну жене пожалуйтесь....

многих пользователе STM все устраивает, но они наверное меньше вас разбираются в том что
Цитата
единственная защита это неизвестность ключа АЕС

недоросли, простите....
Dr.Alex
Цитата(mantech @ Jun 10 2015, 10:03) *
Может не в тему, но зачем??

Верно ли я вас понял что юзеру удобнее взять кустарный датакабель
(который ещё у меня монтажник должен сделать и который юзер ещё чудом не потерял),
открыть корпус, присобачить его в технологический разъём и затем долго искать разъём COM-порта на своём компе?

А прошивка может все 2 метра занимать (код + несколько прошивок для артикса).

Цитата(Golikov A. @ Jun 10 2015, 10:08) *
Вам говорят решения, в ответ мы слышим "чушь!", "фигня!", "бред!", "вы не разбираетесь, я вот все знаю". Ну знаете, так в чем проблема, к нам то вы чего пристали?
Пожаловаться на жизнь? Ну жене пожалуйтесь....
недоросли, простите....

Уникальный человече :-)))))))))))))))))))))))))))
НИКАКИХ РЕШЕНИЙ, тем более у ВАС, я не спрашивал, потому что ВЫ действительно не доросли.
И уж тем более не мог приставать к кому-то в СВОЕЙ теме.

ТЕМА ОБ ОСОБЕННОСТЯХ ШТАТНОЙ ЗАЩИТЫ STM32
Верно ли я понял существующие режимы или в чём-то ошибся.


Кстати, кто какие реально использует?
RDP 1?
RDP 2?
PCROP?
Что-то ещё забыл?
adnega
Цитата(Dr.Alex @ Jun 10 2015, 09:55) *
Как вы не поймёте, что единственная защита это неизвестность ключа АЕС Именно это и ТОЛЬКО это

А для всех ли систем это справедливо? Если есть доступ через интерфейс отладчика, очевидно, что "неизвестности ключа" мало.
У каждого правила есть рамки применимости (которые не во всех книжках указывают), а вы слишком категоричны.

По теме:
1. В USB жесткие тайминги. Отладка будет сильно затруднена, т.к. интерфейс будет отваливаться на стороне хоста. Добавить условие, что прошивать можно только через 10 минут после "power on reset" и жизнь врага станет адом.
2. В режиме отладки стирание/запись во Flash не работает. Вы даже стирание страницы не сможете произвести. Да, одну страницу враг может и утянет.

При чем тут ST и "чудачества"? Как по-вашему должен был бы работать идеальный Level 1? JTAG для одной команды Mass Erase что ли?

PS. Создается впечатление, что вас на ST насильно пересадили)
Dr.Alex
Цитата(adnega @ Jun 10 2015, 10:25) *
А для всех ли систем это справедливо? Если есть доступ через интерфейс отладчика, очевидно, что "неизвестности ключа" мало.

В этом случае ключ быстро станет известным, а то и сами данные. Так что всё нормльно.

Цитата(adnega @ Jun 10 2015, 10:25) *
По теме:
...
...
При чем тут ST и "чудачества"? Как по-вашему должен был бы работать идеальный Level 1? JTAG для одной команды Mass Erase что ли?
PS. Создается впечатление, что вас на ST насильно пересадили)

Мне пабарабану, какое создаётся впечатление, но всё это как раз не по теме.
Если не нравится, как я написал заголовок, пожалуйтесь модератору, он переименует.
Тема: какие режимы лично ВЫ используете, и каковы их особенности.
Было бы лучше если бы левел2 был обратим. Ведь делается же массЕрасе при сбросе левела1!
mantech
Цитата(Dr.Alex @ Jun 10 2015, 10:20) *
Верно ли я вас понял что юзеру удобнее взять кустарный датакабель
(который ещё у меня монтажник должен сделать и который юзер ещё чудом не потерял),
открыть корпус, присобачить его в технологический разъём и затем долго искать разъём COM-порта на своём компе?

А прошивка может все 2 метра занимать (код + несколько прошивок для артикса).


Нет, в моем буте все гораздо удобнее - есть прошивка на флешке или сд карте, чел просто берет вставляет ее в контроллер, жмет кнопку и смотрит, пока мигает светодиод, сек 2-3 как правило, потом просто вытаскивает флеху и вставляет в след. контроллер.

Причем не надо ни кабелей, ни компа с программой для перепрошивки, по-моему очень удобно. cool.gif

ЗЫ. Использую level 2.
adnega
Цитата(Dr.Alex @ Jun 10 2015, 10:35) *
Тема: какие режимы лично ВЫ используете, и каковы их особенности.
Было бы лучше если бы левел2 был обратим. Ведь делается же массЕрасе при сбросе левела1!

Насчет названия:
Как правило темы, начинающиеся с "ST учудил", заканчиваются выводом "сам дурак".
Помню единственное исключение, когда была опечатка в документации от ST (с кем не бывает?).

По теме:
Level_1 это обратимый Level_2 в вашей терминологии.

Level_2 это способ сделать так, чтобы враг не смог стереть прошивку в принципе.

Давайте попробуем виртуально повзламывать прошивку в Level_1 через отладчик?
0. Подключаемся по JTAG.
1. По USB приходит команда обновить прошивку.
2. Загрузчик пытается стереть/подготовить сектор и обламывается. Ибо
Цитата
Any attempted program/erase operation sets the PGERR flag of Flash status register (FLASH_SR).

3. Процесс обновления заканчивается с ошибкой.

Разве не так?
Dr.Alex
Цитата(adnega @ Jun 10 2015, 10:52) *
Как правило темы, начинающиеся с "ST учудил", заканчиваются выводом "сам дурак".

Меня это совершенно не волнует. Я слишком большой сноб и слишком уверен в себе, чтобы об этом беспокоиться.

Цитата(adnega @ Jun 10 2015, 10:52) *
Any attempted program/erase operation sets the PGERR flag of Flash status register (FLASH_SR).

Это откуда?
У меня в RM0090 rev7 такого вроде нет.
Да и потом, ведь не обязательно подключаться сначала. Можно и в процессе. И вынуть ключ прямо из регистров блока CRYP :-))))
Aner
Непонятно, может у вас большой сноб уже в параною перешёл? Ведь если можно подключаться в процессе, то не проще ли сам загрузчик перехватить.
Dr.Alex
Цитата(Aner @ Jun 10 2015, 12:12) *
не проще ли сам загрузчик перехватить.

Что?
adnega
Цитата(Dr.Alex @ Jun 10 2015, 10:59) *
Это откуда?
У меня в RM0090 rev7 такого вроде нет.
Да и потом, ведь не обязательно подключаться сначала. Можно и в процессе. И вынуть ключ прямо из регистров блока CRYP :-))))

Я брал у stm32f0x2, но в RM0090 rev9 в разделе 3.7.3 Read protection (RDP):
Цитата
When the read protection Level 1 is set:
– No access (read, erase, program) to Flash memory or backup SRAM can be
performed while the debug feature is connected or while booting from RAM or
system memory bootloader. A bus error is generated in case of read request.

Что по сути не отличается.
Dr.Alex
Цитата(adnega @ Jun 10 2015, 12:28) *
Я брал у stm32f0x2, но в RM0090 rev9 в разделе 3.7.3 Read protection (RDP)

Ладно. Но это ничего не меняет.
adnega
Цитата(Dr.Alex @ Jun 10 2015, 10:59) *
Да и потом, ведь не обязательно подключаться сначала. Можно и в процессе. И вынуть ключ прямо из регистров блока CRYP :-))))

Достаточно ноги JTAG/SWD переопределить как GPIO, чтоб подключалось только через "under reset". Разве нет?
Dr.Alex
Цитата(adnega @ Jun 10 2015, 12:30) *
Достаточно ноги JTAG/SWD переопределить как GPIO, чтоб подключалось только через "under reset". Разве нет?

Возможно, не знаю. А да? :-)))))))
Но всё равно просматриваются варианты изучить протокол юсб (соснифить работу загрузочного софта), написать свой муляж софта, и затем покопаться жтагом во всех доступных местах (недоступен-то только флеш) чтобы заставить бутлодырь сделать ошибку.
adnega
Кста, посмотрел в модуль CRYP - регистр с ключами "write only", что логично. Т.е. вычитать ключи не получится.
Можно расшифрованную порцию хранить в батареечной SRAM, она тоже защищена от доступа в режиме отладки.
Aner
QUOTE (adnega @ Jun 10 2015, 13:44) *
Кста, посмотрел в модуль CRYP - регистр с ключами "write only", что логично. Т.е. вычитать ключи не получится.
Можно расшифрованную порцию хранить в батареечной SRAM, она тоже защищена от доступа в режиме отладки.

батареечный SRAM как то старо при FRAMe. Может быть и внешняя флешка с криптованной прогой, и абдейт удобно делать, при большём объеме кода. Пусть снифферят скока влезет.
sadat
Цитата(Dr.Alex @ Jun 10 2015, 09:55) *
Ребята, вы немного не зазнавайтесь там :-)))
Помнится, я тут спрашивал, например, кто какой скорости работы по USB HS добился, в ответ молчок.
То есть никто вообще USB HS не использует (а у меня бутлодырь именно через него),
и что вариант необратимо убить жтаг допускается, но НЕ ПРИВЕТСТВУЕТСЯ. Вот и всё.

Цитата
Или у STM32F207 (я лично получал для Mass-Storage порядка 7-8 МБайт/Сек.).
kovigor
Цитата
у меня получалось более 10мб/с в комплекте с тормозной сд-картой. на ulpi3300 и f215.
MBR
Скорость High Speed USB на STM32F2/F4
ну и далее поиском по форуме на USB3300.
Наверное, мало кто вопрос увидел.

По теме: со 2 уровня уж никак нельзя проц снять, совсем-совсем?
Dr.Alex
Цитата(sadat @ Jun 11 2015, 19:24) *
совсем-совсем?

совсем-совсем! :-)))
adnega
Цитата(Dr.Alex @ Jun 10 2015, 12:36) *
Возможно, не знаю. А да? :-)))))))

Пруф.
pavel-pervomaysk
Если прибор очень востребован, дорогой, актуальный, его обязательно слижут.
Хотите защититься от копирования - ставьте адекватную цену, проблем не будет.
bugdesigner
Я использую ROP=1 для защиты бутлоадера, обновление через USB (USB-flash). При включенном ROP=1 нельзя посмотреть содержимое RAM, FLASH или регистров, нельзя запустить код в RAM, можно только изменить уровень защиты на нулевой (ROP=0), но это приведет к автоматическому стиранию flash. Поэтому не вижу способа взлома через JTAG/SWD. ROP=1 вполне достаточно для защиты бутлоадера, а защита самой программки - это уж дело бутлоадера (шифрование, цифровая подпись).
Если я не прав, то расскажите хоть приблизительно технологию, как можно "утянуть" бутлоадер или расшифровать прошивку.
Dr.Alex
Цитата(bugdesigner @ Jun 12 2015, 12:04) *
При включенном ROP=1 нельзя посмотреть содержимое RAM, FLASH или регистров

Вы ничего не напутали?
Я знаю не ROP а RDP, и при RDP=1 как раз есть доступ к РАМ (кроме бэкап) и регистрам.
bugdesigner
Цитата(Dr.Alex @ Jun 12 2015, 12:53) *
Я знаю не ROP а RDP, и при RDP=1 как раз есть доступ к РАМ (кроме бэкап) и регистрам.

ROP/RDP - это одно и то же (read out protection). В режиме 1 можно запустить программу из RAM, но доступ к flash из этой программы невозможен. Для полного спокойствия нужно сразу после запуска перевести линии SWD/JTAG в режим IO и доступ будет полностью отрезан.
ViKo
Хочу уточнить вопрос. Задам защиту чтения Уровень 1. Загрузчик держу в секторе 0. Из него загружаю и прошиваюсь зашифрованной прошивкой.
Если я установлю защиту записи для сектора 0 nWRP[0], то при попытке записать в него выскочит ошибка WRPERR. Мне и не надо в него записывать. А что будет, если некто попытается изменить защиту чтения на Уровень 0? Должна стереться вся флэш-память. В том числе и сектор 0? И ошибка от стирания защищенного сектора уже не сработает?

Какой выигрыш я получу, защищая сектор 0 от записи? sm.gif
bugdesigner
Цитата(ViKo @ Jun 12 2015, 14:54) *
Должна стереться вся флэш-память. В том числе и сектор 0? И ошибка от стирания защищенного сектора уже не сработает?
Какой выигрыш я получу, защищая сектор 0 от записи? sm.gif

Если защитить сектор от записи, но не установить read out protection = 1, этот сектор можно прочитать через SWD/JTAG.
Если установить read out protection = 1, то, независимо от защиты на запись, прочитать ничего нельзя.
Если установлен read out protection = 1, и установить установить read out protection = 0 (отключить звщиту), то все содержимое flash будет стерто, не взирая на защиту от записи.
Dr.Alex
Цитата(bugdesigner @ Jun 12 2015, 14:49) *
В режиме 1 можно запустить программу из RAM, но доступ к flash из этой программы невозможен.

Достаточно того, что есть доступ к РАМ и регистрам.

Цитата(bugdesigner @ Jun 12 2015, 14:49) *
Для полного спокойствия нужно сразу после запуска перевести линии SWD/JTAG в режим IO и доступ будет полностью отрезан.

Никакого полного спокойствия не предвидится.
От ресета до того, как вы отключите жтаг, пройдёт много тактов процессора, достаточно для того чтобы автоматическая программа (а не юзер, шлёпающий по кнопкам IARa) успела подключиться и помешать вам отключить жтаг.
ViKo
Цитата(bugdesigner @ Jun 12 2015, 15:11) *
Если...

Интересует комбинация, которую я задал. rolleyes.gif 0 - включает защиту от записи. Сбрасываем уровень защиты чтения на 0.
bugdesigner
Цитата(ViKo @ Jun 12 2015, 15:27) *
Сбрасываем уровень защиты чтения на 0.

Сотрутся все секторы, даже если они защищены от записи. Те защита от записи в этой ситуации игнорируется.

Цитата(Dr.Alex @ Jun 12 2015, 15:15) *
От ресета до того, как вы отключите жтаг, пройдёт много тактов процессора, достаточно для того чтобы автоматическая программа (а не юзер, шлёпающий по кнопкам IARa) успела подключиться и помешать вам отключить жтаг.

Ну и что в результате? Доступа к содержимому флеш нет. Какую полезную информацию можно получить от содержимого памяти и регистров на момент инициализации GPIO?
Dr.Alex
Цитата(bugdesigner @ Jun 12 2015, 17:34) *
Ну и что в результате? Доступа к содержимому флеш нет. Какую полезную информацию можно получить от содержимого памяти и регистров на момент инициализации GPIO?

Вы кажется пропустили всю тему.
Во-первых есть возможность не дать записать в регистры то что не нужно, то есть не дать отключить жтаг.
А за тем вынуть из РАМ либо ключ аеса либо декодированную прошивку.
bugdesigner
Цитата(Dr.Alex @ Jun 12 2015, 22:27) *
Во-первых есть возможность не дать записать в регистры то что не нужно, то есть не дать отключить жтаг.
А за тем вынуть из РАМ либо ключ аеса либо декодированную прошивку.

Допустим, что мы успели приаттачиться к DP до момента, пока он не был отключен. Теперь нам нужно пропустить момент отключения DP и запустить ядро процессора. Что у нас получится - HardFault, потому, что доступ к flash при подключенном DP заблокирован. Можете провести экспериментик - напишите маленькую программку, чтоб гоняла какой-нибудь цикл, поставьте RDP=1 и попробуйте подключиться к SWD/JTAG дебаггером. А потом попробуйте запустить свой код из flash.
Dr.Alex
Цитата(bugdesigner @ Jun 13 2015, 07:48) *
Допустим, что мы успели приаттачиться к DP до момента, пока он не был отключен. Теперь нам нужно пропустить момент отключения DP и запустить ядро процессора. Что у нас получится - HardFault, потому, что доступ к flash при подключенном DP заблокирован. Можете провести экспериментик - напишите маленькую программку, чтоб гоняла какой-нибудь цикл, поставьте RDP=1 и попробуйте подключиться к SWD/JTAG дебаггером. А потом попробуйте запустить свой код из flash.

Не надо запускать свой код из флеш.
bugdesigner
Цитата(Dr.Alex @ Jun 13 2015, 12:39) *
Не надо запускать свой код из флеш.

А что тогда делать? Предложите хоть какой-нибудь алгоритм действий. Запустить свой код из ОЗУ- не получите доступ к флэш. В ОЗУ ничего интересного нет. Что дальше делать?
Dr.Alex
Надоело повторять каждому одно и то же. Для начала помешать проге отключить жтаг (есть доступ к регистрам), а затем найти в раме или регистрах либо ключи аеса, либо расшифрованные куски прошивки.
Читайте тему с начала (на все подобные вопросы уже отвечено), либо не пишите здесь вовсе.
Golikov A.
А через жтаг можно узнать текущую выполняемую команду, если она выполняется из флешь и та защищена от чтения? Разве есть доступ к конвейерам и прочим патрохам откуда можно узнать код команды?

Dr.Alex
Варианты навскидку:
1) прописывать PC, пытаясь перепрыгнуть нежелательный участок
2) останавливать проц через каждые несколько тактов и перезаписывать "опасные" регистры, не давая проге записать туда то что ей нужно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.