Answers:
您没有指定芯片,以下内容主要适用于8位atmega设备,但这是一般信息。阅读特定芯片数据手册的“存储器编程”部分,以获得更多特定信息!
话虽如此,正如您所说,所有AVR设备都包含两个名为LB1和LB2的锁定位。将它们编程(设置为0,低)将根据下表为写入闪存和EEPROM存储器的内容增加保护。保护级别分为三种模式,其中模式1不提供保护,模式3提供最大的保护。只需重新编程锁定位,便可以进入更高的保护模式。
AVR允许将“高”位更改为“低”,但不能相反。无法将“低”锁定位更改为“高”,因此无法降低保护级别。要清除锁定位,需要完整的芯片擦除,以擦除闪存。
单独使用这两个锁定位(LB1和LB2)时,将防止99.9%的人窃取您的固件!可能超过99.9%。对代码进行反向工程几乎总是比较容易的。
因此,有没有办法让用户通过自定义引导加载程序更新固件并保护闪存不被同时读取?
据我所知(我可能会误会,但我想以前会遇到这个问题)在具有引导加载程序保护保险丝(BLB12和BLB11)的设备上,您可以锁定自定义引导加载程序部分,禁用SPI并可以保护97-98%的人免受伤害。
但是,如果没有编程任何锁定位,则不会启用任何存储器锁定功能!!!ISP禁用仅足以阻止70%的人。
有关某些其他信息,除了具有自编程功能的设备中与引导加载程序相关的锁定位之外,锁定位和保险丝不在正常的闪存或EEPROM空间中,也无法从软件访问。此应用笔记中的表2将帮助您确定可以为特定设备执行的操作!
Atmel的AVR产品线不是高安全性设备(除非明确指出!),因此,它们绝对不附带任何代码安全保证,也不应该!像所有非安全设备(甚至可悲的是一些安全设备一样),它们也容易受到常见攻击!
编辑
我将在板上放置HV编程接口头。但是有人可以使用HV编程器读取闪存吗?我知道即使禁用ISP / Jtag,HV程序员也可以擦除芯片。
我认为除非绝对需要,否则您不应该在板子设计中包括HV编程器,并且您知道它不会引起任何问题。HV编程器(12伏信号)仅作为对已锁定(大多数情况下为错误锁定)芯片进行编程的安全措施。从理论上讲,这仅意味着对设备进行编程而不读取任何内容。而且我从未听说过允许阅读的漏洞。
为了升级引导加载程序(偶尔),我将在板上放置HV编程接口标头。但是有人可以使用HV编程器读取闪存吗?我知道即使禁用ISP / Jtag,HV程序员也可以擦除芯片。
我认为可能有一种方法可以通过引导加载程序来更新锁定的闪存,(这可能与内部写标志和/或ISR有关?),但是我必须搜索我的注释并可能必须对其进行测试。我将无法完成约20个小时的操作;因此,我强烈建议针对您提到的处理器,针对此问题提出一个新问题。这是一个很好的问题!
LB1
和LB2
,在问题中我也将其描述为使用引导加载程序进行升级的限制选项。所以这不是一个选择。至于BLB12
和BLB11
-这就是我不明白。(待续)
您可以在某些ATMega设备上使用锁定位,并且仍然使用引导加载程序更新代码。
我在ATMega 328上对LB1和LB2进行了编程。然后调用了引导加载程序,更新了主程序-一切运行正常。
ISP既不能读取也不能写入任何闪存/ eeprom /保险丝,但引导加载程序仍可以写入应用程序部分。
使用ISP进行芯片擦除会清除锁定位(LB1和LB2),但也会擦除整个闪存/ eeprom,因此可以保护您的代码(但是必须确保引导加载程序不会被黑客入侵)