请问STMF1加密后的FLASH代码怎么运行?

2019-07-14 16:58发布

代码加密后写入FLASH,CPU从FLASH读出的代码都是加密的,怎么运行呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
muuwfwr
1楼-- · 2019-07-15 23:19
你我然后 发表于 2018-10-12 14:00
针对你说的定位问题,在你编译的时候就已经定位。
比如 我的程序编译的时候就定位在在RAM里0x20001000处。解密的时候把解密后的程序直接放在RAM 的0x20001000处就可以了,因此也不存在定位问题。
RAM太小,你就加大RAM...

明白,感谢。

再问一下STM32本身的加密是怎样实现的?
比如有没有这样的方式:系统存储器的BootLoader在写FLASH的时候就使用硬件加密了,然后在取指后,硬件解密后CPU再执行?
吕少大大
2楼-- · 2019-07-16 02:22
加密的目的是不让别人获取程序代码,或者获取了也不能使用。
很少像你说的,把代码加密后存入FLASH,然后CPU读取FLASH解密再放到RAM中运行。

加密的基本方式又两种,一是硬件加密,二是软件加密。
硬件加密:一般是烧断熔丝,或者锁死FLASH(TI的FLASH型DSP用这种),目的都是防止别人读取程序代码。
软件加密:一般是ID加密,或者使用专用芯片加密。软件加密的程序,别人即使读到了FLASH中的代码,复制到其他板子上,也是不能正常工作的。
muuwfwr
3楼-- · 2019-07-16 07:44
吕少大大 发表于 2018-10-12 14:29
加密的目的是不让别人获取程序代码,或者获取了也不能使用。
很少像你说的,把代码加密后存入FLASH,然后CPU读取FLASH解密再放到RAM中运行。

这种加密方法是我最近研究的一个产品里用的方法,它的FLASH内容可以读,只是读出来的是加密的代码,不能写到其它序列号的STM32中。也算是一个加密的方法吧。这个方法类似你说的软件ID加密。
你说的这个软件ID加密方法在解密时怎么办?如果不把代码放在RAM里,CPU取指的时候得知道这是加密的代码,还要负责解密。STM32好像不支持这个。

个人感觉STM32还是ROP更安全些。
你我然后
4楼-- · 2019-07-16 12:05
muuwfwr 发表于 2018-10-12 14:47
这种加密方法是我最近研究的一个产品里用的方法,它的FLASH内容可以读,只是读出来的是加密的代码,不能写到其它序列号的STM32中。也算是一个加密的方法吧。这个方法类似你说的软件ID加密。
你说的这个软件ID加密方法在解密时怎么办?如果不把代码放在RAM里,CPU取指的时候得知道这是加密的代码,还要负责解密。STM32好像不 ...

肯定还有一部分解密的代码你没有读出来。
关键是要读出那段解密代码,解密代码是不会加密的。有可能是bootloader之类的东西。
吕少大大
5楼-- · 2019-07-16 17:17
 精彩回答 2  元偷偷看……
muuwfwr
6楼-- · 2019-07-16 22:04
你我然后 发表于 2018-10-12 14:54
肯定还有一部分解密的代码你没有读出来。
关键是要读出那段解密代码,解密代码是不会加密的。有可能是bootloader之类的东西。

看到那部分Boot代码了,8K代码量,正在头疼。

一周热门 更多>