一种MCU程序加密解密方法技术

技术编号:38462847 阅读:21 留言:0更新日期:2023-08-11 14:39
本分案申请涉及MCU程序加密技术领域,尤其涉及一种MCU程序加密解密方法,具体为:利用软件编写MCU程序时,在编译器端对程序指令进行加密,通过将程序指令与程序指令相对应的指令地址进行逻辑运算后生成加密的程序指令,加密的程序指令在芯片中通过内置的相应解密逻辑电路进行硬件解密;本发明专利技术基于程序地址和程序指令的唯一相关性,通过软件加密硬件解密的方式,实现对MCU程序的加密解密,加密后的程序指令无规律可循,在芯片烧录、使用过程中读出的指令无法被反编译或破解移植,由于MCU程序在ROM中是加密过的二进制机器码,直接扎针读芯片ROM模块也同样无法破译,采用本案所述的加密解密方法,成本低,加密效果好,破译难度大。大。大。

【技术实现步骤摘要】
一种MCU程序加密解密方法
[0001]本申请为申请号201911325274.7、申请日2019年12月20日、专利技术名称“一种MCU程序加密解密方法”的分案申请。


[0002]本专利技术涉及MCU程序加密
,尤其涉及一种MCU程序加密解密方法。

技术介绍

[0003]常规的RISC精简指令集简单易用,编译出的二进制机器码也相对易懂,随之带来的问题就是易被反编译成汇编指令,继而被破解程序甚至程序被移植到同类替代芯片。对于MCU方案设计商来说,开发的MCU程序即知识产权,需要得到保护,现有的MCU开发、加密、烧录、解密流程如图1所示,从图1中可以看出,虽然设计者在芯片端都会做加密保护,一般情况下无法读出程序,但如果有烧录文档配合烧录器,通过烧录时抓取烧录时序分析仍然能够破译出源程序,开发的程序并不能得到最大程度的保护,对于MCU方案设计商来说仍然存在知识产权泄露风险。因此,亟需一种简单有效的加密方法来解决MCU程序易被破解的问题。

技术实现思路

[0004]针对现有技术中的问题,本专利技术提供一种MCU程序加密解密方法。
[0005]为实现以上技术目的,本专利技术的技术方案是:
[0006]一种MCU程序加密解密方法,利用软件编写MCU程序时,在编译器端对程序指令进行加密,通过将程序指令与程序指令相对应的指令地址进行逻辑运算后生成加密的程序指令,加密的程序指令在MCU芯片中通过内置的相应解密组合逻辑电路进行硬件解密。
[0007]作为优选,所述程序指令与程序指令相对应的地址进行逻辑运算的方法是:偶数地址的程序指令记为运算数A,运算数A高低字节交换后获得运算数B,程序指令相对应的指令地址为运算数C,运算数D为一常数,运算数B和运算数C进行异或运算后再与运算数D进行异或运算,生成加密的程序指令;奇数地址的程序指令记为运算数A

,程序指令相对应的指令地址为运算指令C

,运算数D

为一常数,运算数A

和运算数C

进行异或运算后再与运算数D

进行异或运算,生成加密的程序指令。
[0008]作为改进,运算数D和运算数D

为相同的值。
[0009]作为改进,运算数D和运算数D

为不同的值。
[0010]作为优选,所述程序指令与原始程序指令相对应的地址进行逻辑运算的方法是:将程序指令按照指令地址线每4个分为一组;每组中偶数地址的程序指令记为运算数A,程序指令相对应的指令地址为运算数C,运算数D为一常数,运算数A、运算数C、运算数D进行A+A

C

D运算后获得运算结果E;每组中奇数地址的程序指令记为运算数A

,运算数A

高低字节交换后获得运算数B

,程序指令相对应的指令地址为运算数C

,运算数D

为一常数,运算数A

、运算数B

、运算数C

、运算数D

进行A

+B
’‑
C
’‑
D

运算后获得运算结果E

;每组中位于
前两个地址位的运算结果E或者运算结果E

右移一位后生成加密的程序指令,位于后两个地址位的运算结果E或者运算结果E

左移一位后生成加密的程序指令。
[0011]作为改进,运算数D和运算数D

