一种MCU程序加密解密方法与流程

文档序号:20578084发布日期:2020-04-29 01:16阅读:1079来源:国知局
一种MCU程序加密解密方法与流程
本发明涉及mcu程序加密
技术领域
,尤其涉及一种mcu程序加密解密方法。
背景技术
:常规的risc精简指令集简单易用,编译出的二进制机器码也相对易懂,随之带来的问题就是易被反编译成汇编指令,继而被破解程序甚至程序被移植到同类替代芯片。对于mcu方案设计商来说,开发的mcu程序即知识产权,需要得到保护,现有的mcu开发、加密、烧录、解密流程如图1所示,从图1中可以看出,虽然设计者在芯片端都会做加密保护,一般情况下无法读出程序,但如果有烧录文档配合烧录器,通过烧录时抓取烧录时序分析仍然能够破译出源程序,开发的程序并不能得到最大程度的保护,对于mcu方案设计商来说仍然存在知识产权泄露风险。因此,亟需一种简单有效的加密方法来解决mcu程序易被破解的问题。技术实现要素:针对现有技术中的问题,本发明提供一种mcu程序加密解密方法。为实现以上技术目的,本发明的技术方案是:一种mcu程序加密解密方法,利用软件编写mcu程序时,在编译器端对程序指令进行加密,通过将程序指令与程序指令相对应的指令地址进行逻辑运算后生成加密的程序指令,加密的程序指令在mcu芯片中通过内置的相应解密组合逻辑电路进行硬件解密。作为优选,所述程序指令与程序指令相对应的地址进行逻辑运算的方法是:偶数地址的程序指令记为运算数a,运算数a高低字节交换后获得运算数b,程序指令相对应的指令地址为运算数c,运算数d为一常数,运算数b和运算数c进行异或运算后再与运算数d进行异或运算,生成加密的程序指令;奇数地址的程序指令记为运算数a’,程序指令相对应的指令地址为运算指令c’,运算数d’为一常数,运算数a’和运算数c’进行异或运算后再与运算数d’进行异或运算,生成加密的程序指令。作为改进,运算数d和运算数d’为相同的值。作为改进,运算数d和运算数d’为不同的值。作为优选,所述程序指令与原始程序指令相对应的地址进行逻辑运算的方法是:将程序指令按照指令地址线每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’左移一位后生成加密的程序指令。作为改进,运算数d和运算数d’为相同的值。作为改进,运算数d和运算数d’为不同的值。从以上描述可以看出,本发明具备以下优点:本发明基于程序地址和程序指令的唯一相关性,通过软件加密硬件解密的方式,实现了对mcu程序的加密解密,加密后的程序指令无规律可循,在mcu芯片烧录、使用过程中读出的指令无法被反编译或破解移植,由于mcu程序在rom中也是加密过的二进制机器码,直接扎针读mcu芯片的rom模块也同样无法破译,而采用本发明所述的加密解密方法,只要在mcu芯片内部增加少量的硬件数字逻辑即可实现,不仅加密解密成本低,而且加密效果好,破译难度大。附图说明图1是现有的mcu程序开发、加密、烧录、解密流程;图2是本发明实施例1的mcu程序开发、加密、烧录、解密流程。具体实施方式结合图2,详细说明本发明的具体实施例,但不对本发明的权利要求做任何限定。一种mcu程序硬件加密解密方法,利用软件编写mcu程序时,在编译器端对程序指令进行加密,通过将程序指令与程序指令相对应的指令地址进行逻辑运算后生成加密的程序指令,加密的程序指令在mcu芯片中通过内置的相应解密组合逻辑电路进行硬件解密。根据上述加密解密方法,对一段指令进行加密解密设计,设计两个实施例。实施例1:取简单的一条指令mova,@0x00,将立即数0x00赋值于累加器acc;编译后的二进制码为0x0800;再将0x0800根据指令地址做简单的运算,运算规则是:偶数地址的程序指令高低字节交换后与程序指令相对应的指令地址异或,然后再与常数0xabcd进行异或运算,奇数地址的程序指令直接与程序指令相对应的指令地址异或后再与常数0xabcd进行异或运算。在不同地址的相同程序指令mova,@0x00的运算结果如表1所示:表1指令地址运算结果mova,@0x000x00000xabc5mova,@0x000x00010xa3ccmova,@0x000x00020xabc7mova,@0x000x03fe0xa83bmova,@0x000x03ff0xa032从上表可以看出,运算结果无规律可循,在上述运算规则基础上,如果将奇数地址参与异或运算的常数修改为0xdcba,或者再增加一次加运算,运算过程将更为复杂,破解难度将大大增加,而解密时,则在mcu内部做一部分简单的组合逻辑电路就可以将数值反编译回原来的指令0x0800。需要说明的是,mcu程序在开发时,使用的汇编指令,编译出的机器码采用的是十六进制,烧录器将程序烧到芯片时则转换成二进制机器码,因此加密的程序指令以二进制机器码存于rom中,解密时,只要在mcu内部根据加密规则做相应的组合逻辑电路就可以将数值反编译回原来的指令。如图1所示,为本实施例所述示例的mcu程序开发、加密、烧录、解密流程。实施例2:取简单的一条指令mova,@0x00,将立即数0x00赋值于累加器acc;编译后的二进制码为0x0800;再将0x0800根据指令地址做简单的运算,运算规则如表2所示:(1)将程序指令按照指令地址线每4个分为一组;(2)每组中偶数地址的程序指令(运算数a)与其本身进行加运算,再减去程序指令相对应的指令地址(运算数c),接着减去常数1(运算数d),获得运算结果;(3)每组中奇数地址的程序指令(运算数a’)高低字节交换后(运算数b’)与其本身进行加运算,再减去程序指令相对应的指令地址(运算数c’),接着减去常数0001(运算数d’),获得运算结果(4)每组中位于前两个地址位的运算结果右移一位后生成加密的程序指令,位于后两个地址位的运算结果左移一位后生成加密的程序指令。表2根据上述运算方法,在不同地址的相同程序指令mova,@0x00的运算结果如表3所示:表3从上表可以看出,运算结果无规律可循,并且比实施例1的结果更为复杂,破译难度更大,本实施例中运算数d和运算数d’可以采用相同的常数,也可以采用不同的常数。同理,在解密时,则在mcu内部做一部分简单的组合逻辑电路就可以将数值反编译回原来的指令0x0800。需要说明的是,mcu程序在开发时,使用的汇编指令,编译出的机器码采用的是十六进制,烧录器将程序烧到芯片时则转换成二进制机器码,因此加密的程序指令以二进制机器码存于rom中,解密时,只要在mcu内部根据加密规则做相应的组合逻辑电路就可以将数值反编译回原来的指令。通常情况下,完整的mcu程序由各种不同指令组成,在利用上述方法经过简单算法加密后,编译出的指令将会非常复杂多变,破解难度也会大大增加,不仅在mcu芯片烧录、使用过程中读出的指令无法被反编译或破解移植,由于mcu程序在rom中也是加密过的二进制机器码,直接扎针读mcu芯片的rom模块也同样无法破译,而采用本发明所述的加密解密方法,只要在mcu芯片内部增加少量的硬件数字逻辑即可实现,不仅加密解密成本低,而且加密效果好,破译难度大,从而能够实现对mcu程序的最大程度加密保护。本发明所述方法具体实施时并不限于实施例1和实施例2所描述的运算规则,使用者可以根据加密复杂度需求,再结合硬件解密的电路设计难度和成本,在程序设计时在编译器端做相应的算法设计,只要能够达到所需的加密保护程度即可。综上所述,本发明具有以下优点:本发明基于程序地址和程序指令的唯一相关性,通过软件加密硬件解密的方式,实现了对mcu程序的加密解密,加密后的程序指令无规律可循,在mcu芯片烧录、使用过程中读出的指令无法被反编译或破解移植,由于mcu程序在rom中也是加密过的二进制机器码,直接扎针读mcu芯片的rom模块也同样无法破译,而采用本发明所述的加密解密方法,只要在mcu芯片内部增加少量的硬件数字逻辑即可实现,不仅加密解密成本低,而且加密效果好,破译难度大。可以理解的是,以上关于本发明的具体描述,仅用于说明本发明而并非受限于本发明实施例所描述的技术方案。本领域的普通技术人员应当理解,仍然可以对本发明进行修改或等同替换,以达到相同的技术效果;只要满足使用需要,都在本发明的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1