完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
所谓代码加密后写入flah是怎么一个原理?
|
|
|
|
首先要有一段没有加密的解密程序来读取flash,解密后再运行。
|
|
|
|
你为什么不用stm32本身的加密功能,要自己去加密代码呢?
|
|
|
|
|
|
1. STM32本身的加密流程是怎样的? 我主要关心的是代码加密后写入FLASH,不是RDP那些。 2. 还有,你说的“解密后再运行”怎么实现?是把解密后的代码拷贝到RAM运行么? 这样的话,加密代码在链接的时候应该定位到RAM,对吗? 如果是的话,RAM只有64KB,如果解密的代码本身已很大,RAM不光要存放解密后的代码,还要负责堆、栈、变量,RAM很可能出现不够用的情况。 谢谢关注 |
|
|
|
针对你说的定位问题,在你编译的时候就已经定位。
比如 我的程序编译的时候就定位在在RAM里0x20001000处。解密的时候把解密后的程序直接放在RAM 的0x20001000处就可以了,因此也不存在定位问题。 RAM太小,你就加大RAM... |
|
|
|
你我然后 发表于 2018-10-12 14:00 明白,感谢。 再问一下STM32本身的加密是怎样实现的? 比如有没有这样的方式:系统存储器的BootLoader在写FLASH的时候就使用硬件加密了,然后在取指后,硬件解密后CPU再执行? |
|
|
|
加密的目的是不让别人获取程序代码,或者获取了也不能使用。
很少像你说的,把代码加密后存入FLASH,然后CPU读取FLASH解密再放到RAM中运行。 加密的基本方式又两种,一是硬件加密,二是软件加密。 硬件加密:一般是烧断熔丝,或者锁死FLASH(TI的FLASH型DSP用这种),目的都是防止别人读取程序代码。 软件加密:一般是ID加密,或者使用专用芯片加密。软件加密的程序,别人即使读到了FLASH中的代码,复制到其他板子上,也是不能正常工作的。 |
|
|
|
吕少大大 发表于 2018-10-12 14:29 这种加密方法是我最近研究的一个产品里用的方法,它的FLASH内容可以读,只是读出来的是加密的代码,不能写到其它序列号的STM32中。也算是一个加密的方法吧。这个方法类似你说的软件ID加密。 你说的这个软件ID加密方法在解密时怎么办?如果不把代码放在RAM里,CPU取指的时候得知道这是加密的代码,还要负责解密。STM32好像不支持这个。 个人感觉STM32还是ROP更安全些。 |
|
|
|
muuwfwr 发表于 2018-10-12 14:47 肯定还有一部分解密的代码你没有读出来。 关键是要读出那段解密代码,解密代码是不会加密的。有可能是bootloader之类的东西。 |
|
|
|
ROP是Read Out Protection的缩写,字面意思就是读保护,属于我说的硬件加密方式。
我不知道你是怎么理解软件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( ),以防止反汇编轻易跳过加密代码。 理论上是没有一种加密方法是绝对不可破解的,只是增加破解难度。 同时使用硬件加密和软件加密可以使代码更加安全。 为了保护广大程序猿的劳动成果,以上方法欢迎转发,求扩散!!! |
|
|
|
看到那部分Boot代码了,8K代码量,正在头疼。 |
|
|
|
吕少大大 发表于 2018-10-12 15:00 本帖最后由 s40742360 于 2015-8-27 15:45 编辑 你说的也是一个办法。 其实,软件加密的本质就是个函数:密文=f(明文, 密钥),或者密文=f(明文)。密文肯定是公开的,如果明文也是公开的,手头如果有足够的分析样本,那被破解的可能性就有了。如果代码还可以被跟踪,那基本就可以被完全破解了。这就成了软件加密的软肋,更关键的是破解成本不大。所以,软件加密还是暴露的信息越少越安全。 硬件解密的话,成本就高了,打磨芯片、拍照、分析可不是随便谁能做到的。 |
|
|
|
压根没人“加密”程序,Windows也不例外。
|
|
|
|
你说的对,还是硬件加密要好些,对于一般的人破解成本要高些, |
|
|
|
ARM破解相对X86要好些,指令都是对齐的,X86指令加花更恶心。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1950 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1809 浏览 3 评论
4389 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1960 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2463 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 18:33 , Processed in 1.480973 second(s), Total 108, Slave 91 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号