ARM芯片程序完整性加密,增加破解难度,保护知识产权!

2020-02-20 20:45发布

最近做产品,想出一个加密方法,而且已经在产品中实现了,现在贡献出来,与大家分享:

第一步:选择合适的加密算法
第二步:利用分散加载,将部分重要函数放到RAM中运行
第三步:将RAM中运行的函数的BIN数据提取出来,用芯片唯一ID当密钥进行加密!
第四步:将加密后的数据放在固定Flash中
第五步:将原程序中的函数用NOP进行填充
第六步:程序运行初始化的时候,将固定Flah中的数据进行解密,并拷贝到RAM中,程序完整再开始运行!

这样子破解的时候就算进行程序对比,知道那块是加密程序,由于不了解算法,也没办法!
欢迎拍砖!


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
99条回答
swap2013
1楼-- · 2020-02-27 03:48
wangpengcheng 发表于 2014-11-21 19:07
那你测试的时候是如何测试的?等32天?哈哈

修改变量到31天,23时59分
swap2013
2楼-- · 2020-02-27 07:30
 精彩回答 2  元偷偷看……
wangpengcheng
3楼-- · 2020-02-27 11:59
swap2013 发表于 2014-11-21 19:09
bootloader 里一样可以实现

对啊,我可以做一个Boot,然后在boot中进行程序解密,然后把Boot放到烧录器中,这样我只要教客户做分散加载就可以了,我在下载程序的时候先把Boot烧进去,然后把加密后的程序烧进去,最后再把客户的代码烧进去,这样就不就完整的用烧录器搞定加密的事情了吗?而且我可以不需要看到客户的代码,客户也不用这如何加密的!这样客户需要做的事情就是分散加载设置和拥有一个我的烧录器就可以了!真是谢谢你啊,兄弟!
amxx
4楼-- · 2020-02-27 14:44
不管什么程序,生产产品时都是需要固化到FLASH里面的,直接分散加载到RAM里面估计只有调试的时候能使用吧(编译器直接调用JLINK往不同的地址写不同的内容),如果直接做成产品分散加载到RAM里面的代码如何烧写

按照楼主的思想我觉得还不如对重要的函数进行单独的编译生成二进制文件(文件名A),最后在上位机上做一个加密软件,同时对A文件进行加密并生产加密的文件B,才用BOOTLOARD的方法将加密的文件B烧写到FLASH里面去,ARM里面运行和相反的解密算法,直接将文件B解密到RAM里面,然后执行,当然在加解密过程中可以用到芯片的ID,欢迎大家讨论!!!!!
wangpengcheng
5楼-- · 2020-02-27 16:59
amxx 发表于 2014-11-21 19:28
不管什么程序,生产产品时都是需要固化到FLASH里面的,直接分散加载到RAM里面估计只有调试的时候能使用吧( ...

呵呵,哥,你说的跟我说的有什么不同?你再仔细看一下就知道了!分散加载是为了确定程序运行的位置,其主要作用是要把函数生成的BIN拿出来进行加密!
amxx
6楼-- · 2020-02-27 20:31
既然大家提到加密,我谈谈对STM32的看法,当然这是我个人的想法,因为时间关系还没有来得及实现,如果想法是正确的,后果有点可怕,但愿我的想法存在问题
STM32通过BOOT0,和BOOT1,可以配置为从FLASH里启动和从RAM里面启动,我们正常的代码是固化在FLASH里面的,一上电也从FLASH的地址开始运行(具体FLASH地址记不清了好像是0x08000000),如果我们固化了一个产品的正常代码放到FLASH里面,这个时候别人拿我们的产品通过修改BOOT0,和BOOT1引脚的电平配置为从RAM启动,按照道理说也没有问题,因为RAM里面是空的无法启动,可怕的是这个时候他又通过JLINK烧写了一段分散加载到RAM里面的程序(编译器指定烧写了这段程序到RAM里面),然后一运行通过串口把数据就啪啦啪啦读出来了,后来我也在想应该STM32没有这么傻吧,大家有没有遇到?或者说想过?

一周热门 更多>