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

2020-02-20 20:45发布

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

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

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


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
99条回答
huangqi412
1楼-- · 2020-02-29 20:57
wangpengcheng 发表于 2014-11-21 18:55
正在考虑12楼的方法,如果能非常方便的做到烧录器中,这个方案还是可行的!不过只是在KEIL中做过分散加载 ...

细节还不知道怎么做的。求教楼主。  不考虑加密,假设一个工程里4个函数ABCD, ABC编译到FLASH,D编译到RAM,C是将D从FLASH拷贝到RAM的程序,生成HEX带有地址信息.  FLASH大小N, ABC三个函数占用了其中M,剩下容量N-M,  需要人工从HEX里把RAM地址里的D函数部分复制到N-M这段地址里合并成BIN.
1 没编译前根本不知道D函数生成多大,C函数不知道要拷贝多少个字节,通过编译后查看大小再调整C函数参数后重新编译?
2 同是不知道D函数多大,N-M段FLASH里先通过一个无用的CONST数组占住位置不让别的函数和有用的数组占用预留位置,然后编译知道大小后修改数组大小重新编译再将D生成的替代HEX段内容?这个CONST数组似乎应该绝对地址定位到后面,免得重编译一次数组位置又变了
3 有多个函数要拷贝到RAM运行,按上面的得好像手工搞很繁琐,
wangpengcheng
2楼-- · 2020-03-01 01:01
电气之光 发表于 2014-11-22 13:55
到了反汇编这一步,你的程序就像手术台上的人,除非你的程序非常复杂有用的和无用的混在一起很难看出来, ...

最不怕就是反汇编了,你想想你要理解别人C程序思路是多么难,何况面对一大堆汇编呢!还有N多无效数据
wangpengcheng
3楼-- · 2020-03-01 04:04
huangqi412 发表于 2014-11-22 15:59
细节还不知道怎么做的。求教楼主。  不考虑加密,假设一个工程里4个函数ABCD, ABC编译到FLASH,D编译到RAM ...

手工搞不了多少,呵可!试试就知道了,我在KIEL中成功将HEX文件分成两组了!
wye11083
4楼-- · 2020-03-01 05:19
 精彩回答 2  元偷偷看……
3DA502
5楼-- · 2020-03-01 05:43
我见过的解密的人是土老板,只会销售
拿一块板子,寄给北京的XXX,然后等结果
解密的XXX读出bin文件后进行复制,复制成功后就签个协议,给土老板供复制的货
witbrave2014
6楼-- · 2020-03-01 10:43
没有破解不掉的加密,只能尽量增加破解成本才能延长产品被破解的周期

一周热门 更多>