AVR和PIC控制器上的固件保护


23

有人可以提取在我提供的微控制器中刻录的HEX文件吗?

如果可能的话,某人如何确保其代码在嵌入式系统中得到保护?对于PIC和AVR微控制器,如何保护其固件不被复制?



1
在#1的情况下,您似乎建议您将十六进制文件提供给客户端,在这种情况下,他们可以将其写入多个克隆设备,尽管有可能,但实际上不需要反编译代码。对于锁定的设备(#2),通常取决于确定如何获取代码(换句话说,他们准备花多少钱),但这通常是可能的。
alexan_e 2014年

1
过去曾经是两年,但是对于流行的设备而言,这些天的保护通常会在一两天内被破坏。基本上,一旦有人决定值得这样做。如果您确实需要安全性,那么您需要涉足芯片业务,那么现成的商业部件将一无所获。
old_timer 2014年

Answers:


33

如今,大多数微控制器都有部分或制造商特定的方法来保护嵌入式固件代码。通常通过锁定通常允许读取代码存储器的电路来完成此操作。(您必须在数据表或制造商的网站上的适用应用笔记中查找零件的详细信息)。

一旦锁定,就无法使用常规技术读出代码存储器。这提供了合理级别的保护,以防止大多数黑客查看嵌入式应用程序的机器代码。

如今,许多MCU设备都有板载FLASH存储器来存储程序代码。通常可以用新代码替换以前存储在FLASH中并受保护的程序,但是需要进行全芯片FLASH擦除操作才能解锁保护机制。擦除后,该部件将像原始保护锁之前一样操作。如果加载了新程序,通常可以重新锁定零件以保护新加载的机器代码。

微控制器中有关代码保护的任何讨论都将不完整,而无需提及通常无法保证零件制造商提供的任何保护方案都是万无一失的。制造商甚至会声明保护系统不是100%傻瓜式的。造成这种情况的原因之一是,整个黑市市场都在发生着变化,勤奋的黑客会从收费部分中为想要付费的任何人读取代码,这是有偿的。他们设计了各种方案,允许从受保护的微控制器上的ROM或FLASH中读取代码。其中一些计划非常聪明,但在某些家庭中取得了比其他家庭更好的成功。因此,请注意这一事实,然后尝试保护您的程序免遭窥视。

一旦有人将手放在从微控制器(无论是否为受保护的微控制器)中读取的机器代码的二进制映像上,他们就可以通过称为反汇编程序的工具来处理机器代码。这会将二进制数据转换成汇编语言代码,可以对其进行研究以尝试了解程序算法的工作方式。准确地分解机器代码是一项艰巨的工作,可能需要大量工作。最后,该过程可能导致产生我所描述的汇编代码。如果您的程序是用某种高级语言(例如C,C ++或Basic)编写的,则汇编代码将仅表示程序的编译和链接结果。通常不可能一路将被盗的代码反向还原到高级语言级别。

这意味着用高级语言编写嵌入式应用程序固件实际上是有好处的。它提供了另一层,这使得您的程序难以完全进行反向工程。通过使用最先进的技术来优化编译器来编译嵌入式应用程序,可以带来更大的收益,因为性能最高的优化器可以从字面上将程序变成一个巨大的意大利面碗,其中包含数十个对短子例程的调用,这些子例程非常难解密反汇编程序。

大多数有经验的嵌入式开发人员会告诉您继续使用应用程序中MCU上提供的任何保护方案...。但不要依赖于产品开发的终点。他们会告诉您,在竞争中保持领先的最佳方法是不断升级您的产品,以使旧版本过时且在黑客克隆您的代码时不再感兴趣。更改代码,添加新功能,不时旋转PC板,以交换所有I / O以及您可能想到的其他任何东西。这样,您每次都能赢得比赛。


非常感谢@Michael Karas这是一个完整的答案
Rookie91 2014年

12

我认为Michael的答案足以解决这个问题,但我同时添加了这两个链接: 破解PIC 18F1320及其所做的一切,我们可能会失败 这些对我来说都很有趣。


勤奋的EE应该研究最后一个链接,并研究/比较/选择列表中缺少的设备。复杂性总是更具威慑力-如添加DS3641ATSHA204。尽管没有其他安全性可以100%不可破解,但是增加的复杂性可能使其不值得。
rdtsc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.