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

2020-02-20 20:45发布

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

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

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


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
99条回答
电气之光
1楼-- · 2020-02-29 02:28
我知道有一种解密手段,我至今未能想到好的对策。
这个手段就是先将芯片ID读出来,再把二进制代码完整弄出来,
然后反汇编,找出代码中读取唯一ID那些指令,将这些指令修改为加载常数的指令,使最终存放读出唯一ID的内存或寄存器装入被破解那颗IC的ID,
程序继续运行,就像还是在原来那颗芯上一样
twitter
2楼-- · 2020-02-29 08:17
windows的软件加密技术更复杂,像这样在运行中直接dump整个内存就能获得解密后执行代码的,强度不高的,至少也得是动态解密,利用异常来做。
其实以前CAPCOM的CPS2游戏机用的基板算是很BT了,板上电池掉电,芯片数据就毁了,但即使这样,CPS2还是被解密,现在都能用模拟器玩到了。
wangpengcheng
3楼-- · 2020-02-29 13:52
本帖最后由 wangpengcheng 于 2014-11-21 23:20 编辑
电气之光 发表于 2014-11-21 22:22
我知道有一种解密手段,我至今未能想到好的对策。
这个手段就是先将芯片ID读出来,再把二进制代码完整弄出 ...


这个的确是比较难,呵呵!还得再想想
wangpengcheng
4楼-- · 2020-02-29 14:15
电气之光 发表于 2014-11-21 22:22
我知道有一种解密手段,我至今未能想到好的对策。
这个手段就是先将芯片ID读出来,再把二进制代码完整弄出 ...

可以程序完整性进行校验啊,只要改动过,校验码就会不同,烧录前先将Flash全部充满随机数,再从不用的Flash中固定地址拿到一个随机数作为保存校验码的地址,这样可以解决这种解密方法!

这样的话程序运行前先进行代码完整性校验,如果代码改动过,将Flash清除!
电气之光
5楼-- · 2020-02-29 17:42
 精彩回答 2  元偷偷看……
javabean
6楼-- · 2020-02-29 18:17
费这么大劲……
个人觉得搞联网应用最佳,除非是有私服,否则一切靠网络那边服务器的资源,客户端代码,送人又如何,硬件能抄板,软件也不远了,核心,不在用户手里最佳
至于加密,搞几个防拆开关和自毁装置,程序还是写的好维护较好,要不然关键系统万一出问题,自寻烦恼

一周热门 更多>