Вы не указали микросхему, в основном это относится к 8-битным устройствам Atmega, но это общая информация. Прочитайте раздел «Программирование памяти» для вашей спецификации конкретного чипа для получения более подробной информации!
При этом, как вы сказали, все устройства AVR содержат два бита блокировки с именами LB1 и LB2. Их программирование (до 0, низкий уровень) добавит защиту для содержимого, записанного во флэш-память и память EEPROM, в соответствии с таблицей ниже. Уровень защиты делится на три режима: режим 1 не обеспечивает защиты, а режим 3 обеспечивает максимальную защиту. Можно перейти к более высокому режиму защиты, просто перепрограммировав биты блокировки.
AVR позволяет менять «высокие» биты на «низкие», но не наоборот. Невозможно изменить «низкий» бит блокировки на «высокий», поэтому снижение уровня защиты невозможно. Чтобы очистить биты блокировки, требуется полная очистка чипа, которая стирает флэш-память.
Только эти 2 бита блокировки (LB1 и LB2) при низком уровне предотвратят кражу вашей прошивки 99,9% людей! Вероятно, более 99,9%. Почти всегда было бы проще перепроектировать ваш код.
Так нет ли способа позволить пользователю обновлять прошивку с помощью собственного загрузчика и одновременно защищать флэш-память от чтения?
Насколько мне известно (я могу ошибаться, но я думаю, что я имел бы проблему с этим раньше) на устройствах, которые имеют предохранители защиты загрузчика (BLB12 и BLB11), вы можете заблокировать свой пользовательский загрузчик раздел , отключить SPI и быть защищено от 97-98% людей.
Однако, когда ни один из битов блокировки не запрограммирован, функции блокировки памяти не включены !!!Отключение интернет-провайдера достаточно, чтобы заблокировать 70% людей.
Для получения дополнительной информации биты блокировки и предохранители не находятся в обычной флэш-памяти или в пространстве EEPROM и не доступны из программного обеспечения, за исключением битов блокировки, связанных с загрузчиком в устройствах с функцией самопрограммирования. Таблица 2 в этой заметке приложения поможет вам определить, что вы можете сделать для вашего конкретного устройства!
Линейка Atmel AVR не относится к устройствам с высокой степенью защиты (если не указано иное!), И как таковые они абсолютно не гарантируют безопасность кода и не должны! Как и все незащищенные устройства (и, к сожалению, даже некоторые безопасные), они подвержены распространенным атакам!
редактировать
Я добавлю заголовок интерфейса программирования HV на борт. Но может ли кто-нибудь использовать программатор HV для чтения флэш-памяти? Я знаю, что программист HV может стереть чип, даже если ISP / Jtag отключены.
Я не думаю, что вы должны включать программиста HV в дизайн вашей платы, если в этом нет крайней необходимости, и вы точно знаете, что это ни с чем не вызовет проблем. Программист HV (сигналы 12 В) доступен только в качестве меры безопасности для программирования заблокированных (в основном, с ошибками) чипов. Теоретически это предназначено только для того, чтобы устройство ничего не читало. И я никогда не слышал о подвиге, который позволил бы читать.
Для обновления загрузчика (иногда) я добавлю заголовок интерфейса программирования HV. Но может ли кто-нибудь использовать программатор HV для чтения флэш-памяти? Я знаю, что программист HV может стереть чип, даже если ISP / Jtag отключены.
Я думаю, что может быть способ обновить заблокированную флеш-память через загрузчик (что-то делать с внутренним флагом записи и / или ISR может быть ???) Но мне придется искать свои заметки и, возможно, придется проверить это. Я не смогу сделать это в течение ~ 20 часов; поэтому я настоятельно рекомендую задать новый вопрос, касающийся только этого и для процессора, который вы упомянули. Это очень хороший вопрос !
LB1
иLB2
, что я также описал в своем вопросе как ограничивающий вариант использования загрузчика в целях обновления. Так что это не вариант. Что касаетсяBLB12
иBLB11
- это то, что я не понимаю. (продолжение следует)Вы можете использовать биты блокировки на некоторых устройствах ATMega и по-прежнему обновлять свой код с помощью загрузчика.
Я запрограммировал LB1 и LB2 на ATMega 328. Затем вызвал загрузчик, обновил основную программу - все работало отлично.
Интернет-провайдер не может ни читать, ни записывать какие-либо flash / eeprom / fuses, но загрузчик все еще может писать раздел приложения.
Стирание чипа с провайдером очистит биты блокировки (LB1 и LB2), но также удалит весь flash / eeprom, таким образом вы можете защитить свой код (однако вы должны убедиться, что ваш загрузчик не может быть взломан)
источник