STM32 软件加密设计要点
开发人员一般设计软件加密方法:读 id---复杂算法计算---对比之前存储的对应
数据(与 id 相关)---判断芯片是否合法。
由于读 id 时很多人直接用 id 起始地址,例如 0x1FFFF7E8,破解的人只要把这
个数据改成 0x8000020,并且 0x8000020 程序区域填上
母片的 id,不管你的算法有多复杂,这时你的程序就被破解了,改这种软件加密
一分钟就改好了。
一、两层保护
a) 读保护。设置读保护功能,使芯片中的程序无法被读出。当关闭读保
护功能时,芯片会自动擦除 flash 中的所有程序;
b) 唯一的 ID 识别。每片 STM32 芯片都带有唯一的 ID,在程序中加入
ID 验证,使程序只能在一个 ID 下运行。万一程序被拷贝出来,烧入
其它的 STM32 芯片中也不能运行。
特点:有两重保护,芯片可重复使用。
二、熔丝方案
1. 功能简介:通过烧断芯片程序烧写口的熔丝,防止芯片中的程序被读出
或修改;
2. 特点:熔丝一旦烧断,程序就无法读写,程序升级只能换芯片。
三、利用 id 做软件加密
1,如果板子上有外部存储器,可以先编写一个程序,利用算法把 id 计算得
到一些值存入外部存储器,然后再烧写真正的程序,真正的程序去校验外
部存储器的数据是否合法即可
2,利用板子上按键组合,或是上电按住某些键,程序在这个时候利用算法
把 id 计算得到一些值存入程序区(stm8 为 EE 区),程序运行时去验证程序区
数据是否正确
3,轩微编程器有软件加密的功能,编程器会读芯片 id,根据算法直接改写
缓冲区,达到软件加密的作用
4,读出的 id 通过一定算法,例如异或加上一个数,得到的数据存入
ash(只运行一次,运行后标志位也存入 ash),下次读到这个标志位,就
不运行这个程序。//Q9272078
四、做软件加密时注意
1 , 不 要 在程序中 直 接 出 现 id 地 址 , 例 如 STM32:1FFFF7E8 1FFFF7EC
1FFFF7F0 STM8: 0x4865~0x4870
2, 利用校验和或是 crc 对程序区进行校验,防止改程序
详细可以和我沟通 QQ9272078