为相同的值。
[0012]作为改进,运算数D和运算数D

为不同的值。
[0013]从以上描述可以看出,本专利技术具备以下优点:
[0014]本专利技术基于程序地址和程序指令的唯一相关性,通过软件加密硬件解密的方式,实现了对MCU程序的加密解密,加密后的程序指令无规律可循,在MCU芯片烧录、使用过程中读出的指令无法被反编译或破解移植,由于MCU程序在ROM中也是加密过的二进制机器码,直接扎针读MCU芯片的ROM模块也同样无法破译,而采用本专利技术所述的加密解密方法,只要在MCU芯片内部增加少量的硬件数字逻辑即可实现,不仅加密解密成本低,而且加密效果好,破译难度大。
附图说明
[0015]图1是现有的MCU程序开发、加密、烧录、解密流程;
[0016]图2是本专利技术实施例1的MCU程序开发、加密、烧录、解密流程。
具体实施方式
[0017]结合图2,详细说明本专利技术的具体实施例,但不对本专利技术的权利要求做任何限定。
[0018]一种MCU程序硬件加密解密方法,利用软件编写MCU程序时,在编译器端对程序指令进行加密,通过将程序指令与程序指令相对应的指令地址进行逻辑运算后生成加密的程序指令,加密的程序指令在MCU芯片中通过内置的相应解密组合逻辑电路进行硬件解密。
[0019]根据上述加密解密方法,对一段指令进行加密解密设计,设计两个实施例。
[0020]实施例1:
[0021]取简单的一条指令MOV A,@0X00,将立即数0x00赋值于累加器ACC;
[0022]编译后的二进制码为0x0800;
[0023]再将0x0800根据指令地址做简单的运算,运算规则是:偶数地址的程序指令高低字节交换后与程序指令相对应的指令地址异或,然后再与常数0xABCD进行异或运算,奇数地址的程序指令直接与程序指令相对应的指令地址异或后再与常数0xABCD进行异或运算。
[0024]在不同地址的相同程序指令MOV A,@0X00的运算结果如表1所示:
[0025]表1
[0026]指令地址运算结果MOV A,@0X000x00000xABC5MOV A,@0X000x00010xA3CCMOV A,@0X000x00020xABC7MOV A,@0X000x03FE0xA83BMOV A,@0X000x03FF0xA032
[0027]从上表可以看出,运算结果无规律可循,在上述运算规则基础上,如果将奇数地址参与异或运算的常数修改为0xDCBA,或者再增加一次加运算,运算过程将更为复杂,破解难度将大大增加,而解密时,则在MCU内部做一部分简单的组合逻辑电路就可以将数值反编译
回原来的指令0x0800。
[0028]需要说明的是,MCU程序在开发时,使用的汇编指令,编译出的机器码采用的是十六进制,烧录器将程序烧到芯片时则转换成二进制机器码,因此加密的程序指令以二进制机器码存于ROM中,解密时,只要在MCU内部根据加密规则做相应的组合逻辑电路就可以将数值反编译回原来的指令。
[0029]如图1所示,为本实施例所述示例的MCU程序开发、加密、烧录、解密流程。
[0030]实施例2:
[0031]取简单的一条指令MOV 本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种MCU程序加密解密方法,其特征在于:利用软件编写MCU程序时,在编译器端对程序指令进行加密,通过将程序指令与程序指令相对应的指令地址进行逻辑运算后生成加密的程序指令,加密的程序指令在MCU芯片中通过内置的相应解密组合逻辑电路进行硬件解密;所述程序指令与程序指令相对应的地址进行逻辑运算的方法是:将程序指令按照指令地址线每4个分为一组;每组中偶数地址的程序指令记为运算数A,程序指令相对应的指令地址为运算数C,运算数D为一常数,运算数A、运算数C、运算数D进行A+A

C

D运算后获得运算结果E;每组中奇数地址的程序指令记为运算数A

,运算数A

高低字节交换后获得运算数B

,程序指令相对应的指令地址为运算数C

,运算数D

为...

【专利技术属性】
技术研发人员:方马龙
申请(专利权)人:无锡矽杰微电子有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1