SmartLock并口单片机软件狗加密技术
扫描二维码
随时随地手机看文章
由于加密给软件开发者和用户带来了许多不便和麻烦,因此,全球软件业的趋势是开发不加密软件,依靠版权法来保护软件开发者的权益。但对于一些大型的工程应用软件系统如:AutoCAD、Xilinx FPGA开发系统等,由于销量小、成本高,不得已仍然需要使用软件加密技术。另外,对于某些敏感行业的应用软件也必须实行软件加密,对程序代码进行保护。
早期的软件加密方法有:软盘或硬盘加密、加密卡等,由于加密性能、兼容性能或使用不方便等方面的原因而被淘汰。目前广为流行的是软件狗硬件电路加密法,其中又以使用单片机的加密技术最为可靠。其硬件通常都带有智能抗分析技术,不可复制,且加密方式灵活、工作可靠、运行速度快、使用方便,不失为软件加密的一种优选方法。
SmartLock软件狗加密系统的硬件部分外形类似火柴盒,两头分别带有一个IEEE-1284并行口的公头和母头,串接在并行口和打印机之间。软件狗使用的是Atmel公司的89C2051单片机,芯片从微机并行口取电,通过并口与加密软件进行通信,系统主要使用代码移植技术实现软件加密。
1 Smart Lock系统的硬件设计
通过研究微机打印口接口电路、IEEE-1284并口通信标准和89C2051型单片机特性,设计出SmartLock加密系统的硬件电路如图1所示。有89C2051单片机、3个锗二极管、1个12MHz晶振、2个30pF瓷片电容和1个电阻共8个元件。系统从并行口中共引出了11根端口线,其中有8根数据线D0~D7、1根状态线(低电平有效 ,当打印机接收完一字节数据允许微机发送下一字节数据时,发给微机信号)、1根控制线(低电平有效,打印机自动换行信号)和地线GND。
微机的标准并口并不提供+5V电源,所以只有从驱动能力较强的数据口“借电”。依据IBM PC AT/XT设计标准,并行口数据位的高电平(4.5V)输出电流为2.5mA(旧式的TTL型)或15mA(CMOS型),而89C2051单片机的典型工作电流为5.5mA/3V,工作频率为12MHz。所以使用D4~D6三根数据线经锗二极管并在一起作为单片机电源(采用锗管的原因是因为它的压降较小,只有0.4V)。同时为减少软件狗硬件的功耗,电路设计得极其简洁,除了单片机,没有其它有源器件。
单片机复位使用的是上电自动复位电路。因此微机对并行口供电几百毫秒之后,单片机才进入正常工作状态。
2 并口通信协议
软件狗使用数据口的D0~D3及D7作为微机向单片机传送数据的前向数据通道(一次送半字节数据,用D7位标志高/低半字节);并口控制/状态信号中的和平时不常用,所以这里用来作为微机向单片机传送数据时的握手信号。信号为高电平,则表示微机已准备好待传送数据,此协议中称为DR(data ready)信号;信号为低电平,表示单片机已准备好接收数据,此协议中称为PR(peripheral ready)信号。
软件狗从微机接收数据的时序如图2所示。具体步骤是:
(1)微机中的加密程序将DR()控制线设置为0,然后在并口的D4~D6数据线上给一个负脉冲后再置恒1,使软件狗复位启动;
(2)加密程序延时300ms后,设置D7为0,表示传送的是数据的低半字节;
(3)加密程序将需要传送的数据放到并口的D0~D3;
(4)加密程序在DR控制线上给出一个正脉冲,通知软件狗数据已准备好;
(5)软件狗收到DR信号后从D0~D3线上读取数据,同时,从D7位可以了解这半字节数据是低位还是高位。读完数据后在PR()状态线上给出负脉冲,通知微机数据已读完,可以进行下一次传送;
(6)加密程序收到PR信号后,即进行下一轮的数据传送,直到最后所有数据传送完毕或一定时间后仍没有收到PR信号,则出错退出。
SmartLock系统使用了状态线作为单片机向微机发送“串行”数据时的数据线。同时,通过使用独特的脉宽调制数据传送方式,实现了单端口线的数据传输。这是由于:
(1)微机并行口的用途是由微机向外设进行单向的数据传输,同时没有多余的备用端口线;
(2)并口中只有状态线才能向微机传送信息,其中状态线一般不用。
软件狗向微机发送数据的时序比较特殊,如图3所示。具体步骤是:
(1)微机中的加密程序将控制帧发送完毕后开始等待软件狗的返回数据。
(2)软件狗计算出返回数据后,首先发送一个固定长度的标准负脉冲,然后再依据数据值发送一个数据脉冲,两个脉冲代表一个数据值;直到所有数据发送完毕为止。
(3)加密程序通过计算数据脉冲与标准脉冲的宽度比得到数据值。
以上说明的是微机与软件狗之间数据通信的底层协议。双方通信时数据帧的具体格式则可以由用户根据需要自行定义。
3 加密软件系统
软件部分目前只采用内含式加密法。分为以下五个模块:底层I/O操作模块、用户接口模块、反跟踪模块、异常处理模块和全自动操作模块。它们之间的结构层次关系见图4。
3.1 底层I/O模块
底层I/O模块是最底层的功能函数,也是整个加密软件系统的核心。主要用于与软件狗进行数据通信,向软件狗发送数据,接收软件狗的返回值(包括对返回值的数字化转换和求精)及向上层模块报告通信过程中出现的错误。实际上是前面密钥模块在微机内运行的接口部分。另外,各种反跟踪技术主要也融入到此模块中。
3.2 用户接口模块
用户接口模块有多个,分别与软件狗的各个功能一一对应,用于对通信中数据格式的转换及对通信过程的管理。它们将上层软件传来的指令翻译为软件狗能识别的格式后再传给底层模块,然后将底层模块的返回值整理后上传。
用户接口函数可由待加密软件直接调用。它们自行检测并处理软件被跟踪调试时的情况,同时显式或是隐式地向用户软件提供软件狗是否合法的信息,用户软件可依据该信息来自行定义对软件系统处于非法运行状态时的处理措施(本软件系统提供了与各种反击方法对应的函数)。这种使用模式十分有利于加密模块与软件系统的融合,能大大提高软件系统的抗解密性能。
3.3 全自动操作模块
若用户要求软件加密系统自动完成对软件狗的检测及对检测结果的处理,则可使用该函数。它自行使用随机命令调用用户接口模块以检测软件狗的合法性,然后自动对检测结果进行判断并处理。当然,集成度高必然导致抗解密性能下降。
3.4 反跟踪模块
各类反跟踪措施(函数或程序段)用于检测软件系统目前是否处于被跟踪的状态,或人为地制造一些障碍,阻止解密者对本加密软件的分析。它们融合于底层I/O模块、用户接口函数及自动操作模块中,隐蔽地检测软件系统是否运行于调试环境下并自动作出相应处理。
3.5 异常情况处理模块
当加密软件检测到软件系统运行在调试环境下或软件狗非法时,就调用这一模块正常或非正常地中止程序的运行。一般情况下由于程序已处于被调试的状态,中止程序运行的标准方法通常会被解密者觉察出来而达不到目的。因此,只有那些违反常规的操作代码才能有效地中止程序的运行。
4 加密软件的使用方法
用户软件只需以函数调用的方式调用SmartLock加密系统中的用户接口模块,完成对软件的加密。这样便在用户软件和加密软件之间建立了数据联系,隐式地检查合法软件狗的存在。加密软件将自动对调试软件检测和处理,用户不需管理。
另一个更为可靠的使用方式是用户定制加密软件。SmartLock系统将用户待加密软件中的某些算法完全移植到单片机软件狗中去,再提供相应的用户接口模块。这一方式下用户软件将受到最大限度的保护。
5 代码移植技术
传统的软件加密的指导思想是:在软件系统中加入一种特殊的信息,这种信息既是加密后的软件系统在正常运行时必须引用的,又是用户无法自行复制的。于是,加密后该软件系统的运行完全依赖于售给用户的原信息载体。这一载体在加密技术中又被称为密钥。
本加密系统使用的代码移植技术是指将待加密软件的某些算法、程序段、重要的运算过程改造成单片机程序放在单片机中执行。由于单片机的程序ROM是解密者不可读的,这样,这段代码就被完全地保护起来了,解密者将无法接触到这段代码和数据。通过接口函数,软件狗可代替用户软件系统执行一些简单的运算功能,以实现代码移植。这一技术实际上是改造了传统的加密指导思想,它把原软件系统中的一部分信息取出来,封装到解密者不可复制的软件狗中。
按传统加密思想加密后的软件系统中,软件部分实际上仍然包含有原软件系统正常运行时所需要的所有信息(指令算法和数据)。在经过代码移植技术加密的软件系统,系统的软件部分已不完整,解密者即使历尽千辛万苦把软件分析透彻了,软件系统的正常运行还是离不开软件狗的支持。
SmartLock软件加密系统中使用的新颖技术主要有以下两点,它们有力地保证了软件狗的抗分析、反跟踪性能。
(1)特殊的并口通信协议
脉冲形式的握手信号,可有效对抗各种跟踪调试工具及软件。由图2软件狗的数据接收时序可知,本通信协议中,微机向单片机传送数据时是使用窄脉冲信号作为握手信号,这样微机的CPU必须不间断地查询软件狗的PR信号。而解密者在调试跟踪本软件时必然会因调试状态下软件运行时断时续而收不到握手信号,使数据传输过程出错。软件将无法正常工作。同时,反跟踪模块也可由此轻易查知调试环境的存在而采取相应的对策。
通过脉宽调制信号从软件狗向微机传送数据是一种全新的微机打印口数据传输方法。由于它与通常的数字信号相差很大,所以这种形式的数据具有很强的反动态跟踪能力。这样既解决了标准并行口反向传输信道窄的问题,又可有效对抗各种调试工具软件及端口信号分析仪。除非解密者完全了解它的工作机理,否则根本无法知道软件狗在干什么。
(2)代码移植技术
该技术将待加密软件与加密系统紧密配合,将需要保护的软件完全封装在黑盒中。
实际使用时,SmartLock软件狗系统还可以进行更灵活的设计以达到更强的加密效果。例如:将并行口的数据线与89C2051单片机的P1口全部对接,同时将8根数据线全部通过锗二极管并接成单片机电源。通信过程中,将其中的5根作为数据传输线,3根作为电源传输线;而且每根数据端口线的作用可以进行动态再分配。这种方法可以让端口分析仪几乎失去作用,抗分析性极强。
SmartLock软件狗可以轻易设计成一系列软件加密狗,在实际应用中效果良好。