单片机应用系统加密是保护知识产权不受侵犯的关键技术,如何简单有效的对系统加密,一直以来就是我们在研究探索的问题,但总的来讲加密技术可以分为两大类:即硬件加密和软件加密。下面我们就对常用的方法加以探究,以飨食读者。
一、软件加密
软件加密就是通过对指令的运用来实现加密的,不需要增加硬件电路,而因不需要增加成本,简单易行。
1、软件加密方法
(1)在程序模块之间插入加密字节
加密字节一般位于下一模块之前的1个或2个字节。
采用这种方法,一般的反汇编程序得到的是一些错误的程序代码,无法汇编出系统的实际运行程序。比如在GMR1和GMR2个模块之间插入1个加密字节75H(在51系列单片机中是一条立即数传送指令)。
对上面2两个摸块程序用一般的反汇编方法可得到如下的程序段:
可见,GMR1后面的指令已经得不到GMR2的结果了,即汇编结果与实际代码不符,可以实现原代码的保护作用。
(2)采用某些单片机特有的指令对软件进行加密
在MCS-51系列单片机中,使用JMP@A+DPTR指令代替AJMP、LJMP、SJMP等指令,如未加密的程序为:
加密修改后为(即把指令替换为):
(3)其他方法
例如使某些字节为两个模块共同使用的方法,即在编程时使某些字节为两个模块共同使用,使得反汇编程序汇编时得出的不是实际的程序代码;用返回指令代替跳转指令的方法等加密。
2、软件加密方法分析
当然这些加密方法无非是在未使用的程序存储器区域中全部都加上无用的程序代码,并把这些程序代码伪装的巧妙一些,或者是将数据进行模糊处理方法,并进行真假数据地址的交叉混叠,或者是采用数据与密钥进行逻辑异或等方法进行加密,以进一步增加破译程序的难度,这些都属于静态加密技术,静态加密的程序代码最终还是要以明文的方式在单片机中运行,解密者可通过调试跟踪和监视程序的执行过程及运行状态来分析和破解程序,这些方法对解密高手来说都没有太大难度。因此,对单片机应用程序的加密还应考虑动态反跟踪的问题,即程序的动态加密处理。
3、软件加密的应对策略
动态解码是指程序运行时,由一段程序专门对某一区域的加密指令或数据代码进行解密,当解密后的代码使用完毕,再将其重新加密,使存储器中不存在完整的程序代码。程序动态解码不仅对防程序的静态分析很有效,因为从加密程序的清单上很难看出程序的真实目的;而且在程序的反跟踪方面又有独到之处,在阻止带断点调试跟踪时,由于程序在执行之前是以密文形式出现的,解密者很难确定断点设置的位置,稍有不慎就会导致解密失败。
软件加密的方法有很多,不管采用何种方法,只能增加破译者的难度,不能完全阻止破解,是硬件加密的一种补充措施。
二、硬件加密
硬件加密常用的方法有以下几种:
1、总线技术加密法
总线技术加密法就是将单片机的地址总线或数据总线中的某些线进行交叉换位来改变某些线原有的逻辑关系,也就是采用改变总线接线即乱置法对其中的程序传输进行加密,特别是在单片机外部扩展程序存储器时,当固化到程序存储器的程序再从程序存储器中读出时,由于总线的乱置原因,使得数据经过反汇编后,改变了源程序从而达到加密的目的。
实际上通过改变接线关系还可以派生出很多机密方法:数据总线中某些线换位或求反(如图所示D7数据线);地址总线中某些线换位或求反;总线经过简单的逻辑门来改变原有关系。
这种方法虽然简单,但稍微对电路加以研究,就不难破解。
2、存储器技术加密方法
近年推出的大多数单片机内部都有加密锁定位或加密字节,开发者将调试好的程序固化到单片机内部程序存储器的同时将其锁定,这样就无法使用普通的仿真器或编程器读出其程序代码,这就是所谓的拷贝保护和锁定功能,看似保险,其实许多单片机在此功能的设计上是有漏洞的,对付这种破解可以采用破坏单片机的加密位的加密方法,简称OTP加密模式。
其原理是:编制一种加密算法,永久烧坏加密锁定位(把芯片内的硅片击穿),而不破坏其它部分,不占用单片机任何资源。加密锁定位被烧坏后不再具有擦除特性,单片机片内的加密位和程序存储器内的数据就不能被再次擦除,单片机就好像变成了一次性编程的OTP型单片机一样。
3、双芯片加密法
该加密法的基本原理如下:
(1)选用两片同系列的不同的单片机,如AT89C51/52和AT89LV51/52,将一片型号擦去,另一片则标以封装相同的存储器或其它芯片型号。
(2)编写系统程序时首先利用其内部的加密位进行加密。
(3)应用系统程序设计时使两个芯片交替工作,相互备份,相互验证。
但是无论怎样加密,单片机的指令最终都要在明文的方式下才能运行,而解密者可以使用单步调试ROM中的程序达到解密的目的,为了防止用单步跟踪方法进行解密,还可利用单片机内部的定时器使每一段程序内指令的执行时间受限,超过一定时间时甲机将改变程序代码,使系统不能正常运行。当然还可以选用表面封装类似或软件兼容的其它芯片代替乙机。
三、软件和硬件相结合加密方法
软件和硬件相结合是目前较为理想的加密手段,硬件主要是指专用加密芯片,数据的输入输出通过该芯片时,通过加密软件算法来验证是否合法。在工作时,将加密算法的明文与加密算法的密文、加密数组、解密数组、实时处理系统中处理信息的几个重要参数,均通过芯片的程序将其写入到芯片中,除非有口令才能重新写入数据,写密码不给用户。当系统运行到密码校验子程序时,系统按照已给的不同的等长度字符串作为入口参数,然后通过加密子程序,如果通过校验,则加密子程序返回重要参数,系统拥有此参数时,才得以继续执行。如果加密子程序没有通过校验,则系统停止工作。
采用软件和硬件加密相结合的综合设计方法,能广泛的应用于各种单片机系统。同时,在构造过程中只要设计合理,软硬件开销并不大,便能实现高性能的加密,高效稳固的实现系统信息的保护。
加密的方法多种多样,至于采取什么样的方法,要结合实际产品特点,从设计阶段即对产品的加密方法作全盘考虑,可根据产品的技术含量和综合仿制能力的难易程度,选择力所能及的加密技术,以使自己开发的新产品不被仿制或尽可能降低防止的可能性。
小知识之程序模块
程序模块(program module)即可由汇编程序、编译程序、装入程序或翻译程序作为一个整体来处理的一级独立的、可识别的程序指令。 它是大型程序指令的一个组成部分。