打印

求一个稳妥安全的程序加密方式,分M0、M3方案

[复制链接]
3432|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sedatefire|  楼主 | 2014-11-1 17:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
As the title
M0没有mcu ID,M3有

我个人的想法,如下
1. bootloader引导程序(读写保护烧录) + App(读保护烧录)
2. 给客户的app程序是加密的.key档,bootloader解密烧录到app区域。
3. bootloader和app双向校验合法性。

不过和别人交流下,发现我读写保护都还没搞清楚:o
据说MCU ID可以大作**,求成熟的做法。

相关帖子

沙发
dirtwillfly| | 2014-11-1 18:18 | 只看该作者
排队来学习,坐等加密大神

使用特权

评论回复
板凳
aozima| | 2014-11-1 18:54 | 只看该作者
我个人的想法,如下
1. bootloader引导程序(读写保护烧录) + App(读保护烧录)
2. 给客户的app程序是加密的.key档,bootloader解密烧录到app区域。
3. bootloader和app双向校验合法性。


已在产品中量产使用,而且每个产品的KEY和SN是唯一的。
不过,读保护 是基本的。
然后就是  key算法  ,即使开盖读出来,也要反向汇编并分析算法,加大了难度。

使用特权

评论回复
地板
sedatefire|  楼主 | 2014-11-2 13:43 | 只看该作者
aozima 发表于 2014-11-1 18:54
已在产品中量产使用,而且每个产品的KEY和SN是唯一的。
不过,读保护 是基本的。
然后就是  key算法  , ...

你说的key算法 和 我说的 可能不是一个概念。
我这个key解密仅存在于bootloader中,仅仅在程序下载更新时解密使用。
如果有人可以直接读出app的bin文件,那个一样是没有解密的。

使用特权

评论回复
5
xmar| | 2014-11-3 17:34 | 只看该作者
用专门的加密芯片。

使用特权

评论回复
6
sedatefire|  楼主 | 2014-11-8 05:41 | 只看该作者
xmar 发表于 2014-11-3 17:34
用专门的加密芯片。

我百度了加密芯片原理,其实还是有些看不懂。
可否介绍一下,主流低成本的加密芯片方案...

使用特权

评论回复
7
xzy568| | 2014-11-8 17:14 | 只看该作者
用号称牛X烘烘的STC

使用特权

评论回复
8
sedatefire|  楼主 | 2014-12-12 00:02 | 只看该作者
自己再顶上去

使用特权

评论回复
9
PIGYONG801| | 2014-12-12 14:13 | 只看该作者
最好只用一个HEX,不要客户去操作,现在的ARM都是可以自己读写FLASH的,这样用CHIP ID做表就容易了,加密算法也可自毁

使用特权

评论回复
10
mohanwei| | 2014-12-14 10:25 | 只看该作者
论坛里有很多帖子讨论到,我觉得最好的一种:
分4级以上保护:
1-芯片烧写完设置读保护——**这一步需要几百块到几万块不等,绝大部分**者能做到的只是这一步

2-在程序开头做一个拙劣的保护:
    if(ReadID() != xxxxx)//ID不对
    {
             while(1);//停止工作
     }
  **者舍得花大价钱的话,能请到高手,反汇编分析……然后高手能轻易把这个if屏蔽掉,满足他的成就感,拿到报酬,然后把你这块板扔掉……

3-在上面if之后,正常运行程序,启动定时器,过段时间(几天、几十天不等,跟你的设备开机时间有关)不时做一下隐蔽的程序完整性检查(例如CRC),发现不对就继续延时,随后不定时搞点破坏……破坏也要搞得隐秘些,最好就是看起来像是因为硬件问题造成的——例如你的板子外接电机,就在控制电机动作后让屏花一下,通信数据乱一下

4-代码中明文存储一些公司版权相关的字符串——也是让**者轻易修改的;
在其他地方加密存储版权相关的字符串,能让你通过某个命令或操作组合显示出来——打官司专用。

使用特权

