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

2020-02-20 20:45发布

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

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

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


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
99条回答
wangpengcheng
1楼-- · 2020-03-02 22:13
 精彩回答 2  元偷偷看……
xivisi
2楼-- · 2020-03-03 01:35
wangpengcheng 发表于 2014-11-23 12:42
我解密用的密钥就是机器唯一ID,如果想在我解密之后搞,那是没有用的,因为每个芯片的ID不一样,所以加密 ...

发觉  和楼主说的不是一个点

再仔细看了楼主位的方法

第一步:选择合适的加密算法
        不管
第二步:利用分散加载,将部分重要函数放到RAM中运行
        不管
第三步:将RAM中运行的函数的BIN数据提取出来,用芯片唯一ID当密钥进行加密!
        不管
第四步:将加密后的数据放在固定Flash中
        读出
第五步:将原程序中的函数用NOP进行填充
        比较,进行地址分析,为后续做准备
第六步:程序运行初始化的时候,将固定Flah中的数据进行解密,并拷贝到RAM中,程序完整再开始运行!
        将固定Flah中的数据进行解密:一旦解密完成    读出RAM中的数据   根据地址跳转  进行二进制代码合并  需要懂汇编和机器码
        程序完整:破解你的完整性校验算法,最简单的是在你返回成功或者失败的地方,直接修改为返回成功

以上:
①你能保证你的校验算法能被读出否?能被反汇编否?
②你的唯一ID地址是否固定?我可以全代码搜索该地址,甚至直接绕过
xivisi
3楼-- · 2020-03-03 03:09
我说的 破解方法  甚至绝大多数破解方法   都是建立在代码可被分析的情况下
1a2b3c
4楼-- · 2020-03-03 03:30
昨天还是前天我才回答了一个这个问题,
就是基于唯一ID的加密,不管用什么多复杂的算法也好分散也好,只要是采用唯一ID作为种子的加密,那么解密办法就是自己写2条汇编指令插入到原程序中,将新的芯片的读ID的那条指令返回样片的那个ID就行了,这样就是完全克隆了原片,根本不用理会啥算法,反正再复杂的算法都是放在FLASH中,这个简单的 攻击方法一下子就能抛开所有自我加密措施
参见这里
http://www.amobbs.com/forum.php? ... p;page=1#pid8170667
1a2b3c
5楼-- · 2020-03-03 06:39
楼主也参与了那个帖子的讨论的啊
happyliu
6楼-- · 2020-03-03 08:52
 精彩回答 2  元偷偷看……

一周热门 更多>