最近做产品,想出一个加密方法,而且已经在产品中实现了,现在贡献出来,与大家分享:
第一步:选择合适的加密算法
第二步:利用分散加载,将部分重要函数放到RAM中运行
第三步:将RAM中运行的函数的BIN数据提取出来,用芯片唯一ID当密钥进行加密!
第四步:将加密后的数据放在固定Flash中
第五步:将原程序中的函数用NOP进行填充
第六步:程序运行初始化的时候,将固定Flah中的数据进行解密,并拷贝到RAM中,程序完整再开始运行!
这样子破解的时候就算进行程序对比,知道那块是加密程序,由于不了解算法,也没办法!
欢迎拍砖!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
呵呵,我解密需要唯一ID,所以你这种方法破解出来的BIN到别的芯片里面根本没法用!
反正不会少,而且还很有前途
大哥 你没看懂我的意思? 买一个你的正版
不管你怎么加密,你运行也要解密出来。(ARM支持直接运行加密机器码,但你的密钥怎么保存?除非有防读出存储)
在你的解密完成函数返回的地方 修改机器码 比如 RAM 是 mov pc, lr(pop 一样) 我将这条指令改成 b .
此时你的代码已经解密, 但是所有数据以处于 静止状态
我用JTAG(能在内存里运行代码的处理器不支持JTAG很少), 初始化JTAG不对你的CPU复位(别的我不知道,JLINK就可以这样干) 然后读出你的数据就是了
这个还算比较笨的办法
最有效的防破解是代码存储的位置就不允许非授权读出, 芯片内部特殊处理,最好开盖即毁
要是不做加密,你今天出,别人明天就可以跟着出。难道你可以一天一个台阶?
做得大于一半研发成本就可以了。破解了之后没有维护能力,慢慢死掉才是最惨的。
一周热门 更多>