评论回复
评论
shcshc1234 2014-12-15 21:05 回复TA
收藏收藏绝对经典 
11
sedatefire|  楼主 | 2014-12-15 10:16 | 只看该作者
mohanwei 发表于 2014-12-14 10:25
论坛里有很多帖子讨论到,我觉得最好的一种:
分4级以上保护:
1-芯片烧写完设置读保护——**这一步需要 ...

不愧是技术总监,果然强大
引导程序方面,您有什么建议吗

使用特权

评论回复
12
mohanwei| | 2014-12-15 10:48 | 只看该作者
sedatefire 发表于 2014-12-15 10:16
不愧是技术总监,果然强大
引导程序方面,您有什么建议吗

升级过程只有控制在自己手里才是足够安全的……
1-自己去升级
2-提供一个专用“以太网转JTAG/SWD/串口”的下载器给用户,你自己在服务器上操作——此时可以先发个简单的BL1到RAM,读取ID,服务器拿这个ID加密固件;再发个BL2到RAM,快速检查一下硬件是否是自家的;再发个BL3到RAM,解密数据包、烧录……中间可以穿插大量无用、冗余的操作,命令、应答的加密算法反复换

如果固件和升级工具都给用户,只能参考2,让流程尽量复杂一点,增加反汇编和抓包分析的难度,让**者知难而退了

厂家提供的Bootloader demo一般只能参考一下……我没深入研究过**,都能完整抓下ST和LM的M3的升级文件

使用特权

评论回复
13
sedatefire|  楼主 | 2014-12-15 11:02 | 只看该作者
mohanwei 发表于 2014-12-15 10:48
升级过程只有控制在自己手里才是足够安全的……
1-自己去升级
2-提供一个专用“以太网转JTAG/SWD/串口” ...

嗯 谢谢
固件和升级工具都给用户
这种情况,我是载入加密的.key文件,bootloader解密后烧录到flash中

使用特权

评论回复
14
bluerain| | 2014-12-15 21:20 | 只看该作者
解密者会把所有flash及EEPROM都解密出来烧进去,你这种简单的方法没用。

使用特权

评论回复
15
mohanwei| | 2014-12-15 22:50 | 只看该作者
diweo 发表于 2014-12-15 19:53
我是大致这样实现的:

加密程序Encoder()绝对定位到某一扇区,假设地址为a;

建议参考我前面写的……
大多程序员都是普通人,资质当然也很普通;而专业搞**的都是高手;显然普通人是没法跟高手正面对抗的……
所以你一定要研究高手的心理,用比较简单的陷阱,让高手高兴一把,然后放过你的板子(你逃过一劫,高手拿到报酬,付钱者拿到hex,大家都开心)……否则像你这样直接让高手下不了台,他会启动各种工具甚至终极的内核模拟器把你的代码分析透彻,一次搞定:lol

使用特权

评论回复
16
diweo| | 2014-12-16 08:10 | 只看该作者
mohanwei 发表于 2014-12-15 22:50
建议参考我前面写的……
大多程序员都是普通人,资质当然也很普通;而专业搞**的都是高手;显然普通人 ...

所以呀
5,人为加入一些“低级”的验证代码和处理,起混淆作用。
另外 ,我认为 ,除非它能完全模拟多个 输入信号的开关逻辑,否则只有内核模拟器,要追踪到核心代码,还是有难度的。
当然,说完全不能**,那是不现实的。所有的努力都只是尽量增加**者的时间和金钱成本。

使用特权

评论回复
17
sedatefire|  楼主 | 2014-12-16 11:14 | 只看该作者
diweo 发表于 2014-12-15 19:53
我是大致这样实现的:

加密程序Encoder()绝对定位到某一扇区,假设地址为a;

有了你,这个帖子就完整了

使用特权

评论回复
18
dianziyangshu| | 2014-12-16 18:10 | 只看该作者
谢谢,学习

使用特权

评论回复
19
江枫渔火| | 2014-12-16 23:44 | 只看该作者
谢谢分享

使用特权

评论回复
20
wuxing1106| | 2014-12-17 08:58 | 只看该作者
好多牛人啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我为我自己代言... 链接:一线研发之声系列汇集 链接:Sedatefire的笔记 我发心,待人

4393

主题

5935

帖子

33

粉丝