你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
adlu 发表于 2015-8-27 09:55 ROP是Read Out Protection的缩写,字面意思就是读保护,属于我说的硬件加密方式。 我不知道你是怎么理解软 ...
adlu 发表于 2015-8-26 17:47 加密的目的是不让别人获取程序代码,或者获取了也不能使用。 很少像你说的,把代码加密后存入FLASH,然后C ...
党国特派员 发表于 2015-8-26 08:21 你为什么不用stm32本身的加密功能,要自己去加密代码呢?
党国特派员 发表于 2015-8-26 12:51 针对你说的定位问题,在你编译的时候就已经定位。 比如 我的程序编译的时候就定位在在RAM里0x20001000处。 ...
代码加密后写入FLASH,CPU从FLASH读出的代码都是加密的,怎么运行呢?
s40742360 发表于 2015-8-26 18:10 这种加密方法是我最近研究的一个产品里用的方法,它的FLASH内容可以读,只是读出来的是加密的代码,不能写 ...
党国特派员 发表于 2015-8-27 09:54 肯定还有一部分解密的代码你没有读出来。 关键是要读出那段解密代码,解密代码是不会加密的。有可能是boo ...
我不知道你是怎么理解软件ID加密的。
我所说的ID加密方式,不是对FLASH中的指令代码进行加密,没有解密过程,只有验证ID的过程。
程序基本流程和不加密的程序相同,只是在上电后先调用一个自定义的验证ID的函数,假设名为checkID( )。
实现的方法是这样的:
1.将FALSH中某个地址,假设是0xABCD,作为ID校验密码的存放地址;
2.读取ID、读取0xABCD中的校验码;
3.将这两个参数作为checkID( )的输入参数,经过自己的加密算法计算后,如果两个参数匹配,则程序继续往下运行,否则,擦除FLASH的部分或全部内容,销毁程序。
当然需要由一个通用的ID校验码,假设为0x12345,当checkID( )检测到输入的校验码是0x1234,就使用芯片ID进行计算生成与ID匹配的校验码,再写到地址0xABCD中。在批量烧录的代码中,使用的是通用ID校验码,程序第一次运行时,会根据自己的ID更新校验码。这样,别人即使读到FLASH中的代码,也是不能在其他不同ID的芯片上运行的。
可在程序中间多个地方调用checkID( ),以防止反汇编轻易跳过加密代码。
理论上是没有一种加密方法是绝对不可破解的,只是增加破解难度。
同时使用硬件加密和软件加密可以使代码更加安全。
为了保护广大程序猿的劳动成果,以上方法欢迎转发,求扩散!!!
你说的也是一个办法。
其实,软件加密的本质就是个函数:密文=f(明文, 密钥),或者密文=f(明文)。密文肯定是公开的,如果明文也是公开的,手头如果有足够的分析样本,那被破解的可能性就有了。如果代码还可以被跟踪,那基本就可以被完全破解了。这就成了软件加密的软肋,更关键的是破解成本不大。所以,软件加密还是暴露的信息越少越安全。
硬件解密的话,成本就高了,打磨芯片、拍照、分析可不是随便谁能做到的。
这种加密方法是我最近研究的一个产品里用的方法,它的FLASH内容可以读,只是读出来的是加密的代码,不能写到其它序列号的STM32中。也算是一个加密的方法吧。这个方法类似你说的软件ID加密。
你说的这个软件ID加密方法在解密时怎么办?如果不把代码放在RAM里,CPU取指的时候得知道这是加密的代码,还要负责解密。STM32好像不支持这个。
个人感觉STM32还是ROP更安全些。
1. STM32本身的加密流程是怎样的?
我主要关心的是代码加密后写入FLASH,不是RDP那些。
2. 还有,你说的“解密后再运行”怎么实现?是把解密后的代码拷贝到RAM运行么?
这样的话,加密代码在链接的时候应该定位到RAM,对吗?
如果是的话,RAM只有64KB,如果解密的代码本身已很大,RAM不光要存放解密后的代码,还要负责堆、栈、变量,RAM很可能出现不够用的情况。
谢谢关注
比如 我的程序编译的时候就定位在在RAM里0x20001000处。解密的时候把解密后的程序直接放在RAM 的0x20001000处就可以了,因此也不存在定位问题。
RAM太小,你就加大RAM...
明白,感谢。
再问一下STM32本身的加密是怎样实现的?
比如有没有这样的方式:系统存储器的BootLoader在写FLASH的时候就使用硬件加密了,然后在取指后,硬件解密后CPU再执行?
加密的目的是不让别人获取程序代码,或者获取了也不能使用。
很少像你说的,把代码加密后存入FLASH,然后CPU读取FLASH解密再放到RAM中运行。
加密的基本方式又两种,一是硬件加密,二是软件加密。
硬件加密:一般是烧断熔丝,或者锁死FLASH(TI的FLASH型DSP用这种),目的都是防止别人读取程序代码。
软件加密:一般是ID加密,或者使用专用芯片加密。软件加密的程序,别人即使读到了FLASH中的代码,复制到其他板子上,也是不能正常工作的。
肯定还有一部分解密的代码你没有读出来。
关键是要读出那段解密代码,解密代码是不会加密的。有可能是bootloader之类的东西。
看到那部分Boot代码了,8K代码量,正在头疼。