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

2020-02-20 20:45发布

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

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

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


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
100条回答
xivisi
2020-03-02 12:22
本帖最后由 xivisi 于 2014-11-23 11:59 编辑
wangpengcheng 发表于 2014-11-23 10:25
呵呵,我解密需要唯一ID,所以你这种方法破解出来的BIN到别的芯片里面根本没法用! ...


大哥  你没看懂我的意思?    买一个你的正版

不管你怎么加密,你运行也要解密出来。(ARM支持直接运行加密机器码,但你的密钥怎么保存?除非有防读出存储)

在你的解密完成函数返回的地方 修改机器码  比如 RAM  是 mov pc, lr(pop 一样)    我将这条指令改成  b .
此时你的代码已经解密,  但是所有数据以处于 静止状态

我用JTAG(能在内存里运行代码的处理器不支持JTAG很少),  初始化JTAG不对你的CPU复位(别的我不知道,JLINK就可以这样干)  然后读出你的数据就是了


这个还算比较笨的办法

最有效的防破解是代码存储的位置就不允许非授权读出,   芯片内部特殊处理,最好开盖即毁

一周热门 更多>