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

电器工程 图片 avr 嵌入式 固件
2022-01-10 22:35:33

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

如果这是可能的,那么有人如何确保他们的代码在嵌入式系统中是安全的?对于 PIC 和 AVR 微控制器,如何保护其固件不被复制?

2个回答

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

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

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

如果不提及通常无法保证零件制造商提供的任何保护方案是万无一失的,任何关于微控制器中代码保护的讨论都是不完整的。制造商甚至会声明保护系统不是 100% 万无一失的。造成这种情况的原因之一是整个黑市行业都在进行,在这些行业中,勤奋的黑客会从受保护的部分读取代码,并为任何想要付款的人付费。他们设计了各种方案,允许从受保护的微控制器上的 ROM 或闪存中读取代码。其中一些计划非常聪明,但在某些部分家庭上比在其他家庭上更成功。因此,请注意这一事实,然后您会尝试保护您的程序不被窥探。

一旦有人接触到从微控制器中读取的机器代码的二进制图像,无论它是否是受保护的微控制器,他们都可以通过一种称为反汇编器的工具来处理机器代码。这会将二进制数据转换回汇编语言代码,可以对其进行研究以尝试了解程序的算法是如何工作的。对机器代码进行准确的反汇编是一项艰巨的工作,可能需要大量的工作。最后,该过程可以导致像我描述的那样的汇编代码。如果您的程序是用某种高级语言(如 C、C++ 或 Basic)编写的,则汇编代码将仅代表程序的编译和链接结果。通常不可能将窃取的代码逆向工程回到高级语言级别。

这意味着用高级语言编写嵌入式应用程序固件实际上是有好处的。它提供了另一层,使您的程序更难被完全逆向工程。更大的好处是使用最先进的优化编译器来编译嵌入式应用程序,因为最高性能的优化器实际上可以将程序变成一个巨大的意大利面条碗,里面装满了对非常困难的短子程序的数十次调用在反汇编程序中破译。

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

我认为迈克尔的回答足以解决这个问题,但我添加了这两个链接: Hacking the PIC 18F1320 and Everything they make, We can break! 这两个对我来说都很有趣。