嵌入式芯片加密防抄板技巧简析

背景

随着嵌入式和物联网的快速发展,越来越多的嵌入式产品推向市场,如何保证产品程序的安全和知识产权不受侵害呢,目前主要有两种方式:MCU端加密和外加加密IC来进行相关的产品和知识产权保护。
最近跟几个朋友讨论了以下相关加密的技巧,在这里分享一下。

外部IC加密

一般来说就是,在主控芯片和加密芯片都预存一个密码,STM32读取一个加密芯片生成的随机数,然后与8位密码做一个加密运算,把这个结果发给加密芯片比较。加密芯片用同样的随机数和密码做加密运算,结果是和STM32算出来是一样的则正常运行。
以上算是比较常见的ic加密的流程。
实际上比较容易看汇编很容易找到比对点,可以直接跳过比对点。
这种加密IC一般都是国外的,国外破解压力小,功能单一,另外电路要加外部IC,优势上感觉不是很明显。

简易MCU端加密

就是纯软件做加密了,我们这里着重讲这种,一般来说STM,NXP等常见芯片商的芯片上都有UID和flash读写保护。
MCU加密也常常就是UID+flash读保护为基础。flash读保护做第一重保护,防止别人直接读出你的固件(虽然也比较简单能读出来,淘宝成本50块)。UID加密做第二重保护,将硬件id加密存储在flash中,当固件id解密出来和硬件的id不匹配无法正常运行,不同的芯片不同的UID,别人抄完硬件烧录固件的时候,因为软件uid和硬件uid比对不通过,仍无法正常运行。

以上算是比较简单的MCU加密了,基本上所有的MCU端加密都是以以上思路来进行的。剩下的就是多加混淆,增加他人的破解成本了。

MCU端加密优化版

首先,上面说了芯片的flash读保护只能说是聊胜于无,现在常见芯片的flash保护破解基本已经是成熟产业链了,不要太依赖。所以程序仍然需要注意代码上的混淆加密了。

ID地址混淆

一般来说芯片的uid都是通过指定地址读取,如stm32f103的地址就是0x1ffff7e8,注意在程序中不要用以下方式直接读取,别人直接通过固件搜索地址0x1ffff7e8就可以知道你的cpuid读取在什么位置,从而找到校验区直接修改固件就可以直接跳过你的校验。


CpuID[0]=*(vu32*)(0x1ffff7e8);
CpuID[1]=*(vu32*)(0x1ffff7ec);
CpuID[2]=*(vu32*)(0x1ffff7f0);

注意使用公式计算出存储uid的地址,这种别人就没办法直接搜索出代码了。

代码混淆

我们的代码一般写不满芯片的flash,但是flash空的地方不要闲置,使用有用的代码缀余出来填满后面的空闲空闲区域,增加逆向工程破译难度。

校验区混淆

校验不要使用if else 而是用switch case,汇编里if else更容易搜索出来,一个一个筛选也很容易找到校验区。
当校验失败不要直接写while死循环,这样也容易跟踪知道你的校验区了。
这时你可以设计一种校验失败不直接死循环,而是使用一种校验错误次数,上电校验失败,次数加一,并在另外一个地方校验错误次数,在错误次数30次以下正常执行,在30次以上通过停止软件看门狗让他无限重启。
这样,在别人以为找到你的校验区成功破解的时候,并抄板准备量产的时候出现无限重启的问题,也会很让人崩溃的。

固件防修改

以上种种方法都算是混淆,同时我们也可以在固件防修改上下写功夫。固件的自校验可以参考我之前的博客
固件crc校验失败时不让正常运行。

芯片混淆

我们芯片一般都有丝印,别人可以通过丝印寻找对应的现成破解方案的时候,我们可以把一些非常不常见的杂牌芯片丝印印上去,这样也一定程度上误导并筛选掉一些逆向工程的破解。只不过这种改丝印的些许增加成本。

总结

说了这么多,无论是硬件加密还是软件加密,其实基本思路都是加密算法+UID。目前我所知的加密ic功能都比较简单,硬件加密的优势好像没有那么明显。反而软件加密能玩的花样不少。不过总的来说加密都只能说是增加别人的破解难度,并不存在真正安全的加密,大家可以根据项目自行设计合适自己的混淆加密逻辑。

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
hxpcb软件是一款电子设计自动化(EDA)软件,能够帮助工程师电路。下面是hxpcb软件的简要教程: 1. 第一步,安装软件:首先要从官方网站下载hxpcb软件的安装程序。下载完成后,运行安装程序,按照提示进行安装。 2. 第二步,打开原始电路文件:在软件界面上选择“打开”按钮,浏览到原始电路文件的所在位置,选中文件并点击“确定”打开。 3. 第三步,设置参数:在软件的设置菜单中,可以按照实际需求进行参数设置。例如,设置的层数、线宽、间距等。 4. 第四步,划分区域:使用软件提供的划分区域工具,对原始电路进行分区。分区的目的是为了提取不同功能模块的电路,方便后续的工作。 5. 第五步,自动:设置好区域后,使用软件提供的自动功能,进行自动操作。软件会根据原始电路提取出的区域信息,生成新的电路设计文件。 6. 第六步,检查结果:完成后,对生成的新电路设计文件进行检查。检查包括包括电路连接、未连接的线路、DRC规则等方面。 7. 第七步,导出Gerber文件:当结果没有问题时,可以将新电路设计文件导出为Gerber文件。Gerber文件是制造电路所需的文件格,可以直接提供给电路厂商进行制造。 以上是hxpcb软件的简要教程,通过学习这些步骤,工程师可以快速上手使用hxpcb软件进行电路,并生成制造所需的Gerber文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值