最近做产品,想出一个加密方法,而且已经在产品中实现了,现在贡献出来,与大家分享:
第一步:选择合适的加密算法
第二步:利用分散加载,将部分重要函数放到RAM中运行
第三步:将RAM中运行的函数的BIN数据提取出来,用芯片唯一ID当密钥进行加密!
第四步:将加密后的数据放在固定Flash中
第五步:将原程序中的函数用NOP进行填充
第六步:程序运行初始化的时候,将固定Flah中的数据进行解密,并拷贝到RAM中,程序完整再开始运行!
这样子破解的时候就算进行程序对比,知道那块是加密程序,由于不了解算法,也没办法!
欢迎拍砖!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
细节还不知道怎么做的。求教楼主。 不考虑加密,假设一个工程里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运行,按上面的得好像手工搞很繁琐,
最不怕就是反汇编了,你想想你要理解别人C程序思路是多么难,何况面对一大堆汇编呢!还有N多无效数据
手工搞不了多少,呵可!试试就知道了,我在KIEL中成功将HEX文件分成两组了!
拿一块板子,寄给北京的XXX,然后等结果
解密的XXX读出bin文件后进行复制,复制成功后就签个协议,给土老板供复制的货
一周热门 更多>